利用Tensorflow实现三层全连接的神经网络

1.Tensorflow的概述原理:

tensorflow的使用类似于一种框架定义,在使用tensorflow定义变量variable,和占位符tensorflow.placeholder()的时候,给出的是一种框架的定义。只有在会话控制模块tensorflow.session中调用run(),才能让对应的语句真正的执行。

这里关于tensorflow有一个很重要的计算图的概念,意思就是在你声明的一些框架变量之后,对变量的相关计算操作都会被连接,绘制成一个计算图,叶子结点就是你声明的一些参数变量,也是你最后要进行优化的参数,在计算图绘制完成之后,在会话控制模块对计算图的根节点进行反向追踪,才能对变量进行优化,计算图的构造是自然而然的,不需要程序员操心,这只是一个概念

这里我们基于sklearn中的莺尾花数据集进行三层全连接的神经网络搭建,数据集的导入不做详细介绍

第一步:因为我们要进行分类模型的训练,首先我们需要利用tensorflow的one_hot()独热编码函数,将数据集的label集编码成为对应编码集。one_hot()中有两个核心的参数要传入,第一个就是待编码的列表格式的label集,第二个就是depth(也就是数据集是几分类就传几)。需要注意的是,这里的独热编码对象是一个列表!!!是一个列表!!列表!!重要的说三遍,函数会对传入的列表的每一个元素进行编码,如果是三分类且label为2的话就是[0,0,1]。

第二步:我们需要定义我们计算要的参数

1.输入集,input=tensorflow.placeholder(dtype,shape),两个参数分别是你输入集的元素的数据类型是什么,和输入集的维度是什么,如果shape=[None,4],None表示该维度是任意的。这里注意你的dtype在进行后面的矩阵乘法的时候要和权重相一致

2.声明权重:输入层到隐含层权重声明为V=tensorflow.variable(),隐含层到输出层权重声明为W=tensorflow.variable(),函数参数是放入你要成为变量的tensor,注意tensorflow的变量默认的数据类型是float32,并且,能成为变量的都是后面我们需要进行优化的神经网络参数,不是啥都放入变量里面去

第三步:通过定义的参数变量构造一个到损失函数的计算图

3.进行前向计算,输出层的predict经过tensorflow.matmul(input,v),在经过一个激活函数,在和W进行矩阵相乘运算,在经过一个激活函数,也可以不经过输出predict。此时已经以input,V和W为叶子结点构造了一个到达predict的计算图,

4.在定义一个损失函数loss,最后选择一个优化器,这里我们选择的是tensorflow.train中的梯度下降优化器,最后利用优化器的minimum(loss,var_grad=[])最小化损失函数,注意,这里有一个很重要的参数var_gard,这里就是传入你要进行梯度下降更新的变量都有哪些,可以通过列表传入,minimum()封装了求解梯度,自动更新梯度的工作。

第四步:写会话控制模块,一般利用with tensorflow.Session() as sess:开头进入会话模块,里面调用sess.run(loss),sess.run(优化器工作)等等来执行框架语句。注意!!注意!!这里的sess.run()只是启动语句的执行,它是可以返回执行完的结果的,一般我们把要继续分析的数据计算出来之后要放到一个正常的python变量里面去,如果没有保存下来,就只是单纯的执行了一下语句而已,没有任何效果。  

最后我们在一个for循环里面执行一定次数的sess.run(优化器工作)的语句就可以实现很好的参数权重优化了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值