文章目录

  • 全连接网络结构的前向传播算法
    • 单个神经元
    • 全连接网络结构
    • 计算过程举例
  • 代码实现该神经网络样例程序
  • 搭建神经网络的过程:准备、前向传播、反向传播、循环迭代
    • 准备
    • 前向传播:定义输入、参数和输出
    • 反向传播:定义损失函数、反向传播方法
    • 循环迭代:生成会话,训练STEPS轮
  • 总结

全连接网络结构的前向传播算法

单个神经元


从上图可以看出,单个神经元有多个输入和一个输出。而神经网络的结构是不同神经元之间的连接结构。神经元的输出是所有输入的加权和。神经元的参数就是输入的权重ω。神经网络的优化是优化参数的取值过程。

全连接网络结构

所谓全连接,指相邻的两层之间任意两个节点之间都有连接。

一个简单的判断零件是否合格的三层全连接网络。该图展示了这个神经网络前向传播过程。


场景描述:
该网络通过输入零件长度零件质量来判断零件是否合格

该神经网络的输入为:
X=[x1x2]X = \begin{gathered} \begin{bmatrix} x_{1} & x_{2} \end{bmatrix} \end{gathered} X=[x1​​x2​​]​
其中,x1是零件的长度,x2是零件的质量。

神经网络的参数为:
W(1)=[w1,1(1)w1,2(1)w1,3(1)w2,1(1)w2,2(1)w2,3(1)]W^{(1)}=\begin{gathered} \begin{bmatrix} w^{(1)}_{1,1} & w^{(1)}_{1,2} & w^{(1)}_{1,3} \\ w^{(1)}_{2,1} & w^{(1)}_{2,2} & w^{(1)}_{2,3} \end{bmatrix} \end{gathered} W(1)=[w1,1(1)​w2,1(1)​​w1,2(1)​w2,2(1)​​w1,3(1)​w2,3(1)​​]​
W(2)=[w1,1(2)w2,1(2)w2,1(2)]W^{(2)}=\begin{gathered} \begin{bmatrix} w^{(2)}_{1,1}\\ w^{(2)}_{2,1}\\ w^{(2)}_{2,1} \end{bmatrix} \end{gathered} W(2)=⎣⎢⎡​w1,1(2)​w2,1(2)​w2,1(2)​​⎦⎥⎤​​

计算过程
[a1,1a1,2a1,3]=[x1x2]∗[w1,1(1)w1,2(1)w1,3(1)w2,1(1)w2,2(1)w2,3(1)]\begin{gathered} \begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \end{bmatrix} \end{gathered}=\begin{gathered} \begin{bmatrix} x_{1} & x_{2} \end{bmatrix} \end{gathered} *\begin{gathered} \begin{bmatrix} w^{(1)}_{1,1} & w^{(1)}_{1,2} & w^{(1)}_{1,3} \\ w^{(1)}_{2,1} & w^{(1)}_{2,2} & w^{(1)}_{2,3} \end{bmatrix} \end{gathered} [a1,1​​a1,2​​a1,3​​]​=[x1​​x2​​]​∗[w1,1(1)​w2,1(1)​​w1,2(1)​w2,2(1)​​w1,3(1)​w2,3(1)​​]​

[y]=[a1,1a1,2a1,3]∗[w1,1(2)w2,1(2)w2,1(2)]\begin{gathered} \begin{bmatrix} y \end{bmatrix} \end{gathered}=\begin{gathered} \begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \end{bmatrix} \end{gathered} *\begin{gathered} \begin{bmatrix} w^{(2)}_{1,1}\\ w^{(2)}_{2,1}\\ w^{(2)}_{2,1} \end{bmatrix} \end{gathered} [y​]​=[a1,1​​a1,2​​a1,3​​]​∗⎣⎢⎡​w1,1(2)​w2,1(2)​w2,1(2)​​⎦⎥⎤​​

计算过程举例


