TensorFlow 三层神经网络实现函数拟合:y=x^2+1
这段代码使用 TensorFlow 实现了一个简单的三层神经网络,用于拟合函数 y=x^2+1。
代码中的主要改动是将原来的layer函数更名为add_layer,并进行了一些其他调整:
-
修改了函数名为
add_layer,但功能与原来的layer函数相同,用于创建一个神经网络层。 -
修改了训练数据的生成方式,使用
np.square计算输入数据的平方,而不是立方。 -
将代码中的一些注释进行了调整和修正。
-
通过
tf.Session()创建了一个会话,并在会话中进行了训练。
这段代码的训练过程与之前的代码类似,使用梯度下降优化器来最小化损失函数,并在每100次迭代后打印损失函数的值。训练完成后,输出'finish!'来表示训练过程结束。
请注意,这只是一个简化的示例,用于演示如何使用 TensorFlow 构建一个简单的神经网络。实际的神经网络可能需要更复杂的结构和训练过程来解决更复杂的问题。
#encoding:utf-8
#add_layer_1.py 练习增加网络层
#创建神经网络并训练
#功能:拟合 y=x*x+1
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import numpy as np
#创建一个神经网络层
def add_layer(input,in_size,out_size,activation_function=None):
Weight=tf.Variable(tf.random_normal([in_size,out_size]) )
biases=tf.Variable(tf.zeros([1,out_size]) +0.1 )
W_mul_x_plus_b=tf.matmul(input,Weight) + biases
#根据是否有激活函数
if activation_function == None:
output=W_mul_x_plus_b
else:
output=activation_function(W_mul_x_plus_b)
return output
#创建一个具有输入层,隐藏层,输出层的三层神经网络,神经元个数分别为1,10,1
x_data=np.linspace(-2,2,800)[:,np.newaxis] # 创建输入数据 np.newaxis分别是在列(第二维)上增加维度,原先是(300,)变为(300,1)
noise=np.random.normal(0,0.05,x_data.shape)
y_data=np.square(x_data)+1+noise # 创建输入数据对应的输出
# print(x_data.shape)
# x=np.linspace(-1,1,300)
# print(x.shape)
#定义输入数据
xs=tf.placeholder(tf.float32,[None,1])
ys=tf.placeholder(tf.float32,[None,1])
#定义一个隐藏层
hidden_layer1=add_layer(xs,1,10,activation_function=tf.nn.relu)
#定义一个输出层
prediction=add_layer(hidden_layer1,10,1,activation_function=None)
#求解神经网络参数
#1.定义损失函数
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction) ,reduction_indices=[1] ))
#2.定义训练过程
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init=tf.global_variables_initializer()
#sess=tf.Session()
#3.进行训练
with tf.Session() as sess:
sess.run(init)
for i in range(5000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i%100==0:
print(sess.run(loss,feed_dict={xs:x_data,ys:y_data} ) )
print('finish!')
#关闭sess
#sess.close()
原文地址: https://www.cveoy.top/t/topic/bIIP 著作权归作者所有。请勿转载和采集!