为什么 Adam 的 get_update 只执行一次?
Why is Adam's get_update only executed once?
为什么 get_update() 不是每个 epoch 都执行?
我的亚当:
@interfaces.legacy_get_updates_support
def get_updates(self, loss, params):
print("update!")
#Other code is the same
这是编译和拟合
model.compile(optimizer=Adam(lr=2e-5),loss='binary_crossentropy',metrics=['acc'])
his = model.fit_generator(train_genertor,steps_per_epoch=100,epochs=2,validation_data=val_genertor,validation_steps=50)
输出:
update
Epoch 1/2
Epoch 2/2
为什么不是
update
Epoch 1/2
update
Epoch 2/2
人们忘记的一个重要细节是TensorFlow的计算模型与常见的计算模型略有不同。在 TensorFlow 中,您构建一个操作图,然后使用会话对其进行评估,以提供一组实际输入来产生输出。
这与普通代码不同,在普通代码中您会一遍又一遍地调用函数。
在任何优化器 get_updates
的情况下,想法是 get_updates
构建优化器 运行 一步的操作,然后使用迭代评估优化器一个会话,因此 get_updates
只需 运行 一次来构建计算图。
为什么 get_update() 不是每个 epoch 都执行?
我的亚当:
@interfaces.legacy_get_updates_support
def get_updates(self, loss, params):
print("update!")
#Other code is the same
这是编译和拟合
model.compile(optimizer=Adam(lr=2e-5),loss='binary_crossentropy',metrics=['acc'])
his = model.fit_generator(train_genertor,steps_per_epoch=100,epochs=2,validation_data=val_genertor,validation_steps=50)
输出:
update
Epoch 1/2
Epoch 2/2
为什么不是
update
Epoch 1/2
update
Epoch 2/2
人们忘记的一个重要细节是TensorFlow的计算模型与常见的计算模型略有不同。在 TensorFlow 中,您构建一个操作图,然后使用会话对其进行评估,以提供一组实际输入来产生输出。
这与普通代码不同,在普通代码中您会一遍又一遍地调用函数。
在任何优化器 get_updates
的情况下,想法是 get_updates
构建优化器 运行 一步的操作,然后使用迭代评估优化器一个会话,因此 get_updates
只需 运行 一次来构建计算图。