TensorFlow笔记-04-神经网络的实现过程,前向传播

  • 基于TensorFlow的NN:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型

  • 张量(tensor):多维数组(列表)

  • 阶:张量的维数

  • 计算图(Graph):搭建神经网络的计算过程,只搭建,不运算

  • 会话(Session):执行计算图中的结点运算

  • 神经网络的参数:即计算图中的权重,也可以说是神经元(后面会提到)线上的权重,用变量表示,一般会随机生成这些参数。生成参数的方法是让 w(神经元上的线) 等于 tf.Variable,把生成的方式写在括号里

  • 神经网络中常用的生成随机数/数组的函数有:

  • 看不懂也没有关系

  • 其中Variable有4种:zeros,ones,fill,constant

tf.zeros····全0数组··············tf.zeros([3,2],int32) 生成[[0,0],[0,0],[0,0]]

tf.ones·····全1数组··············tf.ones([3,2],int32) 生成[[1,1],[1,1],[1,1]]

tf.fill·······全定值数组··············tf.fill([3,2],6) 生成[[6,6],[6,6],[6,6]]

tf.constant··直接给值··············tf.zeros([3,2,1]) 生成[3,2,1]

神经网络的搭建

神经网络的实现过程:

  • 1.准备数据,提取特征,作为输入喂给神经网络 (Neural Network,NN,神经网络简称NN)
  • 2.搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)

    (NN前向传播算法 ===> 计算输出)
  • 3.大量特征数据喂给NN,迭代优化NN参数

    (NN反向传播算法 ===> 优化参数训练模型)
  • 4.使用训练好的模型,预测和分类
  • 由此可见,基于神经网络的机器学习主要分两个过程,即训练过程和使用过程,训练过程是第一步,第二步,第三步的循环迭代,使用的第四步,一旦参数优化完成就可以固定这些参数,实现特定应用了

前向传播:

  • 前向传播就是搭建模型计算过程,让模型具有推理能力(以全连接网络为例),可以针对一组输入给出相应的输出
  • 举个例子:

    生产一批零件将体积想 x1 和重量 x2 为特征的输入 NN,通过 NN 后输出一个数值
  • 分析:
  • 体积和重量就是我们要选择的特征,把他们喂入神经网络,当体积和重量这组数据走过神经网络后,会得到一个输出,
  • 假设输入的特征是:体积:0.7,重量0.5
  • 我们搭建的神经网络:

  • 由神经网络可得,隐藏节点 a11 = x1w11 + x2w21 = 0.14 + 0.15 = 0.29
  • 同理算得节点 a12 = 32,a13 = 0.38,最终计算得到输出层 Y= 0.015
  • 这便实现了前向传播

前向传播过程的 Tensorflow 描述:

  • 变量初始化,计算图节点都要用到会话

    with tf.Session() as sess:(前面提到的 with 结构)

  • 变量初始化:

    • 在 sess.run 函数中用 tf.global_variables_initializer() 汇总所有待优化变量:

    init_op = tf.global_variables_initializer()

    sess.run(init_op)

  • 代码前向传播文件:https://xpwi.github.io/py/TensorFlow/tf05forward.py

  1. # coding:utf-8
  2. # 前向传播
  3. # 两层简单神经网络(全连接)
  4. import tensorflow as tf
  5. # 定义输入和参数
  6. x = tf.constant([[0.7, 0.5]])
  7. w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
  8. w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
  9. # 定义前向传播的过程
  10. a = tf.matmul(x, w1)
  11. y = tf.matmul(a, w2)
  12. # 用会话计算结果
  13. with tf.Session() as sess:
  14. init_op = tf.global_variables_initializer()
  15. sess.run(init_op)
  16. print("y in tf05前向传播 is:\n", sess.run(y))
  17. # 结果:
  18. # [[3.0904665]]

运行结果:

  1. # coding:utf-8
  2. # 前向传播
  3. # 两层简单神经网络(全连接)
  4. import tensorflow as tf
  5. # 定义输入和参数
  6. # 用placeholder实现输入自定义(sess.run中喂1组数据)
  7. x = tf.placeholder(tf.float32, shape=(1, 2))
  8. w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
  9. w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
  10. # 定义前向传播的过程
  11. # 矩阵相乘,不运算
  12. a = tf.matmul(x, w1)
  13. y = tf.matmul(a, w2)
  14. # 用会话计算结果
  15. with tf.Session() as sess:
  16. init_op = tf.global_variables_initializer()
  17. sess.run(init_op)
  18. # 字典,喂入一组特征
  19. print("y in tf05forward2 is:\n", sess.run(y, feed_dict={x:[[0.7,0.5]]}))
  20. # 结果:
  21. # [[3.0904665]]

