多语言展示
当前在线:1470今日阅读:26今日分享:39

用python实现一个简单的神经网络(附源代码哟)

简单介绍一哈,用python实现一个简单的3层神经网络。下面的链接的源代码和代码运行需要的数据包,另加一本神经网络的书,PDF版。接下来我会按着程序运行的顺序简单介绍一哈。干货在下面哟
工具/原料
1

pycharm软件

2

电脑

步骤 1 :初始化神经网络

先加载训练数据,测试数据, 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是二次代价函数

步骤2 初始化权值和偏置
步骤3

因为现在是训练模式,所以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))然后就是进入权重和偏置更新。

步骤4 权重和偏置更新函数

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)这句话是返回权重和偏置的偏导数

步骤5 每次迭代输出当前网路的训练情况

accuracy = self.accuracy(evaluation_data)开始计算精度 results = [(np.argmax(self.feedforward(x)), y)计算结果 a = sigmoid(np.dot(w, a)+b)数据输入S型函数,输出结果

步骤6 训练完成

迭代完成后,net.save( 'D:/data_/data.txt') 自己在建立data.txt文件储存训练好滴数据,键入文件路径就可以。调用储存函数,存储最后的训练结果,,主要是储存 每层的偏置和权重

步骤7 调出训练数据,形成自己的网路

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)

推荐信息