Paul‐Pham‐Dev‐Diary‐2024‐04‐16 - TheEvergreenStateCollege/upper-division-cs-23-24 GitHub Wiki
2024-04-16
I was having difficulty getting my from scratch network.py
to increase its success rate
Baseline Python3 Neural Network
I tried loading another python3 version of the Mike Nielsen code here
https://github.com/MichalDanielDobrzanski/DeepLearningPython/tree/master
With a learning rate of 3.0, it started at 87% and increased to 94% over 30 epochs.
Epoch 0 : 8717 / 10000
Epoch 1 : 8983 / 10000
Epoch 2 : 9104 / 10000
Epoch 3 : 9155 / 10000
Epoch 4 : 9195 / 10000
Epoch 5 : 9229 / 10000
Epoch 6 : 9253 / 10000
Epoch 7 : 9297 / 10000
Epoch 8 : 9296 / 10000
Epoch 9 : 9306 / 10000
Epoch 10 : 9330 / 10000
Epoch 11 : 9338 / 10000
Epoch 12 : 9357 / 10000
Epoch 13 : 9354 / 10000
Epoch 14 : 9359 / 10000
Epoch 15 : 9368 / 10000
Epoch 16 : 9379 / 10000
Epoch 17 : 9389 / 10000
Epoch 18 : 9400 / 10000
Epoch 19 : 9401 / 10000
Epoch 20 : 9395 / 10000
Epoch 21 : 9384 / 10000
Epoch 22 : 9414 / 10000
Epoch 23 : 9405 / 10000
Epoch 24 : 9406 / 10000
Epoch 25 : 9405 / 10000
Epoch 26 : 9420 / 10000
Epoch 27 : 9420 / 10000
Epoch 28 : 9405 / 10000
Epoch 29 : 9420 / 10000
With a learning rate of 1.0, slightly worse
Epoch 0 : 8717 / 10000
Epoch 1 : 8983 / 10000
Epoch 2 : 9104 / 10000
Epoch 3 : 9155 / 10000
Epoch 4 : 9195 / 10000
Epoch 5 : 9229 / 10000
Epoch 6 : 9253 / 10000
Epoch 7 : 9297 / 10000
Epoch 8 : 9296 / 10000
Epoch 9 : 9306 / 10000
Epoch 10 : 9330 / 10000
Epoch 11 : 9338 / 10000
Epoch 12 : 9357 / 10000
Epoch 13 : 9354 / 10000
Epoch 14 : 9359 / 10000
Epoch 15 : 9368 / 10000
Epoch 16 : 9379 / 10000
Epoch 17 : 9389 / 10000
Epoch 18 : 9400 / 10000
Epoch 19 : 9401 / 10000
Epoch 20 : 9395 / 10000
Epoch 21 : 9384 / 10000
Epoch 22 : 9414 / 10000
Epoch 23 : 9405 / 10000
Epoch 24 : 9406 / 10000
Epoch 25 : 9405 / 10000
Epoch 26 : 9420 / 10000
Epoch 27 : 9420 / 10000
Epoch 28 : 9405 / 10000
Epoch 29 : 9420 / 10000
and a learning rate of 0.1
Epoch 0 : 5111 / 10000
Epoch 1 : 6816 / 10000
Epoch 2 : 7814 / 10000
Epoch 3 : 8172 / 10000
Epoch 4 : 8390 / 10000
Epoch 5 : 8545 / 10000
Epoch 6 : 8630 / 10000
Epoch 7 : 8695 / 10000
Epoch 8 : 8774 / 10000
Epoch 9 : 8838 / 10000
Epoch 10 : 8871 / 10000
Epoch 11 : 8910 / 10000
Epoch 12 : 8942 / 10000
Epoch 13 : 8966 / 10000
Epoch 14 : 9001 / 10000
Epoch 15 : 9026 / 10000
Epoch 16 : 9048 / 10000
Epoch 17 : 9075 / 10000
Epoch 18 : 9082 / 10000
Epoch 19 : 9108 / 10000
Epoch 20 : 9122 / 10000
Epoch 21 : 9139 / 10000
Epoch 22 : 9148 / 10000
Epoch 23 : 9162 / 10000
Epoch 24 : 9172 / 10000
Epoch 25 : 9174 / 10000
Epoch 26 : 9183 / 10000
Epoch 27 : 9188 / 10000
Epoch 28 : 9207 / 10000
Epoch 29 : 9213 / 10000
Test Label Format
After getting pretty dismal results with my own typed from-scratch network.py
,
I examined MichalDanielDobrzanski's mnist_loader.py
and discovered
that the training labels are in vectorized (one-hot) format, a 10-vector with only one element as 1.0 and the others as 0.0.
The test labels are a single scalar, presumably just an 8-bit unsigned number. Argh! Why the inconsistency.
After making this change:
def one_hot_vector_from_label(label):
e = np.zeros((10, 1))
e[label] = 1.0
return e
def load_labels(filename=""):
f = open(filename, "rb")
data = f.read()
size = bytes_to_num(data[6:8])
print(f"{data[4:8]}")
print(f"Number of labels {size} from {filename}")
return np.array(list(data[8:]))
# Return ndarray of shape [10000, 10]
def load_all_training_labels():
labels = load_labels("train-labels-idx1-ubyte")
return np.array([one_hot_vector_from_label(l) for l in labels])
# Return ndarray of shape [10000, 10]
def load_all_test_labels():
return load_labels("t10k-labels-idx1-ubyte")
With a learning rate of 0.1 it was significantly improved from before, but even after 50 epochs.
Epoch 0 : 2583 / 10000
Epoch 1 : 3316 / 10000
Epoch 2 : 3549 / 10000
Epoch 3 : 3623 / 10000
Epoch 4 : 4274 / 10000
Epoch 5 : 5069 / 10000
Epoch 6 : 5152 / 10000
Epoch 7 : 5246 / 10000
Epoch 8 : 5310 / 10000
Epoch 9 : 5384 / 10000
Epoch 10 : 5801 / 10000
Epoch 11 : 6233 / 10000
Epoch 12 : 6662 / 10000
Epoch 13 : 7422 / 10000
Epoch 14 : 7581 / 10000
Epoch 15 : 7689 / 10000
Epoch 16 : 7781 / 10000
Epoch 17 : 7818 / 10000
Epoch 18 : 7757 / 10000
Epoch 19 : 7783 / 10000
Epoch 20 : 7836 / 10000
Epoch 21 : 7791 / 10000
Epoch 22 : 7971 / 10000
Epoch 23 : 7992 / 10000
Epoch 24 : 7975 / 10000
Epoch 25 : 8000 / 10000
Epoch 26 : 8026 / 10000
Epoch 27 : 8052 / 10000
Epoch 28 : 8046 / 10000
Epoch 29 : 8075 / 10000
Epoch 30 : 8099 / 10000
Epoch 31 : 8145 / 10000
Epoch 32 : 8167 / 10000
Epoch 33 : 8158 / 10000
Epoch 34 : 8124 / 10000
Epoch 35 : 8126 / 10000
Epoch 36 : 8122 / 10000
Epoch 37 : 8167 / 10000
Epoch 38 : 8118 / 10000
Epoch 39 : 8152 / 10000
Epoch 40 : 8170 / 10000
Epoch 41 : 8200 / 10000
Epoch 42 : 8208 / 10000
Epoch 43 : 8205 / 10000
Epoch 44 : 8207 / 10000
Epoch 45 : 8236 / 10000
Epoch 46 : 8215 / 10000
Epoch 47 : 8234 / 10000
Epoch 48 : 8234 / 10000
At learning rate of 3.0, the results are much more miserable
Epoch 0 : 2635 / 10000
Epoch 1 : 2047 / 10000
Epoch 2 : 1799 / 10000
Epoch 3 : 1897 / 10000
Epoch 4 : 2043 / 10000
Epoch 5 : 1795 / 10000
Epoch 6 : 1270 / 10000
Epoch 7 : 2017 / 10000
Epoch 8 : 2045 / 10000
Epoch 9 : 1302 / 10000
Epoch 10 : 1258 / 10000
Epoch 11 : 1520 / 10000
Epoch 12 : 1507 / 10000
Epoch 13 : 1659 / 10000
Epoch 14 : 1484 / 10000
Epoch 15 : 1501 / 10000
Epoch 16 : 1616 / 10000
Epoch 17 : 1727 / 10000
Epoch 18 : 1727 / 10000
Epoch 19 : 1736 / 10000
Epoch 20 : 1286 / 10000
Epoch 21 : 1500 / 10000
Epoch 22 : 1483 / 10000
Epoch 23 : 1819 / 10000
Epoch 24 : 1504 / 10000
Epoch 25 : 1823 / 10000
Epoch 26 : 1438 / 10000
Learning rate 0.5
Epoch 0 : 4135 / 10000 [27/1145]
Epoch 1 : 4228 / 10000
Epoch 2 : 3900 / 10000
Epoch 3 : 4419 / 10000
Epoch 4 : 4710 / 10000
Epoch 5 : 5333 / 10000
Epoch 6 : 5579 / 10000
Epoch 7 : 5653 / 10000
Epoch 8 : 5333 / 10000
Epoch 9 : 5346 / 10000
Epoch 10 : 5561 / 10000
Epoch 11 : 5666 / 10000
Epoch 12 : 3828 / 10000
Epoch 13 : 3995 / 10000
Epoch 14 : 4883 / 10000
Epoch 15 : 5031 / 10000
Epoch 16 : 4047 / 10000
Epoch 17 : 5175 / 10000
Epoch 18 : 5194 / 10000
Epoch 19 : 5349 / 10000
Epoch 20 : 5382 / 10000
Epoch 21 : 5287 / 10000
Epoch 22 : 5313 / 10000
Epoch 23 : 5218 / 10000
Epoch 24 : 5128 / 10000
Epoch 25 : 5290 / 10000
Epoch 26 : 5194 / 10000
Epoch 27 : 5207 / 10000
Epoch 28 : 4841 / 10000
Epoch 29 : 4597 / 10000
Epoch 30 : 4768 / 10000
Epoch 31 : 4488 / 10000
Epoch 32 : 4320 / 10000
Epoch 33 : 4543 / 10000
Epoch 34 : 4439 / 10000
Epoch 35 : 4488 / 10000
Epoch 36 : 4894 / 10000
Epoch 37 : 4793 / 10000
Epoch 38 : 5188 / 10000
Epoch 39 : 4880 / 10000
Epoch 40 : 5144 / 10000
Epoch 41 : 5540 / 10000
Epoch 42 : 5737 / 10000
Epoch 43 : 5626 / 10000
Epoch 44 : 5673 / 10000
Epoch 45 : 5658 / 10000
Epoch 46 : 4629 / 10000
Epoch 47 : 5041 / 10000
Epoch 48 : 4897 / 10000
Learning rate of 0.2