2026/2/19 15:20:49
网站建设
项目流程
电销网站建设,用织梦模板做网站,c2c代表网站有哪些,wordpress新增标题目录
摘要
反向传播代码实现 摘要
本篇文章继续学习尚硅谷深度学习教程#xff0c;学习内容是反向传播代码实现 反向传播代码实现
在之前手写数字识别案例的基础上#xff0c;对SGD的计算过程进行优化。核心就是使用误差的反向传播法来计算梯度#xff0c;而不是使用差分…目录摘要反向传播代码实现摘要本篇文章继续学习尚硅谷深度学习教程学习内容是反向传播代码实现反向传播代码实现在之前手写数字识别案例的基础上对SGD的计算过程进行优化。核心就是使用误差的反向传播法来计算梯度而不是使用差分数值计算这将大大提升学习的效率。对于二层网络TwoLayerNet隐藏层由一个Affine层和一个ReLU层组成输出层则由一个Affine层和一个Softmax-with-Loss层组成。由于之前已经实现了各层的类现在只要用“搭积木”的方式将它们拼接在一起就可以了。将TwoLayerNet类的代码实现改进如下import numpy as np from common.layers import * from common.gradient import numerical_gradient from collections import OrderedDict class TwoLayerNet: def __init__(self, input_size, hidden_size, output_size, weight_init_std 0.01): # 初始化权重 self.params {} self.params[W1] weight_init_std * np.random.randn(input_size, hidden_size) self.params[b1] np.zeros(hidden_size) self.params[W2] weight_init_std * np.random.randn(hidden_size, output_size) self.params[b2] np.zeros(output_size) # 生成层 self.layers OrderedDict() self.layers[Affine1] Affine(self.params[W1], self.params[b1]) self.layers[Relu1] Relu() self.layers[Affine2] Affine(self.params[W2], self.params[b2]) self.lastLayer SoftmaxWithLoss() def predict(self, x): for layer in self.layers.values(): x layer.forward(x) return x # x:输入数据, t:监督数据 def loss(self, x, t): y self.predict(x) return self.lastLayer.forward(y, t) def accuracy(self, x, t): y self.predict(x) y np.argmax(y, axis1) if t.ndim ! 1 : t np.argmax(t, axis1) accuracy np.sum(y t) / float(x.shape[0]) return accuracy # x:输入数据, t:监督数据 def numerical_gradient(self, x, t): loss_W lambda W: self.loss(x, t) grads {} grads[W1] numerical_gradient(loss_W, self.params[W1]) grads[b1] numerical_gradient(loss_W, self.params[b1]) grads[W2] numerical_gradient(loss_W, self.params[W2]) grads[b2] numerical_gradient(loss_W, self.params[b2]) return grads def gradient(self, x, t): # forward self.loss(x, t) # backward dout 1 dout self.lastLayer.backward(dout) layers list(self.layers.values()) layers.reverse() for layer in layers: dout layer.backward(dout) # 设定 grads {} grads[W1], grads[b1] self.layers[Affine1].dW, self.layers[Affine1].db grads[W2], grads[b2] self.layers[Affine2].dW, self.layers[Affine2].db return grads