为啥亚当的 get_update 只执行一次?

Posted

技术标签:

【中文标题】为啥亚当的 get_update 只执行一次?【英文标题】:Why is Adam's get_update only executed once?为什么亚当的 get_update 只执行一次? 【发布时间】:2019-04-12 10:15:00 【问题描述】:

为什么 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

【问题讨论】:

您的问题是什么?问题标签不清楚。 你的问题不清楚!!请说明你想要什么 【参考方案1】:

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

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

对于任何优化器的get_updates,其想法是get_updates 构建运行优化器一步的操作,然后使用会话对优化器进行迭代评估,因此get_updates 只运行一次构建计算图。

【讨论】:

以上是关于为啥亚当的 get_update 只执行一次?的主要内容,如果未能解决你的问题,请参考以下文章