当零件长度=0.7,零件质量=0.9,权重
W(1)=[0.20.10.40.3−0.50.2]W^{(1)}=\begin{gathered} \begin{bmatrix} 0.2 & 0.1 & 0.4 \\ 0.3 & -0.5 & 0.2 \end{bmatrix} \end{gathered} W(1)=[0.20.3​0.1−0.5​0.40.2​]​
W(2)=[0.60.1−0.2]W^{(2)}=\begin{gathered} \begin{bmatrix} 0.6 \\ 0.1 \\ -0.2 \end{bmatrix} \end{gathered} W(2)=⎣⎡​0.60.1−0.2​⎦⎤​​
计算中间变量:
[a1,1a1,2a1,3]=[0.70.9]∗[0.20.10.40.3−0.50.2]=[0.410.1−0.2]\begin{gathered} \begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \end{bmatrix} \end{gathered}=\begin{gathered} \begin{bmatrix} 0.7& 0.9 \end{bmatrix} \end{gathered} *\begin{gathered} \begin{bmatrix} 0.2 & 0.1 & 0.4 \\ 0.3 & -0.5 & 0.2 \end{bmatrix} \end{gathered}=\begin{gathered} \begin{bmatrix} 0.41 & 0.1 & -0.2 \end{bmatrix} \end{gathered} [a1,1​​a1,2​​a1,3​​]​=[0.7​0.9​]​∗[0.20.3​0.1−0.5​0.40.2​]​=[0.41​0.1​−0.2​]​
得出y值
[y]=[0.410.1−0.2]∗[0.60.1−0.2]=[0.116]\begin{gathered} \begin{bmatrix} y \end{bmatrix} \end{gathered}= \begin{bmatrix} 0.41 & 0.1 & -0.2 \end{bmatrix}* \begin{bmatrix} 0.6 \\ 0.1 \\ -0.2 \end{bmatrix} = \begin{bmatrix} 0.116 \end{bmatrix} [y​]​=[0.41​0.1​−0.2​]∗⎣⎡​0.60.1−0.2​⎦⎤​=[0.116​]

代码实现该神经网络样例程序

用一个完整的程序来训练神经网络来解决二分类问题
数据集:随机数生成一个

import tensorflow as tf
import numpy as npBATCH_SIZE = 8
seed = 23455# 基于seed产生随机数
rng = np.random.RandomState(seed=seed)
X = rng.rand(32, 2)
Y = [[int(x0 + x1 <1)] for (x0, x1) in X]print("X:\n",X)
print("X的类型:", X.shape)
print("Y:\n",Y)
print("Y的类型", len(Y))# 1、定义神经网络的输入、参数和输出,定义前向传播过程
x = tf.placeholder(tf.float32,shape=(None, 2))  # 知道每组有两个特征变量,但是不知道多少组,用None占位
y_ = tf.placeholder(tf.float32,shape=(None, 1)) # 存放真实的结果值,合格为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_)) # 使用均方误差计算loss
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss) # 学习率为0.001# 3、生成会话,训练STEPS轮
with tf.Session() as sess:# 3.1、初始化参数值init_op = tf.global_variables_initializer()sess.run(init_op)print("w1:\n", sess.run(w1))print("w1:\n", sess.run(w2))print("\n")# 3.2、训练模型STEPS = 3000for i in range(STEPS):# 3.2.1 每轮确定读取数据集的游标start = (i*BATCH_SIZE) % 32end = start + BATCH_SIZE# 3.2.2 喂入数据,开始训练sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})# 3.2.3 每500轮输出一次loss值if i % 500 == 0:total_loss = sess.run(loss, feed_dict={x: X, y_: Y})print("After % dtraining step(s), cross entropy on all data is % g" % (i, total_loss))print("w1:\n", sess.run(w1))print("w2:\n", sess.run(w2))

搭建神经网络的过程:准备、前向传播、反向传播、循环迭代

准备

import导入相关库
常量的定义
数据集生成

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

x=
y_=

w1=
w2=

a=
y=

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

loss=
train_step=

循环迭代:生成会话,训练STEPS轮

# 3、生成会话,训练STEPS轮
with tf.Session() as sess:# 3.1、初始化参数值init_op = tf.global_variables_initializer()sess.run(init_op)# 3.2、训练模型STEPS = 3000for i in range(STEPS):# 3.2.1 每轮确定读取数据集的游标start = (i*BATCH_SIZE) % 32end = start + BATCH_SIZE# 3.2.2 喂入数据,开始训练sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})

总结

整个神经网络总共分为四个部分:

  1. 前期准备好数据集以及其他参数。
  2. 前向传播确定网络结构
  3. 反向传播优化网络参数
  4. 循环迭代2,3两个过程不断优化两个参数

