Tensorflow Adam 优化器状态未更新 (get_config)
Tensorflow Adam Optimizer state not updating ( get_config )
我正在使用 optimizer.get_config()
获取我的 adam 优化器的最终状态(如 ),但是 .get_config()
是 return 初始状态。我认为这意味着以下之一
.get_config()
应该是 return 初始状态
- 我的优化器没有更新,因为我设置了错误
- 我的优化器没有更新 tf 的 adam 坏了(极不可能)
- 我的优化器正在更新,但在我调用
.get_config()
之前正在某处重置
- 还有别的吗?
当然,我最初是在一个带有训练和验证集等的适当项目中注意到这个问题的,但这里有一个非常简单的片段,似乎重现了这个问题:
import tensorflow as tf
import numpy as np
x=np.random.rand(100)
y=(x*3).round()
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x, y, epochs=500)
model.evaluate(x, y)
model.optimizer.get_config()
如果您想恢复训练 - 您应该保存优化器权重,而不是配置:
weight_values = optimizer.get_weights()
with open(self.output_path+'optimizer.pkl', 'wb') as f:
pickle.dump(weight_values, f)
然后加载它们:
model.fit(dummy_x, dummy_y, epochs=500) # build optimizer by fitting model with dummy input - e.g. random tensors with simpliest shape
with open(self.path_to_saved_model+'optimizer.pkl', 'rb') as f:
weight_values = pickle.load(f)
optimizer.set_weights(weight_values)
我正在使用 optimizer.get_config()
获取我的 adam 优化器的最终状态(如 .get_config()
是 return 初始状态。我认为这意味着以下之一
.get_config()
应该是 return 初始状态- 我的优化器没有更新,因为我设置了错误
- 我的优化器没有更新 tf 的 adam 坏了(极不可能)
- 我的优化器正在更新,但在我调用
.get_config()
之前正在某处重置
- 还有别的吗?
当然,我最初是在一个带有训练和验证集等的适当项目中注意到这个问题的,但这里有一个非常简单的片段,似乎重现了这个问题:
import tensorflow as tf
import numpy as np
x=np.random.rand(100)
y=(x*3).round()
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x, y, epochs=500)
model.evaluate(x, y)
model.optimizer.get_config()
如果您想恢复训练 - 您应该保存优化器权重,而不是配置:
weight_values = optimizer.get_weights()
with open(self.output_path+'optimizer.pkl', 'wb') as f:
pickle.dump(weight_values, f)
然后加载它们:
model.fit(dummy_x, dummy_y, epochs=500) # build optimizer by fitting model with dummy input - e.g. random tensors with simpliest shape
with open(self.path_to_saved_model+'optimizer.pkl', 'rb') as f:
weight_values = pickle.load(f)
optimizer.set_weights(weight_values)