本文为含有一个隐藏层的神经网络,隐藏层中神经元个数为10.
数据集:模拟数据集,x为等差数列的300个点,y=x^2-0.5+noise
[底部有注释]
import tensorflow as tf
import numpy as np
#添加神经层的函数
def add_layer(inputs,in_size,out_size,activation_function=None):
Weights = tf.Variable(tf.random_normal([in_size,out_size])) #二维
biases = tf.Variable(tf.zeros([1,out_size])) + 0.1
Wx_plus_b = tf.matmul(inputs,Weights)+biases
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
x_data = np.linspace(-1,1,300)[:,np.newaxis] #300行1列 模拟数据集
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data) -0.5 + noise
xs = tf.placeholder(tf.float32,[None,1]) #占位符
ys = tf.placeholder(tf.float32,[None,1])
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu) #中间层
prediction = add_layer(l1,10,1,activation_function=None) #输出层
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #通过训练使损失变小
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i %50 == 0:
print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
注释版:
我对矩阵知识点忘得差不多了,这里梳理下。
采坑:noise噪声一般非常小且平均值为0. 本程序中噪声的标准差为0.05. 写代码时不小心写成0.5,导致了loss值一直降不下来。
本人萌新,有任何问题还望指正。