-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmnist_train.py
More file actions
55 lines (45 loc) · 1.71 KB
/
mnist_train.py
File metadata and controls
55 lines (45 loc) · 1.71 KB
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
from PIL import Image
import numpy
import random
from neural_network import NeuralNetwork, leaky_relu, softmax, sigmoid, relu
import utils
def load_mnist_training_data(autoencoding=False):
training_data = []
for label in range(10):
files = utils.load_mnist_training_files(label)
outputs = numpy.zeros((10, 1))
outputs[label, 0] = 1.0
for file in files:
image = Image.open(file)
inputs = numpy.array(image).reshape((784, 1)) / 255
if autoencoding:
training_data.append((inputs, inputs))
else:
training_data.append((inputs, outputs))
random.shuffle(training_data)
return training_data
if __name__ == "__main__":
n_iterations = 100_000
sample_size = 32
structure = [784, 64, 32, 16, 16, 16, 10]
learning_rate = 0.02
hidden_activation_func = leaky_relu
output_activation_func = softmax
save_every_1k = False
autoencoding = False
print("Loading training data …")
training_data = load_mnist_training_data(autoencoding=autoencoding)
nn = NeuralNetwork(
structure=structure,
eta=learning_rate,
hidden_activation_func=hidden_activation_func,
output_activation_func=output_activation_func,
n_iterations=n_iterations,
batch_size=sample_size,
save_every_1k=save_every_1k
)
print("Training network …")
nn.train(training_data)
folder = "autoencoder_models" if autoencoding else "classification_models"
nn.save_to_file(f"{folder}/mnist_weights_i{n_iterations}_s{sample_size}_{utils.get_layer_descriptor(nn.structure[1:-1])}.npz")
nn.plot()