I'm attempting to follow the example on
http://neuralnetworksanddeeplearning.com/chap1.html
near the bottom of the page. The code was written fro python 2.7 and I'm using 3.5. While attempting to run the code I get following error message
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lukasz/Documents/Machine Learning/network.py", line 65, in SGD
random.shuffle(training_data)
File "/home/lukasz/anaconda3/lib/python3.5/random.py", line 269, in shuffle
for i in reversed(range(1, len(x))):
TypeError: object of type 'zip' has no len()
the code for the SGD
function is
def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
if test_data:
n_test = sum(1 for _ in test_data)
n = sum(1 for _ in training_data)
for j in range(epochs):
random.shuffle(training_data)
mini_batches = [training_data[k:k+mini_batch_size]
for k in range(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
if test_data:
print("Epoch %s: %s / %s"
%(j, self.evaluate(test_data), n_test))
else:
print("Epoch %s complete" %(j))
which is run after import the mnist data and executing:
net = network.Network([784, 30, 10])
net.SGD(training_data, 30, 10, 3.0, test_data=test_data)
I've attempted to create an index and shuffle that, but I had no luck getting a proper output. My code for this particular section looks like:
def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
if test_data:
n_test = sum(1 for _ in test_data)
n = sum(1 for _ in training_data)
for j in range(epochs):
indices = np.arange(n) #### This Is Modified
random.shuffle(indices) #### This Is Modified
mini_batches = [training_data[k:k+mini_batch_size]
for k in range(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
if test_data:
print("Epoch %s: %s / %s"
%(j, self.evaluate(test_data), n_test))
else:
print("Epoch %s complete" %(j))
which produces:
Epoch 0: 0 / 0
Epoch 1: 0 / 0
Epoch 2: 0 / 0
Epoch 3: 0 / 0
Epoch 4: 0 / 0
Epoch 5: 0 / 0
Epoch 6: 0 / 0
Epoch 7: 0 / 0
Epoch 8: 0 / 0
Epoch 9: 0 / 0
Epoch 10: 0 / 0
...
/////////////////////////////////////////////////////////////////////
A solution for this example was posted by @Nicolas Turgeon and can be found here: