注:本系列文章主要是复现北京大学TensorFlow笔记中的代码,方便以后使用,并没有详细讲解流程,因为我并不是专门做教程的。何况北大的教程讲的已经很好了,有需要了解详细过程的可以去看北大的教程哈。

一、反向传播
√反向传播:训练模型参数,在所有参数上用梯度下降,使 NN 模型在训练数据上的损失函数最小。
√损失函数(loss): 计算得到的预测值 y 与已知答案 y_的差距。
损失函数的计算有很多方法,均方误差 MSE 是比较常用的方法之一。
√均方误差 MSE: 求前向传播计算结果与已知答案之差的平方再求平均。

用 tensorflow 函数表示为:

loss_mse = tf.reduce_mean(tf.square(y_ - y))

√反向传播训练方法: 以减小 loss 值为优化目标,有梯度下降、 momentum 优化
器、 adam 优化器等优化方法。
这三种优化方法用 tensorflow 的函数可以表示为:

train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
train_step=tf.train.MomentumOptimizer(learning_rate, momentum).minimize(loss)
train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)

三种优化方法区别如下:
①tf.train.GradientDescentOptimizer()使用随机梯度下降算法,使参数沿着
梯度的反方向,即总损失减小的方向移动,实现更新参数。
②tf.train.MomentumOptimizer()在更新参数时,利用了超参数
③tf.train.AdamOptimizer()是利用自适应学习率的优化算法, Adam 算法和随
机梯度下降算法不同。随机梯度下降算法保持单一的学习率更新所有的参数,学
习率在训练过程中并不会改变。而 Adam 算法通过计算梯度的一阶矩估计和二
阶矩估计而为不同的参数设计独立的自适应性学习率。

√学习率: 决定每次参数更新的幅度。
优化器中都需要一个叫做学习率的参数, 使用时, 如果学习率选择过大会出现震
荡不收敛的情况,如果学习率选择过小, 会出现收敛速度慢的情况。 我们可以选
个比较小的值填入, 比如 0.01、 0.001。

二、 搭建神经网络的八股
我们最后梳理出神经网络搭建的八股, 神经网络的搭建课分四步完成:准备工作、
前向传播、反向传播和循环迭代。
√0.导入模块,生成模拟数据集;

import
常量定义
生成数据集

√1.前向传播:定义输入、参数和输出

x= y_=
w1= w2=
a= y=

√2. 反向传播:定义损失函数、反向传播方法

loss=
train_step=

√3. 生成会话,训练 STEPS 轮

with tf.session() as sess
Init_op=tf. global_variables_initializer()
sess_run(init_op)
STEPS=3000
for i in range(STEPS):
start=
end=
sess.run(train_step, feed_dict:)

举例
随机产生 32 组生产出的零件的体积和重量,训练 3000 轮,每 500 轮输出一次损
失函数。下面我们通过源代码进一步理解神经网络的实现过程:
0.导入模块,生成模拟数据集

#coding:utf-8
#0导入模块,生成模拟数据集
import tensorflow as tf
import numpy as np
BATCH_SIZE=8
seed=23455#给予seed产生随机数
rng=np.random.RandomState(seed)
#随机数返回32行2列的矩阵 表示32组 体积和重量 作为输入数据集
X=rng.rand(32,2)
#从X这个32行2列的矩阵中 取出一行,判断如果和小于1 给Y赋值1
#如果和不小于1 给Y赋值0
#作为输入数据集的标签(正确答案)
Y=[[int(x0+x1<1)] for (x0,x1) in X]
print ("X:\n",X)
print ("Y:\n",Y)# 1定义神经网络的输入,参数和输出,定义前向传播过程
x=tf.placeholder(tf.float32,shape=(None,2))
y_=tf.placeholder(tf.float32,shape=(None,1))w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))a=tf.matmul(x,w1)
y=tf.matmul(a,w2)# 2定义损失函数及反向传播方法
loss=tf.reduce_mean(tf.square(y-y_))  #军方误差
train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
# train_step=tf.train.MomentumOptimizer(0.001,0.9).minimize(loss)
# train_step=tf.train.AdadeltaOptimizer(0.001).minimize(loss)# 3生成会话,训练STEPS轮
with tf.Session() as sess:init_op=tf.global_variables_initializer()sess.run(init_op)#输出目前(未经训练)的参数取值print("w1:\n",sess.run(w1))print("w2:\n",sess.run(w2))print("\n")# 训练模型STEPS=3000for i in range(STEPS):start=(i*BATCH_SIZE)%32end=start+BATCH_SIZEsess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})if i%500==0:total_loss=sess.run(loss,feed_dict={x:X,y_:Y})print("After %d training step(s),loss on all data is %g" %(i,total_loss))#  输出训练后的参数取值。print("\n")print("w1:\n",sess.run(w1))print("w2:\n",sess.run(w2))

欢迎扫码关注我的微信公众号

