2 卷积神经网络反向传播_神经网络之反向传播训练(8行代码)

神经网络之反向传播训练(8行代码)

多少行代码可以实现神经网络,并且了解反向传播算法。

import numpy as npX = np.array([[0,0,1], [0,1,1], [1,0,1], [1,1,1]])y = np.array([[0, 0, 1, 1]]).Tsyn = 2 * np.random.random((3, 1)) - 1for i in range(10000): l = 1 / (1 + np.exp(-np.dot(X, syn))) l_delta = (y - l) * (l * (1 - l)) syn += np.dot(X.T, l_delta)复制代码

如上,通过给定的输入的输出进行训练,最后根据给定输入预测输出。

x1x2x3y0010111110110110

训练数据如上。


下面对代码进行解释:

X:表示输出数据

y: 表述输出数据

syn: 3 * 1维的初始化随机权重

网络结构如下所示:

4b0b6d6c7b2056f03d9e110aef3f3b68.png

如上,上部分为网络结构, 下部分为后面的辅助链式求导过程。

其过程大概为:

输入数据x乘以对应的权重w,得到的值z经过非线性函数转换(sigmoid)得到预测值l。

计算l的目标值y的误差。训练的目标为将误差最小化,因此可以通过调节输入x和权重w。因为x为输入数据,不可以调节。因此目标为:通过不断的调节权重w,使其得到的预测值与目标的值的误差最小(或者小于某个阈值),完成训练。可以使用权重w对新的输入进行预测。

其迭代过程为最后3行代码,稍作解释:

第6行:输入x乘以权重w,经过sigmoid函数变化得到l。 第7行:将误差最小化的过程就是不断调节w的过程。根据链式法则求loss关于w的导数,找到损失函数最快降低的方法。如上图片所示:

loss关于w的导数 = loss关于l的导数 * l 关于z 的导数 * z 关于w的导数, 也即是最后两行的内容。


下面我将扩展一下代码, 以便更好的理解:

import numpy as npdef sigmoid(z): return 1 / (1 + np.exp(-z))def sigmoid_derivative(x): return x * (1 - x)X = np.array([[0,0,1], [0,1,1], [1,0,1], [1,1,1]])y = np.array([[0, 0, 1, 1]]).Tsyn = 2 * np.random.random((3, 1)) - 1for i in range(10000): l = sigmoid(np.dot(X, syn)) loss = (y - l) ** 2 if i % 1000 == 0: print("Loss: 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值