为什么亚当的get_update仅执行一次?

时间:2019-04-12 10:15:00

标签: python keras adam

为什么没有每次执行get_update()?

myAdam:

    @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

1 个答案:

答案 0 :(得分:1)

人们忘记的一个重要细节是TensorFlow的计算模型与常见的计算模型略有不同。在TensorFlow中,您可以构建操作图,然后通过会话进行评估,以提供一组实际输入以产生输出。

这与普通代码不同,在普通代码中,您会一遍又一遍地调用函数。

对于任何优化程序的get_updates,其思想是get_updates构建运行优化程序一步的操作,然后使用会话来迭代评估优化程序,因此{{ 1}}仅运行一次即可构建计算图。