TF 告诉我使用 Keras 优化器,当我更改它时告诉我相反?

数据挖掘 喀拉斯 张量流
2022-02-16 13:36:20

我有这段代码:

model = Sequential()
model.add(Dense(32, input_dim=9, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='relu'))  

learning_rate = 0.001
(1) optimizer = tf.train.AdamOptimizer(learning_rate)
(2) optimizer = tf.keras.optimizers.Adam(lr=learning_rate, decay=1e-6)

model.compile(loss='mean_squared_error', optimizer=optimizer, metrics=['mse'])

对于优化器,起初我有第 (1) 行。它起作用了,但是在制作 ModelCheckpoints 时我收到了以下警告:

警告:tensorflow:TensorFlow 优化器无法在实例化后访问优化器属性或优化器状态。因此,我们无法将优化器保存为模型保存文件的一部分。您必须在加载模型后再次编译模型。更喜欢使用 Keras 优化器(请参阅 keras.io/optimizers)。

显然,如果你想使用它,你必须使用 Keras 优化器。好的,没问题,所以我将 (1) 注释掉,并插入 (2)。

现在它甚至不想编译了,而是给了我这个错误:

ValueError:优化器必须是 tf.train.Optimizer 的实例,而不是类 'tensorflow.python.keras.optimizers.Adam'

这对我来说听起来有点矛盾?我究竟做错了什么?

1个回答

该错误告诉您使用实际的 keras 优化器,而不是 tensorflow.keras 类。直接从 keras 库导入 Adam,运行正常:

from keras.models import Sequential 
from keras.layers import Dense, Dropout 
from keras.optimizers import Adam 

model = Sequential() 
model.add(Dense(32, input_dim=9, activation='relu')) 
model.add(Dense(128, activation='relu')) 
model.add(Dropout(0.2)) 
model.add(Dense(1, activation='relu'))  

learning_rate = 0.001 
optimizer = Adam(lr=learning_rate, decay=1e-6)

model.compile(loss='mean_squared_error', optimizer=optimizer, metrics=['mse'])