人工智能神器—TensorFlow入门基础(激励函数、隐藏层)
激励函数
Activation Function(激励函数):
前几期的文章,我们介绍了激励函数的感念,为何需要激励函数,那么在TensorFlow中如何使用激励函数
激励函数说白了就是非线性方程,在不同的神经网络中,可以尝试不同的激励函数,一般在卷积神经网络CNN的卷积层中, 推荐的激励函数是 relu. 在循环神经网络中RNN中, 推荐的是 tanh 或者是 relu。具体激励函数的具体细节,我们会随着文章的不断分享,逐渐介绍。
TensorFlow流程结构图
从TensorFlow数据结构图,我们可以看出TensorFlow除了输入层,训练层外,还有多层的隐藏层(hidden layer负责降维),在不同的实际问题中,添加多少隐藏层,需要根据项目的需求。我们上期的文章,TensorFlow数据结构构建一文,简单介绍了TensorFlow的数据结构建立,但是没有添加任何层,我们的激励函数就添加在层的定义中。
TensorFlow添加层
我们修改一下我们上期的代码,介绍一下如何使用激励函数与如何添加层
首先我们定义一个层的函数
import tensorflow as tf import numpy as np #定义层,这里activation_function=None def add_layer(inputs,in_size,out_size,activation_function=None): #定义Weights Weights = tf.Variable(tf.random_normal([in_size,out_size])) #定义biases 推荐不为0的值 biases = tf.Variable(tf.zeros([1,out_size])+0.1) #定义y=W*x+b tf.matmul()是矩阵的乘法 Wx_plus_b=tf.matmul(inputs,Weights)+biases if activation_function is None: #上期的代码也可以添加层,只是activation_function=None outputs=Wx_plus_b else: #通过激励函数非线性话y=W*x+b outputs=activation_function(Wx_plus_b) return outputs
添加层的函数定义后,后期我们就可以直接使用函数定义添加层。
2、创建初始化数据
x=np.linspace(-1,1,300)[:,np.newaxis] #添加一定的noise,更接近现实数据 noise=np.random.normal(0,0.05,x.shape) #本期定义一个一元二次函数 y=np.square(x)-0.5+noise #定义输入输出数据 x_ph=tf.placeholder(tf.float32,[None,1]) y_ph=tf.placeholder(tf.float32,[None,1])
3、占位符与feed_dict
我们前期的文章,无论定义的是变量还是常量,都是事先定义好的量,我们没有办法给TensorFlow输入数据。占位符是一种用于接受外部输入的节点,通过占位符,我们可以给TensorFlow输入数据,
4、添加层
#输入层 定义激励函数为relu lay_one=add_layer(x_ph,1,10,activation_function=tf.nn.relu) #输出层 就是我们TensorFlow训练的一元二次方程 predition=add_layer(lay_one,10,1,activation_function=None)
5,计算误差loss
loss=tf.reduce_mean(tf.reduce_sum(tf.square(y_ph-predition),reduction_indices=[1]))
6、设置优化器
optimizer=tf.train.GradientDescentOptimizer(0.2)
7、设置TensorFlow神经网络
train=optimizer.minimize(loss)
8、初始化神经网络
init = tf.global_variables_initializer()
9、启动神经网络
with tf.Session() as sess: sess.run(init) for i in range(1000) #占位符通过feed_dict输入数据,这里我们输入我们定义的x,y,当然这里你也可以输入其他的数据 sess.run(train,feed_dict={x_ph:x,y_ph:y}) if i%50==0: print(i,sess.run(loss,feed_dict={x_ph:x,y_ph:y})) >>>
10、查看输出
刚开始的误差为0.3,随着训练的step增加,误差loss 越小
loss
下期预告
下期介绍一下matplotlib 可视化工具,这在TensorFlow中可以更形象的看到TensorFlow的训练结果