tensorflow学习笔记

基于tensorflow的NN

张量表示数据,用计算图搭建神经网络,用绘画执行计算图,优化线上的权重(参数),得到模型。

张量(tensor)

即多维数组(列表) 阶:张量的维数
0阶就是标量 例:s=1 2 3
1阶就是向量 例:v=[1,2,3]
2阶就是矩阵 例:m=[[1,2,3],[4,5,6],[7,8,9]]
n阶就是张量 例:t=[[[…n个方括号
因此,我们可以说张量表示n阶数组
在Ubuntu中,tensorflow的数据类型有
tf.float32 tf.int32
可以看到它的输出为
可以看到它的输出为(“节点名:第0个输出”,维度=一维数组长度2,数据类型是float32)
在这里插入图片描述
a=tf.constant表示定义一个常数。
而且我们上面的代码描述的是一段计算过程,就是一个计算图。它只描述过程,不计算结果。

计算图(Graph)

是搭建神经网络的计算过程,只搭建,不计算。
而神经网络的基础,神经元就可以用计算图来表示。
在这里插入图片描述
如图中,w1,w2表示的就是输入x1,x2的权重值。因此y=XW=x1w1+x2w2就是上图所表示的。tensorflow代码如右图所示。
定义的x是一个一行两列的张量,而w是一个两行一列的张量,而用乘法得出来的y张量就应该是一个一行一列的二维张量。想得到计算结果,就需要用到会话。

会话(Session)

执行计算图中的节点运算。可以用with结构实现
在这里插入图片描述
注意犯过的错误:w这个2行1列的张量需要外边加上一个方括号,而x最好也加上。
在这里插入图片描述
这里可以看到,不仅仅是显示出了所得结果是一个什么张量,也可以得到值。
这里还有一个需要注意的是参数w它是用变量表示的,随机给初值。
在这里插入图片描述
这里,随机种子不同,生成的随机数也不同。以上就是tensorflow基本概念的学习,接下来可以进入正题了。

神经网络实现过程

在这里插入图片描述

前向传播

即搭建模型,实现推理(以全连接网络为例)
在这里插入图片描述
例如这样的一个前向传播网络。我们可以用tensorflow来表示
在这里插入图片描述
在这里,因为在第一层网络中有两个输入三个输出,因此第一层的待优化参数w为一个两行三列的张量,所得出的第一个网络的结果为一个1x3的矩阵xw(1),而第二层网络因为有三个输入一个输出所以是3x1的矩阵。
每个变量初始化,计算图节点运算都要用绘画来实现。
这是一个训练前向网络的例子
在这里插入图片描述
值得注意的是,如果想在文件中写入中文第一行#coding:utf-8必不可少。而最后的run(a)也可以改变为运算y节点。
另一种方式是先用placeholder占住位置,再在运行会话时输入x的真实数据。
在这里插入图片描述
可以看到红笔标注的位置即为区别。这种方式比较适合喂入多组数据。
在这里插入图片描述
可以看到区别在于,placeholder的占用函数的维度改为了【none,2】,这样在feed喂数据的时候就可以写入任意多个。在这里插入图片描述

反向传播

在这里插入图片描述
可以看到比较关键的在于要用梯度下降法来减少模型的损失函数。损失函数即为模型预测值和我们已经有的实际数据的均方误差。我们可以用三种方法来降低损失值loss。先选用梯度下降法。而在每个方法中,都有一个常数我们称之为学习率learning-rate,一般都是一个较小的值,比如0.01。
三种方法的区别如下
1.梯度下降法
使用随机梯度下降算法,使参数沿着梯度的反方向,即总损失减少的方向移动,实现更新参数。
在这里插入图片描述
在这里插入图片描述
综上,我们可以得出神经网络搭建的框架步骤:在这里插入图片描述
接下来有一个实例。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后结果如图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值