版权提示:以下所有例子都是参考github大神制作,我只是搬运工
https://github.com/YunYang1994/TensorFlow2.0-Examples
一、最简单的线性回归
首先定义模型和损失函数
import tensorflow as tf
import matplotlib.pyplot as plt
#定义模型和损失函数
class Model(object):
def __init__(self):
self.W = tf.Variable(10.0)
self.b = tf.Variable(-5.0)
def __call__(self, inputs):
return self.W * inputs + self.b
def compute_loss(y_true, y_pred):
return tf.reduce_mean(tf.square(y_true-y_pred))
model = Model()
二、制作数据以及真正的权重
# 定义正确的权重和偏执
TRUE_W = 3.0
TRUE_b = 2.0
# 制作训练数据,添加一些噪声进去
NUM_EXAMPLES = 1000
inputs = tf.random.normal(shape=[NUM_EXAMPLES])
noise = tf.random.normal(shape = [NUM_EXAMPLES])
outputs = inputs * TRUE_W + TRUE_b + noise
三、定义画图的函数
def plot(epoch):
plt.scatter(inputs, outputs, c='b')
plt.scatter(inputs, model(inputs), c='r')
plt.title("epoch %2d, loss = %s" %(epoch, str(compute_loss(outputs, model(inputs)).numpy())))
plt.legend()
plt.draw()
plt.ion() # replacing plt.show()
plt.pause(1)
plt.close()
四、开始训练
for i in range(30):
with tf.GradientTape() as tape:
loss = compute_loss(outputs, model(inputs)) # 计算损失
dW, db = tape.gradient(loss, [model.W, model.b]) # 计算梯度
model.W.assign_sub(learning_rate * dW) # 更新权重
model.b.assign_sub(learning_rate * db)
print("=> epoch %2d: w_true= %.2f, w_pred= %.2f; b_true= %.2f, b_pred= %.2f, loss= %.2f" %(
epoch+1, TRUE_W, model.W.numpy(), TRUE_b, model.b.numpy(), loss.numpy()))
plot(epoch + 1)
可以看到线段一步一步拟合