TensorFlow学习笔记之二(使用TensorFlow实现神经网络)相关推荐

  1. TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅

    TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅读 ...

  2. Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题

    Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 参考文章: (1)Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 (2)http ...

  3. tensorflow学习笔记九:将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程

    2017/02/23 更新 贴一个TensorFlow 2017开发者大会的Mobile专题演讲 移动和嵌入式TensorFlow 这里面有重点讲到本文介绍的三个例子,以及其他的移动和嵌入式方面的TF ...

  4. TensorFlow学习笔记(1)--TensorFlow简介,常用基本操作

    要将深度学习更快且更便捷地应用于新的问题中,选择一款深度学习工具是必不可少的步骤. TensorFlow是谷歌于2015年11月9日正式开源的计算框架.TensorFlow计算框架可以很好地支持深度学 ...

  5. TensorFlow学习笔记(二十三)四种Cross Entropy交叉熵算法实现和应用

    交叉熵(Cross-Entropy) 交叉熵是一个在ML领域经常会被提到的名词.在这篇文章里将对这个概念进行详细的分析. 1.什么是信息量? 假设是一个离散型随机变量,其取值集合为,概率分布函数为 p ...

  6. TensorFlow学习笔记(二)MNIST入门

    MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片: 它也包含每一张图片对应的标签,告诉我们这个是数字几.比如,上面这四张图片的标签分别是5,0,4,1. 在此教程中,我们将训练一个机器 ...

  7. TensorFlow学习笔记(二十六)CNN的9大模型之LeNet5的原理讲解

    在机器视觉,图像处理领域,卷积神经网络取得了巨大的成功.本文将参考UFLDL和DEEPLEARNING.NET的教程,结合自己的理解,梳理一下卷积神经网络的构成以及其BP算法的求解.虽然利用thean ...

  8. TensorFlow学习笔记(二十五)CNN的9大模型

    接触深度学习已经有半年了,从最开始的caffe到后来的keras,前面2个框架差不多就是配好环境,并没有做什么东西,后来google的tensorflow,我驻足在这里,决定多花点时间,写点demo, ...

  9. TensorFlow学习笔记(二)把数字标签转化成onehot标签

    在MNIST手写字数据集中,我们导入的数据和标签都是预先处理好的,但是在实际的训练中,数据和标签往往需要自己进行处理. 以手写数字识别为例,我们需要将0-9共十个数字标签转化成onehot标签.例如: ...

最新文章

  1. 视学算法第五轮送书活动获奖名单
  2. QIIME 2教程. 11元数据Metadata(2020.11)
  3. 瞭望丨光子芯片能否让中国“换道超车”
  4. java 事件驱动 netty_Netty2-事件驱动的NIO框架(使用范例)
  5. 系统向腾讯通RTX发提醒消息,“应用SDK:连接SDK服务器错误”
  6. Error: docker-ce conflicts with 2:docker-1.13.1-208.git7d71120.el7_9.x86_64
  7. 安装oracle不动了,windows2008安装ORACLE到2%不动的问题 | 信春哥,系统稳,闭眼上线不回滚!...
  8. CSS3动画 - 图片开关灯阴影动画
  9. 如何获取e.printStackTrace()的内容
  10. Cadence 元器件封装库命名规范
  11. 在Android系统中,F2FS 文件系统问题分析步骤
  12. win10电脑磁盘占用百分百,电脑优化
  13. 计算机攻击方式有哪些,常用的dos攻击方式是什么
  14. 鼎立td测试软件窗口参数介绍,鼎立网优参数指标解释
  15. java 生成树形_Java实现生成Excel树形表头完整代码示例
  16. Js/html格式化在线工具
  17. Android实现TTS文字转语音功能
  18. np.subtract.outer()
  19. 用WIN7装oracle10g的步骤
  20. 基于HTTP的QQ协议分析

热门文章

  1. mvn导入jar到库命令
  2. linux 磁盘延时,Linux:如何模拟硬盘延迟?我想在不使用CPU电源的情况下增加iowait值...
  3. html5二次元插件,送你PS一键制作动漫二次元插件,80套背景+50种效果+20款中英字体...
  4. html5中加入音频,使用HTML5在网页中嵌入音频和视频播放的基本方法
  5. php 让字体闪烁,js实现文字闪烁特效的方法
  6. vs代码补全的快捷键_一款Python编程的自动补全插件神器——kite
  7. mysql 中函数如何转存_MySQL函数转储存(当前月数据同步)
  8. android 网络图片查看器,Handler的用法
  9. 四十四、深入Java 的序列化和反序列化
  10. Vue.js 学习视频和书籍【推荐】