pycharm软件
电脑
先加载训练数据,测试数据, training_data, validation_data, test_data = mnist_loader.load_data_wrapper()值得注意的是,在加载数据的时候,数据包的文件路径要填写正确 f = gzip.open('D:\PY\mnist.pkl.gz', 'rb') (训练模式)构建一个输出层为 785个神经元, 隐藏层为 40个神经元, 输出层为10个神经元,的神经网络,迭代30次。net = test.Network([784,40, 10],cost=test.CrossEntropyCost) #CrossEntropyCosts 交叉熵函数,QuadraticCost是二次代价函数
因为现在是训练模式,所以weights变量是空,程序直接跳转到迭代阶段,开始权重和偏置更新。mini_batches = [ training_data[k:k+mini_batch_size] for k in range(0, n, mini_batch_size)]一开始就是按照 10个数据的跨度选取训练数据,进行训练。for mini_batch in mini_batches: self.update_mini_batch( mini_batch, eta, lmbda, len(training_data))然后就是进入权重和偏置更新。
self.weights = [(1-eta*(lmbda/n))*w-(eta/len(mini_batch))*nw这就是权重更新的核心语句,使用用规范化,放置网络过拟合化 self.biases = [b-(eta/len(mini_batch))*nb偏置更新核心语句 delta_nabla_b, delta_nabla_w = self.backprop(x, y)这句话是返回权重和偏置的偏导数
accuracy = self.accuracy(evaluation_data)开始计算精度 results = [(np.argmax(self.feedforward(x)), y)计算结果 a = sigmoid(np.dot(w, a)+b)数据输入S型函数,输出结果
迭代完成后,net.save( 'D:/data_/data.txt') 自己在建立data.txt文件储存训练好滴数据,键入文件路径就可以。调用储存函数,存储最后的训练结果,,主要是储存 每层的偏置和权重
weights,biases=test.load( 'D:/data_/data.txt')启用这句话,个人改进了原来的程序,使其只存储权重和偏置,只读出权重和偏置。值得注意的是下面这句话中的weights和biases不在是None ,而是读取函数的返回值weights和 biasesnet.SGD(training_data, 1, 10, 0.1 ,lmbda = 5.0,weights=weights,biases=biases,evaluation_data=validation_data, monitor_evaluation_accuracy=True)