【tensorflow】神经网络的一些基本概念(前向传播、反向传播、损失函数、梯度下降法、学习率)和设计过程


当今人工智能主流方向 —— 连接主义,即仿脑神经元连接,实现感性思维,如神经网络。

 

神经网络的一般设计过程:

  1. 准备数据:采集大量“特征/标签”数据
  2. 搭建网络:搭建神经网络结构
  3. 优化参数:训练网络获取最佳参数(反向传播)
  4. 应用网络:将网络保存为模型,输入新数据,输出分类或预测结果(前向传播)

 

前向传播
y = x * w + b,输入x,计算出y的过程叫做前向传播

 

损失函数:可预测值(y)与标准答案(y_)的差距,定量判断w、b的优劣。

当损失函数输出最小时,参数w、b会出现最优值。

均方误差是一种常用的损失函数。

 

梯度下降

目的:找到一组w、b,使得损失函数最小。

梯度:损失函数对各参数求偏导后的向量。损失函数梯度下降的方向,就是损失函数减小的方向。

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

 

学习率 lr:梯度下降的速度。

学习率过小,参数更新会很慢;

学习率过大,参数更新会跳过最小值。

 

反向传播

首先设置反向传播迭代次数,在每次迭代中,根据下图公式,迭代更新所有参数。

 

 

反向传播(使用梯度下降法,使损失函数最小)

代码示例:

import tensorflow as tf # w的初始值为5,设置为可训练
w = tf.Variable(tf.constant(5, dtype=tf.float32)) # 学习率为0.2
lr = 0.2
# 数据集喂入神经网络30次
epoch = 30

# 数据集级别的循环,每个epoch循环一次数据集
for epoch in range(epoch): # 使用with结构定义loss函数,gradient函数告知谁对谁求导
 with tf.GradientTape() as tape: # 损失函数定义为(w+1)^2
        loss = tf.square(w + 1) grads = tape.gradient(loss, w) # assign_sub函数:变量自减,即:w -= lr*grads
    w.assign_sub(lr * grads) print("After %s epoch,w is %f,loss is %f" % (epoch, w.numpy(), loss)) # 最终结果:损失函数最小值为 loss = 0.0,最优参数为 w = -1

 输出结果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM