【问题标题】:Default Adam optimizer doesn't work in tf.keras but string `adam` does默认 Adam 优化器在 tf.keras 中不起作用,但字符串 `adam` 可以
【发布时间】:2019-07-10 19:16:10
【问题描述】:

我一直在试用 TensroFlow v2 beta,并且正在试用 tf.keras 模型。

当我编译模型并选择优化器作为字符串'adam' 时。模型可以正确训练:

model.compile(optimizer='adam', loss='categorical_crossentropy')
model.fit(x, y)

但是当我尝试使用默认优化器 tf.keras.optimizers.Adam() 时,它无法被训练并在每次迭代时输出 nan 损失。

adam = tf.keras.optimizers.Adam()
model.compile(optimizer=adam, loss='categorical_crossentropy')
model.fit(x, y)

字符串'adam' 不应该是默认的亚当优化器还是我遗漏了什么?我尝试了几个超参数(learning_ratebeta_1beta_2 等),但似乎都没有。这很重要,因为我可能不想一直使用默认超参数。

谁能解释这种行为?

【问题讨论】:

    标签: python tensorflow machine-learning keras deep-learning


    【解决方案1】:

    经过一番挖掘,似乎当您键入字符串 'adam' 时,它会调用另一个 adam,它指的是 adam_v2

    这可以在here找到。

    from tensorflow.python.keras.optimizer_v2.adam import Adam
    
    adam = Adam()
    
    model.compile(optimizer=adam, loss='categorical_crossentropy')
    model.fit(x, y)
    

    【讨论】:

    • 错字:“tenforflow”应该是“tensorflow”
    • @QuinnCulver 不错的收获,谢谢!
    【解决方案2】:

    据我所知,现在有两种不同的优化器实现。使用 optimizer='adam' 似乎使用了这个实现:

    https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/keras/optimizer_v2/adam.py

    您可以显式导入为:

    from tensorflow.python.keras.optimizer_v2 import adam as adam_v2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-02
      • 2016-02-20
      • 2017-10-14
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多