这一篇文章是对神经网络的一个深入探索,虽然都是简单的例子,但是足以了解神经网络的架构。
一、包含一个隐含层的网络实现
1.定义添加层函数
在前面的浅层神经网络(http://blog.youkuaiyun.com/xuan_zizizi/article/details/77799868)里面不涉及隐含层,只有输入输出层,而这篇文章将继续描述如何为神经网络添加新的层,以及如何定义添加层的函数。
#encoding=utf-8
import tensorflow as tf
def add_layer(inputs,in_size,out_size,activation_function=None): #添加一个层,输入值,输入尺寸,输出尺寸,以及激励函数,此处None默认为线性的激励函数
w_pre = tf.Variable(tf.random_normal([in_size,out_size])) #定义权值矩阵,in_size行,out_size列,随机初始权值
b_pre = tf.Variable(tf.zeros([1,out_size])+0.1) #定义一个列表,一行,out_size列,值全部为0.1
y_pre = tf.matmul(inputs,w_pre)+b_pre #w_pre*inputs+b_pre,预测值,未激活
if activation_function is None
outputs = y_pre #结果为线性输出,激活结果
else:
outputs = activation_function(y_pre)#激励函数处理
return outputs
2.定义数据集
这里可以定义随机数据,通过神经网络学习来完成线性拟合功能。
#定义数据集
x_real = np.linspace(-1,1,300)[:,np.newaxis]#[-1,1]之间有300个值,后面[]表示维度,即有300行
noise = np.random.normal(0,0.05,x_real.shape)#噪声均值为0,方差为0.05,与x_data格式相同
y_real = np.square(x_real)-0.5 + noise
#定义placeholder接收数据
xs = tf.placeholder(tf.float32,[None,1],name='x_input')
ys = tf.placeholder(tf.float32,[None,1],name='y_input')
3.定义隐含层,神经元数目为10
#隐含层输入层input(1个神经元):输入1个神经元,隐藏层10个神经元
l1 = add_layer(xs,1,10,activation_function = tf.nn.relu)
4.定义输出层,隐含层l1的输出为输出层predicti里写代码片输出层
prediction = add_layer(l1,10,1,activation_function = None)
#输出层也是1个神经元
5.定义loss函数