python和numpy纯手写3层神经网络,干货满满

本文介绍了如何使用Python和Numpy从零开始构建一个3层神经网络,包括网络结构、偏导数、梯度下降法的具体计算过程。作者强调实践的重要性,并分享了手动实现神经网络遇到的挑战。文章还提供了上一篇关于2层神经网络的阅读建议和GitHub上的项目资源。

python和numpy纯手写3层神经网络,干货满满

前言

在上一篇转载的文章中,我们已经使用numpy手写了两层神经网络,尽管这篇文章只是增添了一层,但是,还是在实践中给我造成了不少的困难,主要的困难点在于感觉自己理解了BP反向传播,但是真正动手写的时候,还是迷迷糊糊的。所以,这里也给大家提个醒,不要眼高手低,尽量去实践自己学的东西。

在看这篇文章时,建议大家先把上一篇手写2层神经网络的文章看一下:

(转载)百度架构师带你使用numpy手动构建神经网络

网络结构

网络图形

共有三层神经网络结构

  • 第一层 输入层,有13个神经元,所需参数是13*13+13=182个
  • 第二层 隐藏层,有13个神经元,所需参数是13+1=14个
  • 第三层 输出层,有1个神经元 即为输出结果

知识讲解

偏导数

偏导数这个概念咱们在本科的教程中已经学过了,就是这个函数沿该坐标轴正方向的变化率。这个有什么用呢,我们先来看个图:

img

从图中,我们可以很容易的去找到该图像的最低点,也就是图中大概T点的位置。但是,假如你不知道呢,如何去慢慢的找到这个最低点呢?咱们先来看P0点的切线斜率,也等于该点的导数值,设为α。因为这个切线与x轴的角度小于90°,所以p0点的倒数值大于0.我们有了这个讯息,相当于知道了方向,于是就有了这个公式:x = x-axα a 为步长。由于α>0,所以x的值在慢慢减小,逐渐靠近T。当x在T点时,该点的切线为水平线,即导数为0,所以此时x=x-ax0,x值不再变化,此时x为该函数的最小值的取值点。

上面说的都是x,y二维坐标系,扩展为多维坐标系时,导数的概念就变成了偏导数,但是原理都是一样的,朝着最低点的方向前进。然后上述过程在多维时就变成了梯度下降法

梯度下降法

这里我们举一个上篇文章中的例子。一个想从山峰走向山底的盲人,他看不见坡谷在哪(无法逆向求解出$Loss&导数为0时的参数值),但可以伸脚探索身边的坡度(当前点的导数值,也称为梯度)。那么

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值