2.1 处理结构

计算图纸

Tensorflow首先要定义神经网络的结构,然后再把数据放入结构当中进行运算和训练。

我们要做得就是要建立一个这样的结构,然后把数据放进去,之后tensorflow就可以自己运行,tensorflow字面意思翻译过来就是向量在里面飞。


上图就是一个循环,从输入层输入数据,数据飞到隐藏层再到输出层,用梯度下降法处理,完成对几个参数的更新,用更新之后的参数再次应用到隐藏层中去学习,不停的循环直至结果收敛。
TensorFlow是采用数据流图(data flow
graphs)来计算,所以首先我们得创建一个数据流流图,然后再将我们的数据(数据以张量(tensor)的形式存在)放在数据流图中计算。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。训练模型时tensor会不断的从数据流图中的一个节点flow到另一节点,这就是TensorFlow名字的由来。

Tensor 张量意义

张量有多种:
零阶张量:纯量/标量(scalar),是一个数值,比如[1]
一阶张量:向量(vector)一维
二阶张量:矩阵(matrix)二维
等等

2.2 例子2
#加载这两个模块,并使用numpy来创建我们的数据 import tensorflow as tf import numpy as np #科学计算的模块
# create data x_data = np.random.rand(100).astype(np.float32)
#随机生成100个数,定制成float32的形式 y_data = x_data*0.1 + 0.3 ###开始创建结构### Weights = tf
.Variable(tf.random_uniform([1], -1.0, 1.0)) #随机生成一个1维的-1到1的范围的数 biases = tf
.Variable(tf.zeros([1])) #定义w和b,b初始定义为0的1维数 y = Weights*x_data + biases
#拟合公式y,预测的y loss = tf.reduce_mean(tf.square(y-y_data))
#误差公式loss,预测值y和真实值y_data的差 optimizer = tf.train.GradientDescentOptimizer(0.5)
#使用GradientDescentOptimizer优化器,学习效率<1 train = optimizer.minimize(loss) #用优化器减小误差
# init = tf.initialize_all_variables() # tf 马上就要废弃这种写法,用下面这种 init = tf.global
_variables_initializer()#初始化结构 ###结束创建结构### sess = tf.Session()
#session像一个指针,指向要处理的地方 sess.run(init) # Very important,激活init for step in range(
201): #训练201步 sess.run(train) #要训练train,也就是optimizer if step % 20 == 0:
print(step, sess.run(Weights), sess.run(biases)) #每20步打印一次结果,sess.run指向w和b并输出
结果:


2.3 Session 会话控制

Session是Tensorflow为了控制、输出文件的执行语句。运行session.run()可以得到运算结果。
Session的两种打开方式
import tensorflow as tf # create two matrixes matrix1 = tf.constant([[3,3]])
#行向量 matrix2 = tf.constant([[2], [2]]) #列向量 product =
tf.matmul(matrix1,matrix2) #矩阵乘法 matrixl
multiply,在numpy中是np.dot(matrix1,matrix2) # method1 sess = tf.Session()
#Session是一个object,首字母要大写 result = sess.run(product)
#因为product不是直接计算的步骤,所以需要Session来激活product并得到计算结果,这是Tensorflow的思考模式print(result)
sess.close() #有没有都可以,写上会显得比较完整 # method2 with tf.Session() as sess:
#我们打开tf.Sesssion并命名成sess,再执行下面的代码,执行完之后自动关闭,不需要手动close result2 =
sess.run(product)print(result2)
结果:


2.4 Variable 变量

在定义变量上python与tensorflow不同
tensorflow语法:state = tf.Variable()
如果在tensorflow中定义了变量,那么一定要初始化变量:init = tf.initialize_all_variables() # tf
马上就要废弃这种写法,用下面这种
init = tf.global_variables_initializer()
import tensorflow as tf state = tf.Variable(0, name='counter')
#定义一个变量,令他的初始值为0,命名为counter # 定义常量one 初始值为1 one = tf.constant(1) # 定义加法步骤 (注:
此步并没有直接计算) new_value = tf.add(state, one) # 将 State 更新成
new_value,把new_value加到state上 update = tf.assign(state, new_value) # 如果定义
Variable, 就一定要用 initialize # init = tf.initialize_all_variables() # tf
马上就要废弃这种写法 init = tf.global_variables_initializer() # 替换成这样就好 # 使用 Session with
tf.Session()as sess: sess.run(init) #执行 初始化所有的变量 for _ in range(3):
sess.run(update)#执行update print(sess.run(state)) #执行state并打印
2.5 Placeholder 传入值

placeholder是tensorflow的占位符,暂时存储变量,tensorflow要从外部传入数据,就要用到placeholder。
要给节点输入数据时用 placeholder,在 TensorFlow 中用placeholder
来描述等待输入的节点,只需要指定类型即可,然后在执行节点的时候用一个字典来“喂”这些节点。相当于先把变量 hold 住,然后每次从外部传入data,注意
placeholder 和 feed_dict 是绑定一起用的。
feed机制:给feed提供数据,作为run()调用的参数,feed只在调用它的方法内有效,方法结束,feed就会消失。
语法:
tf.placeholder() sess.run(xxx,feed_dict={input:xx}) import tensorflow as tf #在
Tensorflow 中需要定义 placeholder 的 type ,一般为 float32 形式 input1 = tf.placeholder(tf
.float32) input2 = tf.placeholder(tf.float32) # mul = multiply 是将input1和input2
做乘法运算,并输出为 output ouput = tf.multiply(input1, input2)
#传值工作交给sess.run(),需要传入的值放在了feed_dict={},并一一对应每一个input with tf.Session() as
sess: print(sess.run(ouput, feed_dict={input1: [7.], input2: [2.]})) # 结果:[ 14.]
2.6 什么是激励函数

为了解决不能用线性函数表达的问题
已知的激励函数有很多种,根据不同的神经网络选择不同的激励函数,当然,也可以自己构造出一个激励函数,但是构造的这个函数必须可微分,因为你要进行反向传播求导。

原函数y=Wx,这里的AF就是指的激励函数,激励函数拿出自己最擅长的”掰弯利器”,套在了原函数上 用力一扭,原来的 Wx 结果就被扭弯了。
而这个AF其实就是另一个非线性函数,将这些掰弯利器嵌套在原有的结果之上,强行把原有的线性结果给扭曲了,使得输出结果 y 也有了非线性的特征。

常用选择


在浅层神经网络中,可以使用任意的激励函数,可以随便掰弯,不会有很大的影响,但是对于多层神经网络,会涉及到梯度爆炸以及梯度消失等问题。
对于少量层结构的神经网络:
卷积神经网络CNN:relu函数
循环神经网络RNN:tanh函数或者relu函数

2.7 激励函数 activation function

激励函数运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经系统。激励函数的实质是非线性方程。Tensorflow
的神经网络里面处理较为复杂的问题时都会需要运用激励函数。
下图是常见的几种激励函数,x表示传递过来的值,y表示传递出去的值。

激励函数在隐藏层/预测层,判断哪些值要被送到预测结果那里。

tensorflow提供的一些激励函数
<https://www.tensorflow.org/versions/0.6.0/api_docs/python/nn.html>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信