永兴的Tensorflow笔记-3 神经网络开发基础

在这里插入图片描述
本章强烈建议和 lesson 4 一起学习

点击打开

一、什么是模型?

TensorFlow计算模型 = 计算图
计算图的概念:
TensorFlow的名字中已经说明了最重要的两个概念——Tensor(张量)和Flow(流)。TensorFlow是通过一个计算图的形式来表达计算的编程系统。TensorFlow中的每一个计算都是计算图上的一个节点,节点之间的边描述了计算之间的依赖关系。如果一个运算的输入依赖于另一个运算的输出,那么两个运算有依赖关系。
下图中,a和b两个常量不依赖任何其他计算,add计算则依赖读取两个常量的取值。所以在下图中就得到一条从a到add的边和从b到add的边。没有任何计算依赖add节点,所以add节点没有指向其他节点的边。TensorFlow的程序都可以通过类似下图所示的计算图形式来表示。
在这里插入图片描述
计算图的使用
TensorFlow 程序一般可以分为两个阶段:
在这里插入图片描述

  • 第一个阶段需要定义计算图中所有的运算;
  • 第二个阶段为执行运算

二、模型是如何诞生的?

1、模型内容的基本意义:
标准的模型有输入、节点、输出三个部分,如何让这三个部分连通起来学习规则并可以进行计算,这就是Tensorflow所做的事情。
Tensorflow将中间节点以及节点之间的运算关系(OPS)定义这计算图上,只通过会话(session),进行具体运算。

  • 计算图是静态的,无论定义什么运算,它们只是将关系搭在一起,不会进行运算。
  • 会话 是动态的,只有启动会话后才会将数据流向计算图中,按照图中的关系,最终结果从计算图中流出。

Tensorflow 分离的计算的 定义 和 执行 。
构建一幅计算图,需要:

  • 输入节点,即图的入口
  • 用于训练中的模型参数(学习参数),是连接各个节点的路径
  • 模型中的节点(OP):OP可以代表模型中的中间节点,是网络中的真正结构。

这三种结构组成计算图的静态网络结构模型。在实际开发过程中,通过动态的会话将图中的各个节点按照静态的规则联系起来,每一次迭代都会对图中的学习参数(比如 权重 w 和 偏置 b ) , 通过一定的迭代后所形成的计算图,便是可以使用的模型。
在会话中,任何一个节点都可以通过会话的run函数进行计算,得到该节点的数值。
2、模型内部的数据流向:

  • 正向
    正向,则是数据从输入开始,依次进行各节点的运算,最后得到输出,是模型最基本的数据流向。
  • 反向
    反向只有在训练的场景下,才会用到。
    即先从正向的最后一个节点开始,计算此时 结果 和 真实值 的误差,这样会形成一个用学习参数表示误差的方程,比如 梯度下降方法: 会对方程中的每个参数进行求导,得到梯度修正值,同时修正权重等学习参数,然后反推出上一层的误差,并接着计算上一层的修正值,直到传到正向的第一个节点。

三、Tensorflow开发基本步骤:

  • 定义tensorlfow输入节点
  • 定义 学习参数 的变量
  • 定义运算
  • 优化函数
  • 初始化变量
  • 迭代更新到最优解
  • 测试模型
  • 使用模型

四、基本开发步骤讲解:

1、定义输入节点:

  • 通过占位符定义:
    由placeholder方法创建,其也是一种常量,但是由用户在调用run方法是传递的,也可以将placeholder理解为一种形参。即其不像constant那样直接可以使用,需要用户传递常数值.
tf.placeholder(dtype=tf.float32, shape=[144, 10], name='X')
  • 参数:
    • dtype:数据类型,必填,默认为value的数据类型,传入参数为tensorflow下的枚举值(float32,float64…)
    • shape:数据形状,选填,不填则随传入数据的形状自行变动,可以在多次调用中传入不同形状的数据
    • name:常量名,选填,默认值不重复,建议根据创建顺序为(Placeholder,Placeholder_1,Placeholder_2…)
  • 通过字典定义:
    比如:
inputDict = {"x":tf.placeholder(tf.float32)}
  • 直接定义输入节点(用的比较少)
    比如:
train_X = np.linspace(-1,1,100)

2、定义 学习参数 的变量:

  • 直接定义:
    比如:
w = tf.Variable(tf.random_normal([1]),name="weight")
  • 通过字典定义:
    比如:
paradict = {
	"w":tf.Variable(tf.random_normal([1])),
	"b":tf.Variable(tf.zeros([1])
	}

3、定义运算:
定义运算的过程是建立模型的核心过程,直接决定的模型的效果。

  • 1、定义正向传播运算:
    即定义前向传播的运算,一般问题越复杂,前向神经网络越复杂,后面我会向大家介绍 卷积神经网络、循环神经网络、GooLeNet等

  • 2、损失函数:
    损失函数就是 输出值 和 真实值 之间的误差,配合反向传播使用,不断迭代中找到最小值,达到模型的最好效果。

  • 3、优化函数:
    在 正向传播 和 损失函数 的基础上 , 我们使用优化函数对学习参数进行优化,这个过程在反向传播中实现。
    反向传播的过程,就是沿着正向传播的过程将误差向反方向传递过去。
    之后我们会涉及到:正则化、随机梯度下降等

  • 4、初始化变量:
    session 创建好后第一件事就是初始化变量!!!

  • 5、迭代更新参数到最优解
    我们一般通过 一次会话 来完成,常常使用with愈发,可以在session结束后自动关闭

  • 6、测试模型:
    是模型验证节点,一般通过输入模型没有训练过的数据和真实结果,来测试和验证模型的效果。

  • 7、使用模型:
    和测试模型一样,只是不一定有真实结果进行对比,也代表这神经网络用来解决实际问题。

发布了45 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_43505377/article/details/103879603
今日推荐