TensorFlow北大公开课学习笔记-3.3反向传播相关推荐

  1. TensorFlow北大公开课学习笔记-4.2学习率

    注:本系列文章主要是复现北京大学TensorFlow笔记中的代码,方便以后使用,并没有详细讲解流程,因为我并不是专门做教程的.何况北大的教程讲的已经很好了,有需要了解详细过程的可以去看北大的教程哈. ...

  2. TensorFlow北大公开课学习笔记-4.1损失函数

    注:本系列文章主要是复现北京大学TensorFlow笔记中的代码,方便以后使用,并没有详细讲解流程,因为我并不是专门做教程的.何况北大的教程讲的已经很好了,有需要了解详细过程的可以去看北大的教程哈. ...

  3. TensorFlow北大公开课学习笔记-8 复现vgg16并实现图片识别

    注:本系列文章主要是复现北京大学TensorFlow笔记中的代码,方便以后使用,并没有详细讲解流程,因为我并不是专门做教程的.何况北大的教程讲的已经很好了,有需要了解详细过程的可以去看北大的教程哈. ...

  4. TensorFlow北大公开课学习笔记8-复现vgg16并实现图片识别

    https://www.cs.toronto.edu/~frossard/post/vgg16/ ]img_ready = re_img.reshape((1, 224, 224, 3)) Value ...

  5. 深度学习笔记三:反向传播(backpropagation)算法

    接上一篇的最后,我们要训练多层网络的时候,最后关键的部分就是求梯度啦.纯数学方法几乎是不可能的,那么反向传播算法就是用来求梯度的,用了一个很巧妙的方法. 反向传播算法应该是神经网络最基本最需要弄懂的方 ...

  6. 【吴恩达机器学习】第五周课程精简笔记——代价函数和反向传播

    Cost Function and Backpropagation(代价函数和反向传播) 1. Cost Function Let's first define a few variables tha ...

  7. 英宝通Unity4.0公开课学习笔记Vol.0

    英宝通Unity4.0公开课学习笔记 公开课地址 学习笔记目录 公开课地址 公开课地址:游戏蛮牛网. 源码素材:游戏蛮牛网. 公开课在官网上刷新不出来,只能去B站上找资源了.视频链接:哔哩哔哩. Un ...

  8. 零基础入门深度学习(3) - 神经网络和反向传播算法

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  9. 花书+吴恩达深度学习(三)反向传播算法 Back Propagation

    目录 0. 前言 1. 从 Logistic Regression 中理解反向传播 2. 两层神经网络中单个样本的反向传播 3. 两层神经网络中多个样本的反向传播 如果这篇文章对你有一点小小的帮助,请 ...

  10. 深度学习与TensorFlow:FCN论文学习笔记

    七月 上海 | 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习  快速带你入门阅读全文> 正文共1708个字,5张图,预计阅读时间8分钟. 这篇文章陆陆续续看了快两周,其中也遇 ...

最新文章

  1. tensor转换 pytorch tensorflow
  2. SAP RETAIL MM42进入商品的销售视图系统提示: No basic purchase price relevant to pricing found with schema RM0000
  3. [Android] 基于 Linux 命令行构建 Android 应用(四):命令行构建
  4. bootstrap19-内联表单
  5. 110余家企业聚集智博会 专家表示智慧城市需以打破数据堡垒为前提
  6. 怎样设置 vmware 开放一个网络端口,使网络上的电脑能访问这个端口
  7. @EnableWebMvc引发的swagger-ui.html的灾难
  8. linux的ssh漏洞,Debian GNU/Linux Rssh安全绕过漏洞
  9. Java:详解List集合的排序功能
  10. chm文件打开时提示乱码
  11. HEU KMS ActivatorV7.8.6迷你版 激活工具使用
  12. 计算机硬盘密码,电脑常识之--如何给移动硬盘[硬盘]加密码
  13. 在 Vue2 中引入高德地图和三维模型
  14. C盘100G不够,如何用D盘(或者E、F)空间给C盘扩容?
  15. gulp编译sass
  16. 如何将多张图片转换为pdf格式
  17. 索尼爱立信滑盖机java_可爱Walkman滑盖机 索尼爱立信W100i评测
  18. DOS基本命令和批处理
  19. 服务改进还是先从自己改起吧
  20. 好友已经删了,还能在电脑中找到聊天记录吗

热门文章

  1. Android微信代扣sdk无法拉起,微信JS-SDK选择图片遇到的坑
  2. AirServer投屏轻松地将iPhone、iPad投屏到Mac上面教程
  3. PS教程:如何设置水彩效果?
  4. vue实现导入导出xlsx exel的数据渲染到table表格上面,表格数据改动然后再导出数据
  5. 怎样组建家庭计算机网络,不要再求人了,教你最详细的家庭网络组建方法。
  6. 在线供应链系统服务方案:构建企业供应链平台业务、功能、技术管理架构
  7. 正式版苹果雪豹操作系统光盘镜像
  8. 交通大数据应用细分_大数据、数据挖掘在交通领域有哪些应用?
  9. win10计算机加域步骤,win10加域
  10. 一个简单的教学管理系统(SQL实现)