神经层里常见的参数通常有weights、biases和激励函数。
看demo
#coding:utf-8
import tensorflow as tf
import numpy as np
#定义添加神经层的函数def add_layer(),它有四个参数:
#输入值、输入的大小、输出的大小和激励函数,我们设定默认的激励函数是None
def add_layer(inputs,input_size,output_seiz,activation_function = None):
#开始定义weights和biases
Weights = tf.Variable(tf.random_normal([input_size,output_seiz]))#in_size行, out_size列的随机变量矩阵
#机器学习中,biases的推荐值不为0,所以我们这里是在0向量的基础上又加了0.1
biases = tf.Variable(tf.zeros([1,output_seiz])+0.1)
#定义神经网络未激活的值。tf.matmul()是矩阵的乘法。
Wx_plus_b = tf.matmul(inputs,Weights)+biases
#当activation_function——激励函数为None时,输出就是当前的预测值——Wx_plus_b,
#不为None时,就把Wx_plus_b传到activation_function()函数中得到输出
if activation_function is None:
# None 表示线性关系 无需激励函数
output_seiz = Wx_plus_b
else:
output_seiz = activation_function(Wx_plus_b)
# 返回输出 添加一个神经层的函数——def add_layer()就定义好了。
return output_seiz
x_data = np.linspace(-1,1,300)[:,np.newaxis] #-1到1这个区间里有300个单位,维度 二维
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32) #噪点
y_data = np.square(x_data)-0.5 #x_data的二次放 - 0.5
#输入
x_input = tf.placeholder(tf.float32,[None,1])
y_input = tf.placeholder(tf.float32,[None,1])
#简单的三层神经网络:
# 输入层1个神经元 | 隐藏层假设10个神经元 | 输出层1个神经元
#定义隐藏层
layer_hint = add_layer(x_input,1,10,activation_function = tf.nn.relu)
#定义输出层
layer_output = add_layer(layer_hint,10,1,activation_function = None)
loss =tf.reduce_mean(tf.reduce_sum(tf.square(y_input - layer_output),reduction_indices=[1]))#二者差的平方求和再取平均
#每一个练习的步骤 通过 优化器以0.1的学习效率对误差进行更正提升,下一次就会有更好的结果。
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
#初始
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for i in range(1000):
sess.run(train_step, feed_dict={x_input:x_data,y_input:y_data})
if i% 50:
print sess.run(loss,feed_dict={x_input:x_data,y_input:y_data})
输出
1.02167
0.882461
…
0.164712
…
0.0363653
…
0.00902714
…
0.00333527
…
0.00140666
….
0.000842972
….
0.000661918
…
0.000372133
可以看出误差越来越小了