人工智能神器—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的训练结果