0
# importing libraries
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import MSE

# creating keras model
model = tf.keras.Sequential()
model.add(Dense(8, input_shape=(1,), activation='tanh'))
model.add(Dense(4, activation='relu'))
model.add(Dense(1))

# defining optimization parameters
opt=Adam(learning_rate = 1e-3)

# creating input and output variables for training
X = np.arange(1.,10.,1).reshape(-1,1)
Y = np.arange(2.,20.,2).reshape(-1,1)

# defining loss - only one iteration is performed
with tf.GradientTape() as tape:
    pred = model(X)
    loss = MSE(pred, Y)

# calculating gradients for loss w.r.t model parameters 
grads = tape.gradient(loss, model.trainable_variables)

# updating model parameters with above calculated gradients
opt.apply_gradients(zip(grads, model.trainable_weights))

我收到以下错误:

tf.Variable 'UnreadVariable' shape=() dtype=int64, numpy=1

我尝试过:tf.compat.v1.disable_eager_execution()禁用急切张量执行,但我无法提取任何张量帖子的值。另外我不知道禁用 eagerTensor 是否真的解决了这个问题,因为我无法打印渐变或损失。

4

1 回答 1

1

如果您在应用梯度之前和之后打印可训练的权重,您将清楚地看到它们已更新,即使只是向右或向左的小推:

grads = tape.gradient(loss, model.trainable_variables)
tf.print(model.trainable_variables)
opt.apply_gradients(zip(grads, model.trainable_weights))
tf.print(model.trainable_variables)
于 2022-01-19T10:18:09.433 回答