【神经网络】2. 神经网络设计过程

应用神经网络的基本过程

神经网络搭建和使用基本过程如下:

准备数据:采集大量“特征/标签”数据(使用神经网络之前需要准备的数据)
搭建网络:搭建神经网络结构
优化参数:训练网络获取最佳参数(反转)
应用网络:将网络保存为模型,输入新数据,输出分类或预测结果(前传)(神经网络已经搭建好了,可以应用了)

其中,对于神经网络的设计过程最关键的就是搭建网络优化参数,后续对神经网络的设计过程将以这两步骤为主。


神经网络设计过程

鸢尾花的分类过程:

将特征 [花萼长、花萼宽、花瓣长、花瓣宽] 输入神经网络,输出每个种类的可能性大小(分类的百分比)

其中神经网络里的每个小球,就是神经元

1943年,英国心里学家麦卡洛克和数据加皮茨,给出了神经元的计算模型(MP模型)

去掉非线性函数,简化的MP模型如下:

因此,y=x*w+b,就是神经网络的传播形式,其中

x为输入:[花萼长、花萼宽、花瓣长、花瓣宽] 1x4的数据
y为输出:[狗尾草鸢尾、杂色鸢尾、佛吉尼亚鸢尾] 1x3的数据
w为权重:4x3的数据
b为偏置项

(1)搭建网络

首先:初始化随机生成w与b
w:

-0.8-0.34-1.4
0.61.30.25
0.51.450.9
0.650.7-1.2

b:

2.52-3.15.62

(2)优化参数

目前基本上已经搭建好了神经网络,后续开始通过“特征/标签”的数据开始训练网络

输入一组数据:
特征:[花萼长、花萼宽、花瓣长、花瓣宽]=[5.8,4.0,1.2,0.2],即x=[5.8,4.0,1.2,0.2]
标签:0 狗尾草鸢尾

将特征输入到建好的神经网络里,按照传播形式y=x*w+b,通过计算得到:y=[1.01,2.01,-0.66]

这个过程称为前向传播

从输出结果里y=[1.01,2.01,-0.66]来看,最大可能性是1 杂色鸢尾 而不是标签0 狗尾草鸢尾
原因就是最初的参数W和b是随机生成的,也就是说目前的结果是蒙的

损失函数(loss function):预测值(y)与标准答案(y_)的差距

损失函数可以定量判断W和b的优势,当损失函数输出最小时,参数W、b会出现最优值
常用的损失函数,均方误差:

目的:找到一组参数W和b,使得随时函数最小
梯度:函数对个参数求偏导后的向量

函数梯度下降方向就是函数减小的方向

梯度下降法(Gradient descent):沿损失函数梯度下降的方向,寻找损失函数的最小值,得到最优参数的方法

学习率(learning rate,lr):当学习率设置的过小时,收敛过程将变得十分缓慢,而当学习率设置过大时,梯度可能会在最小值附近来回震荡,甚至无法收敛。

反向传播:从前向后,逐层求损失函数对每层神经元参数的偏导数,迭代更新左右参数

eg:损失函数 loss=(w+1)^{2},  \frac{\partial loss}{\partial w}=2w+2

参数w随机初始化为5,学习率(超参数)为0.2,则
1次  w=5                5-0.2*(2*5+2)=2.6
2次  w=2.6             2.6-0.2*(2*2.6+2)=1.16
3次  w=1.16           1.16-0.2*(2*1.16+2)=0.296
4次  w=0.296
......

依次进行反向传播,可以找到当w=-1时,损失函数最小,则w=-1就是参数最优值

(3)案例

在pycharm里输入如下代码(其中tensorflow版本为2.0以上)

初始设定w为0.5,学习率lr为0.2,迭代次数epoch为40,最后打印出损失函数的结果

import tensorflow as tf

w = tf.Variable(tf.constant(5, dtype=tf.float32))
lr = 0.2
epoch = 40

for epoch in range(epoch):  # for epoch 定义顶层循环,表示对数据集循环epoch次,此例数据集数据仅有1个w,初始化时候constant赋值为5,循环100次迭代。
    with tf.GradientTape() as tape:  # with结构到grads框起了梯度的计算过程。
        loss = tf.square(w + 1)
    grads = tape.gradient(loss, w)  # .gradient函数告知谁对谁求导

    w.assign_sub(lr * grads)  # .assign_sub 对变量做自减 即:w -= lr*grads 即 w = w - lr*grads
    print("After %s epoch,w is %f,loss is %f" % (epoch, w.numpy(), loss))

# lr初始值:0.2   请自改学习率  0.001  0.999 看收敛过程
# 最终目的:找到 loss 最小 即 w = -1 的最优参数w

从20次左右可以看出w基本上接近-1,损失函数基本上为0

After 0 epoch,w is 2.600000,loss is 36.000000
After 1 epoch,w is 1.160000,loss is 12.959999
After 2 epoch,w is 0.296000,loss is 4.665599
After 3 epoch,w is -0.222400,loss is 1.679616
After 4 epoch,w is -0.533440,loss is 0.604662
After 5 epoch,w is -0.720064,loss is 0.217678
After 6 epoch,w is -0.832038,loss is 0.078364
After 7 epoch,w is -0.899223,loss is 0.028211
After 8 epoch,w is -0.939534,loss is 0.010156
After 9 epoch,w is -0.963720,loss is 0.003656
After 10 epoch,w is -0.978232,loss is 0.001316
After 11 epoch,w is -0.986939,loss is 0.000474
After 12 epoch,w is -0.992164,loss is 0.000171
After 13 epoch,w is -0.995298,loss is 0.000061
After 14 epoch,w is -0.997179,loss is 0.000022
After 15 epoch,w is -0.998307,loss is 0.000008
After 16 epoch,w is -0.998984,loss is 0.000003
After 17 epoch,w is -0.999391,loss is 0.000001
After 18 epoch,w is -0.999634,loss is 0.000000
After 19 epoch,w is -0.999781,loss is 0.000000
After 20 epoch,w is -0.999868,loss is 0.000000
After 21 epoch,w is -0.999921,loss is 0.000000
After 22 epoch,w is -0.999953,loss is 0.000000
After 23 epoch,w is -0.999972,loss is 0.000000
After 24 epoch,w is -0.999983,loss is 0.000000
After 25 epoch,w is -0.999990,loss is 0.000000
After 26 epoch,w is -0.999994,loss is 0.000000
After 27 epoch,w is -0.999996,loss is 0.000000
After 28 epoch,w is -0.999998,loss is 0.000000
After 29 epoch,w is -0.999999,loss is 0.000000
After 30 epoch,w is -0.999999,loss is 0.000000
After 31 epoch,w is -1.000000,loss is 0.000000
After 32 epoch,w is -1.000000,loss is 0.000000
After 33 epoch,w is -1.000000,loss is 0.000000
After 34 epoch,w is -1.000000,loss is 0.000000
After 35 epoch,w is -1.000000,loss is 0.000000
After 36 epoch,w is -1.000000,loss is 0.000000
After 37 epoch,w is -1.000000,loss is 0.000000
After 38 epoch,w is -1.000000,loss is 0.000000
After 39 epoch,w is -1.000000,loss is 0.000000

学习来源:人工智能实践:Tensorflow笔记

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝色蛋黄包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值