一次向神经网络喂入n组特征

  1. # coding:utf-8
  2. # 前向传播
  3. # 两层简单神经网络(全连接)
  4. # 向神经网络喂入n组特征
  5. import tensorflow as tf
  6. # 定义输入和参数
  7. # 用placeholder实现输入自定义(sess.run中喂多组数据)None表示未知
  8. x = tf.placeholder(tf.float32, shape=(None, 2))
  9. w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
  10. w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
  11. # 定义前向传播的过程
  12. # 矩阵相乘,不运算
  13. a = tf.matmul(x, w1)
  14. y = tf.matmul(a, w2)
  15. # 用会话计算结果
  16. with tf.Session() as sess:
  17. init_op = tf.global_variables_initializer()
  18. sess.run(init_op)
  19. # 字典,喂入多组特征
  20. print("y in tf05forward2 is:\n", sess.run(y, feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}))
  21. print("w1:", sess.run(w1))
  22. print("w2:", sess.run(w2))

运行结果



前向传播就到这里了

更多文章:Tensorflow 笔记


- 本笔记不允许任何个人和组织转载

TensorFlow笔记-04-神经网络的实现过程,前向传播的更多相关文章

  1. 20180929 北京大学 人工智能实践:Tensorflow笔记04

    20180929 北京大学 人工智能实践:Tensorflow笔记03(2018-09-30 00:01)

  2. 玩转Spring全家桶笔记 04 Spring的事务抽象、事务传播特性、编程式事务、申明式事务

    1.Spring 的事务抽象 Spring提供了一致的事务模型 JDBC/Hibernate/Mybatis 操作数据 DataSource/JTA 事务 2.事务抽象的核心接口 PlatformTr ...

  3. Tensorflow 笔记

    TensorFlow笔记-08-过拟合,正则化,matplotlib 区分红蓝点 TensorFlow笔记-07-神经网络优化-学习率,滑动平均 TensorFlow笔记-06-神经网络优化-损失函数 ...

  4. TensorFlow笔记-01-开篇概述

    人工智能实践:TensorFlow笔记-01-开篇概述 从今天开始,从零开始学习TensorFlow,有相同兴趣的同志,可以互相学习笔记,本篇是开篇介绍 Tensorflow,已经人工智能领域的一些名 ...

  5. Tensorflow笔记——神经网络图像识别(一)前反向传播,神经网络八股

      第一讲:人工智能概述       第三讲:Tensorflow框架         前向传播: 反向传播: 总的代码: #coding:utf-8 #1.导入模块,生成模拟数据集 import t ...

  6. TensorFlow笔记-05-反向传播,搭建神经网络的八股

    TensorFlow笔记-05-反向传播,搭建神经网络的八股 反向传播 反向传播: 训练模型参数,在所有参数上用梯度下降,使用神经网络模型在训练数据上的损失函数最小 损失函数:(loss) 计算得到的 ...

  7. tensorflow学习笔记(1)-基本语法和前向传播

    tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程.                                       图中的constant是个常量 计 ...

  8. TensorFlow学习笔记——深层神经网络的整理

    维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”.因为深层神经网络是实现“多层非线性变换”最常用的一种方法,所以在实际中可以认为深度学习就是深度神经网络的代名词.从 ...

  9. Tensorflow笔记——神经网络图像识别(四)搭建模块化的神经网络八股(正则化,指数衰减学习率,滑动平均等优化)

    实战案例: 数据X[x0,x1]为正太分布随机点, 标注Y_,当x0*x0+x1*x1<2时,y_=1(红),否则y_=0(蓝)  建立三个.py文件 1.  generateds.py生成数据 ...

随机推荐

  1. SQL Server数据库 优化查询速度

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...

  2. struts2整合axis2后,访问不到wsdl,被struts2拦截的解决办法

    在struts2中整合axis2后,访问wsdl的时候显示404  not found There is no Action mapped for action name xxxxxxxx. 解决办法 ...

  3. 无法打开物理文件“E:\Database\VRVIES6841-FZ01-Global\VRVEIS.mdf”。操作系统错误 5:“5(拒绝访问。)”

    在用SQLServer2012附加SQLServer2000备份的数据库事,报如下错误: 无法打开物理文件“E:\Database\VRVIES6841-FZ01-Global\VRVEIS.mdf” ...

  4. spring--mvc用戶注册用户名验重

    spring--mvc用戶注册用户名验重 注册是验证用户名是否重复.post方法,当表单的用户名文本框失去焦点时,由ajax方法指定,进行@RequestMapping指定的url提交时调用的方法. ...

  5. Scrum介绍——续

    四. Scrum过程 Scrum的过程如图4-1所示 图4-1 Scrum过程 4.1 建立Product Backlog Product Backlog是Product Owner把客户的商业需求按 ...

  6. C#中读写INI文件

    INI文件就是扩展名为“ini”的文件.在Windows系统中,INI文件是很多,最重要的就是“System.ini”.“System32.ini”和“Win.ini”.该文件主要存放用户所做的选择以 ...

  7. poj3461

    题解: 简单kmp 然而strlen时间号费啊 代码: #include<cstdio> #include<cstring> using namespace std; ; #d ...

  8. LeetCode OJ:Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  9. LINK : fatal error LNK1123

    转: LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 这个是由于日志文件引起的,可以将 项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来 ...

  10. Final阶段第1周/共1周 Scrum立会报告+燃尽图 01

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411] 版本控制:https://git.coding.net/liuyy08 ...