-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
104 lines (77 loc) · 3.52 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import tensorflow as tf
import numpy as np
from DatasetReader import read_hoda_dataset
from scipy.ndimage.interpolation import rotate
flags = tf.app.flags
FLAGS = flags.FLAGS
def rotate_transform(images, min_deg, max_deg):
num_images = images.shape[0]
# rotate all input images by some degree in range of [min-deg, max-deg]
# clockwise or counterclockwise which is set randomly
rotated_images = [rotate(images[i, :, :, :], np.random.randint(min_deg, max_deg + 1) *
(np.random.randint(0, 2) * 2 - 1),
reshape=False) for i in range(num_images)]
rotated_images = np.stack(rotated_images, axis=0)
return rotated_images
def load_data():
# Set seed
seed = 123
np.random.seed(seed)
# Loading dataset
print("Loading the whole dataset...")
x_train, y_train = read_hoda_dataset(dataset_path='./DigitDB/Train 60000.cdb',
images_height=32,
images_width=32,
one_hot=False,
reshape=False)
x_test, y_test = read_hoda_dataset(dataset_path='./DigitDB/Test 20000.cdb',
images_height=32,
images_width=32,
one_hot=False,
reshape=False)
# concat to a whole dataset
x, y = np.concatenate([x_train, x_test]), np.concatenate([y_train, y_test])
# shuffle images
idx = np.arange(x.shape[0])
np.random.shuffle(idx)
# set train and test size
train_size = int(0.8 * x.shape[0])
# selecting indices of train, test set
train_idx = idx[:train_size]
test_idx = idx[train_size:]
x_train = x[train_idx]
y_train = y[train_idx]
x_test = x[test_idx]
y_test = y[test_idx]
x_train_rotated = rotate_transform(x_train, 30, 45)
x_test_rotated = rotate_transform(x_test, 30, 45)
x_train_rotated[x_train_rotated >= 0.5] = 1.
x_train_rotated[x_train_rotated < 0.5] = 0.
x_test_rotated[x_test_rotated >= 0.5] = 1.
x_test_rotated[x_test_rotated < 0.5] = 0.
return x_train, x_train_rotated, y_train, x_test, x_test_rotated, y_test
def normal_initializer(shape, name=None):
#####################################################
# TODO: Implement the normal initializer #
# Set mean to zero and standard deviation to 0.01 #
# Use tf.truncated_normal to define initial value #
# Feed the initial value to a tf.Variable #
# Return the defined tf.Variable #
#####################################################
initial = tf.truncated_normal(shape, stddev=0.01)
return tf.Variable(initial, name=name)
#####################################################
# END OF YOUR CODE #
#####################################################
def zero_initializer(shape, name=None):
###########################################
# TODO: Implement the zero initializer #
# Use tf.zeros to define initial value #
# Feed the initial value to a tf.Variable #
# Return the defined tf.Variable #
###########################################
initial = tf.zeros(shape, dtype=tf.float32)
return tf.Variable(initial, name=name)
###########################################
# END OF YOUR CODE #
###########################################