基本过程为:随机创建数据点(根据某条直线波动),然后动过训练,看是否最终得出的直线方程是否是一开始使用的那个。
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 1是默认的显示等级,显示所有信息,2显示 warning 和 Error ,3只显示 Error
num_points = 1000
vectories_set = []
for i in range(num_points):
x1 = np.random.normal(0.0, 0.55) # 高斯分布,随机初始化,以0为均值,以0.55为标准差
y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03) # y=w*x+b的基础上,加一个小范围的浮动,高斯分布,以0.0为均值,0.03为标准差
vectories_set.append([x1, y1])
x_data = [v[0] for v in vectories_set]
y_data = [v[1] for v in vectories_set]
w = tf.Variable(tf.random.uniform([1], -1.0, 1.0), name="w") # 生成1维矩阵,取值是[-1,1]之间的随机数
b = tf.Variable(tf.zeros([1]), name="b") # 生成1维德b矩阵,初始值是0
y = w * x_data + b # 经计算得出预估值
loss = tf.reduce_mean(tf.square(y - y_data), name="loss") # 以预估值y和实际值y_data之间的均方误差作为损失,square为求平方项
optimize = tf.compat.v1.train.GradientDescentOptimizer(0.5) # 采用梯度下降法来优化参数,学习率为0.5
train = optimize.minimize(loss, name="train") # 训练的过程就是最小化这个误差值
sess = tf.compat.v1.Session()
init = tf.compat.v1.global_variables_initializer()
sess.run(init)
print("w=", sess.run(w), "b=", sess.run(b), "loss=", sess.run(loss))
for step in range(20): # 执行20次训练
sess.run(train)
print("w=", sess.run(w), "b=", sess.run(b), "loss=", sess.run(loss)) # 输出训练好的w和b
plt.scatter(x_data, y_data, c="r")
plt.plot(x_data, sess.run(w) * x_data + sess.run(b))
plt.show()
不太喜欢Tensorflow这种风格,感觉好乱。师姐让我学Pytorch,听说这个和python相近,Tensorflow要先放放了。