import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#生成样本数据
#生成一个200行,1列的x数据
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]
#生成和x数据形状一样的随机噪音数据。np.random.normal()的意思是一个正态分布,第一个参数表示均值,第二个表示方差,第三个表示数据存储的形状
noise = np.random.normal(0,0.02,x_data.shape)
#定义y值
y_data = np.square(x_data) + noise
#定义预测值,用两个占位符代表输入和输出
x = tf.placeholder(tf.float32,[None,1])
y = tf.placeholder(tf.float32,[None,1])
#定义一个神经网络:输入层1个神经元,中间层10个神经元,输出层1个神经元
#定义中间层权值,1行10列的矩阵(1个输入,10个中间层输出)
weights_L1 = tf.Variable(tf.random.normal([1,10]))
bias_L1 = tf.Variable(tf.zeros([1,10]))
w_x_b_L1 = tf.matmul(x,weights_L1) + bias_L1
L1_output = tf.tanh(w_x_b_L1)
#L1_output = tf.sigmoid(w_x_b_L1)
print(L1_output)
#定义输出层。1个神经元,权值为10行1列矩阵
weight_L2 = tf.Variable(tf.random.normal([10,1]))
bias_L2 = tf.Variable(tf.zeros([1,1]))
w_L1_b_L2 = tf.matmul(L1_output,weight_L2) + bias_L2
prediction = tf.tanh(w_L1_b_L2)
#prediction = tf.sigmoid(w_L1_b_L2)
print(prediction)
#定义loss函数
loss = tf.reduce_mean(tf.square(y - prediction))
#定义优化器
optimizer = tf.train.GradientDescentOptimizer(0.1)
#定义最小化训练
train = optimizer.minimize(loss)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(1000):
sess.run(train,feed_dict={x:x_data,y:y_data})
prediction_value = sess.run(prediction,feed_dict={x:x_data})
plt.figure()
plt.scatter(x_data,y_data)
plt.plot(x_data,prediction_value,'r-',lw=5)
plt.show()
-
当前环境中没有安装matplotlib.pyplot包,导致画图模块不能导入。tip:每个环境要独立安装扩展包
-
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis],将一维数据变为二维
-
根据每一层神经元的个数定义权值矩阵,如输入层1个神经元,中间层L1有10个神经元,则输入层与中间层的权值矩阵就是1行10列
-
试了一下sigmoid函数作为激活函数,但是拟合似乎不好
-
tf.random.normal()函数
-
tf.random_normal()函数_牧野的博客-CSDN博客_random_normaltf.random_normal()函数用于从“服从指定正态分布的序列”中随机取出指定个数的值。tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) shape: 输出张量的形状,必选 mean: 正态分布的均值,默认为0 stddev: 正态...https://blog.csdn.net/dcrmg/article/details/79028043/