晚上好,
我想使用 tf2 和 Gradient Tape 函数实现一个简单回归问题的玩具示例。使用 Model.fit 它可以正确学习,但使用 GradientTape 也可以做一些事情,但与 model.fit() 相比,损失不会移动。这是我的示例代码和结果。我找不到问题所在。
model_opt = tf.keras.optimizers.Adam()
loss_fn = tf.keras.losses.MeanSquaredError()
with tf.GradientTape() as tape:
y = model(X, training=True)
loss_value = loss_fn(y_true, y)
grads = tape.gradient(loss_value, model.trainable_variables)
model_opt.apply_gradients(zip(grads, model.trainable_variables))
#Results:
42.47433806265809
42.63973672226078
36.687397360178586
38.744844324717526
36.59080452300609
...
Run Code Online (Sandbox Code Playgroud)
这里是 model.fit() 的常规情况
model.compile(optimizer=tf.keras.optimizers.Adam(),loss=tf.keras.losses.MSE,metrics="mse")
...
model.fit(X,y_true,verbose=0)
#Results
[40.97759069299212]
[28.04145720307729]
[17.643483147375473]
[7.575242056454791]
[5.83682193867299]
Run Code Online (Sandbox Code Playgroud)
准确率应该大致相同,但看起来它根本没有学习。输入 X 是张量,y_true 也是。
编辑以进行测试
import pathlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import tensorflow as tf …Run Code Online (Sandbox Code Playgroud) machine-learning deep-learning tensorflow tensorflow2.0 gradienttape