import random
"""1.做最简单的模型训练模型。
设g(a, x)=a*(x**2+x),我们把g(a, x)看成是一个模型,其中a是输入,x是变量"""
def Y(a, x):
return a*(x**2 + 4)
"""2.这里我们设定一个最终训练好的函数,假设我们最终想把x值训练成4,那么我们有:(这个函数用来帮我们获取标签,用来计算损失值)"""
def Z(a):
return a*(4**2 + 4)
"""3.定义学习效率"""
lr = 0.01
"""4.初始化变量"""
x = tf.Variable(1.1,name = 'var')
"""5.设置优化器"""
optimizer = tf.keras.optimizers.Adam(lr=0.01)
for _ in range(500):
"""6.随机获取输入值"""
input = random.randint(1,255)
"""7.把输入传入Z(a)函数获取目标值,用来计算损失值"""
target = Z(input)
with tf.GradientTape() as tape:
"""8.获取模型的预测值"""
pre = Y(input, x)
"""9.损失值等于预测值与真实值的差的绝对值"""
loss = abs(pre - target)
"""10.根据loss值以及变量x求梯度"""
gradient = tape.gradient(loss,x)
"""11.优化器根据梯度,学习率等更新变量x的值"""
optimizer.apply_gradients([(gradient, x)])
if _%100 == 0:
print("loss:", loss.numpy())
print("x: ", x.numpy())
输出结果:
loss: 281.01
loss: 2531.3486
loss: 265.39764
loss: 0.75561523
loss: 12.728516
x: 3.9989111