0% found this document useful (0 votes)
2 views

code2

The document contains Python code for various utility functions and classes related to neural network initialization, image loading, and logging. Key functions include custom weight initialization for neural network layers, directory creation, and a Logger class for logging metrics. The code also includes assertions for equality checks and a method to load image files from a specified folder.

Uploaded by

kangja1530
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

code2

The document contains Python code for various utility functions and classes related to neural network initialization, image loading, and logging. Key functions include custom weight initialization for neural network layers, directory creation, and a Logger class for logging metrics. The code also includes assertions for equality checks and a method to load image files from a specified folder.

Uploaded by

kangja1530
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

from __future__ import print_function

import errno
import os
import numpy as np
# from PIL import Image
import torch
import torch.nn as nn

EPS = 1e-7

def assert_eq(real, expected):


assert real == expected, '%s (true) vs %s (expected)' % (real, expected)

def assert_array_eq(real, expected):


assert (np.abs(real-expected) < EPS).all(), \
'%s (true) vs %s (expected)' % (real, expected)

def load_folder(folder, suffix):


imgs = []
for f in sorted(os.listdir(folder)):
if f.endswith(suffix):
imgs.append(os.path.join(folder, f))
return imgs

# def load_imageid(folder):
# images = load_folder(folder, 'jpg')
# img_ids = set()
# for img in images:
# img_id = int(img.split('/')[-1].split('.')[0].split('_')[-1])
# img_ids.add(img_id)
# return img_ids

# def pil_loader(path):
# with open(path, 'rb') as f:
# with Image.open(f) as img:
# return img.convert('RGB')

def weights_init(m):
"""custom weights initialization."""
cname = m.__class__
if cname == nn.Linear or cname == nn.Conv2d or cname == nn.ConvTranspose2d:
m.weight.data.normal_(0.0, 0.02)
elif cname == nn.BatchNorm2d:
m.weight.data.normal_(1.0, 0.02)
m.bias.data.fill_(0)
else:
print('%s is not initialized.' % cname)

def init_net(net, net_file):


if net_file:
net.load_state_dict(torch.load(net_file))
else:
net.apply(weights_init)

def create_dir(path):
if not os.path.exists(path):
try:
os.makedirs(path)
except OSError as exc:
if exc.errno != errno.EEXIST:
raise

class Logger(object):
def __init__(self, output_name):
dirname = os.path.dirname(output_name)
if not os.path.exists(dirname):
os.mkdir(dirname)

self.log_file = open(output_name, 'w')


self.infos = {}

def append(self, key, val):


vals = self.infos.setdefault(key, [])
vals.append(val)

def log(self, extra_msg=''):


msgs = [extra_msg]
for key, vals in self.infos.iteritems():
msgs.append('%s %.6f' % (key, np.mean(vals)))
msg = '\n'.join(msgs)
self.log_file.write(msg + '\n')
self.log_file.flush()
self.infos = {}
return msg

def write(self, msg):


self.log_file.write(msg + '\n')
self.log_file.flush()
print(msg)

You might also like