diff --git a/src/mnist_loader.py b/src/mnist_loader.py index d17498c..a06422c 100644 --- a/src/mnist_loader.py +++ b/src/mnist_loader.py @@ -10,7 +10,7 @@ function usually called by our neural network code. #### Libraries # Standard library -import cPickle +import pickle import gzip # Third-party libraries @@ -40,7 +40,9 @@ def load_data(): below. """ f = gzip.open('../data/mnist.pkl.gz', 'rb') - training_data, validation_data, test_data = cPickle.load(f) + t = pickle._Unpickler(f) + t.encoding = 'latin1' + training_data, validation_data, test_data = t.load() f.close() return (training_data, validation_data, test_data) @@ -68,11 +70,11 @@ def load_data_wrapper(): tr_d, va_d, te_d = load_data() training_inputs = [np.reshape(x, (784, 1)) for x in tr_d[0]] training_results = [vectorized_result(y) for y in tr_d[1]] - training_data = zip(training_inputs, training_results) + training_data = list(zip(training_inputs, training_results)) validation_inputs = [np.reshape(x, (784, 1)) for x in va_d[0]] - validation_data = zip(validation_inputs, va_d[1]) + validation_data = list(zip(validation_inputs, va_d[1])) test_inputs = [np.reshape(x, (784, 1)) for x in te_d[0]] - test_data = zip(test_inputs, te_d[1]) + test_data = list(zip(test_inputs, te_d[1])) return (training_data, validation_data, test_data) def vectorized_result(j): diff --git a/src/network.py b/src/network.py index f66c362..d37f685 100644 --- a/src/network.py +++ b/src/network.py @@ -53,18 +53,18 @@ class Network(object): tracking progress, but slows things down substantially.""" if test_data: n_test = len(test_data) n = len(training_data) - for j in xrange(epochs): + for j in range(epochs): random.shuffle(training_data) mini_batches = [ training_data[k:k+mini_batch_size] - for k in xrange(0, n, 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 {0}: {1} / {2}".format( - j, self.evaluate(test_data), n_test) + print("Epoch {0}: {1} / {2}".format( + j, self.evaluate(test_data), n_test)) else: - print "Epoch {0} complete".format(j) + print("Epoch {0} complete".format(j)) def update_mini_batch(self, mini_batch, eta): """Update the network's weights and biases by applying @@ -109,7 +109,7 @@ class Network(object): # second-last layer, and so on. It's a renumbering of the # scheme in the book, used here to take advantage of the fact # that Python can use negative indices in lists. - for l in xrange(2, self.num_layers): + for l in range(2, self.num_layers): z = zs[-l] sp = sigmoid_prime(z) delta = np.dot(self.weights[-l+1].transpose(), delta) * sp