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,并且,能成为变量的都是后面我们需要