【问题标题】:keras: how to use learning rate decay with model.train_on_batch()keras:如何使用 model.train_on_batch() 的学习率衰减
【发布时间】:2019-05-05 16:54:25
【问题描述】:

在我当前的项目中,我使用 keras 的 train_on_batch() 函数进行训练,因为 fit() 函数不支持 GAN 所需的生成器和判别器的交替训练。 使用(例如)Adam 优化器,我必须在构造函数中使用optimizer = Adam(decay=my_decay) 指定学习率衰减,并将其交给模型编译方法。 如果我之后使用模型的 fit() 函数,这工作正常,因为它负责在内部计算训练重复次数,但我不知道如何使用类似的构造自己设置这个值

counter = 0
for epoch in range(EPOCHS):
    for batch_idx in range(0, number_training_samples, BATCH_SIZE):
        # get training batch:
        x = ...
        y = ...
        # calculate learning rate:
        current_learning_rate = calculate_learning_rate(counter)
        # train model:
        loss = model.train_on_batch(x, y)    # how to use the current learning rate?

用一些函数来计算学习率。 如何手动设置当前的学习率?

如果这篇文章有错误我很抱歉,这是我在这里的第一个问题。

感谢您的帮助。

【问题讨论】:

    标签: python keras deep-learning


    【解决方案1】:

    编辑

    在 2.3.0 中,lr 已重命名为 learning_ratelink。在旧版本中,您应该改用lr(感谢@Bananach)。

    在 keras 后端的帮助下设置值:keras.backend.set_value(model.optimizer.learning_rate, learning_rate)(其中 learning_rate 是一个浮点数,所需的学习率)适用于 fit 方法,并且应该适用于 train_on_batch:

    from keras import backend as K
    
    
    counter = 0
    for epoch in range(EPOCHS):
        for batch_idx in range(0, number_training_samples, BATCH_SIZE):
            # get training batch:
            x = ...
            y = ...
            # calculate learning rate:
            current_learning_rate = calculate_learning_rate(counter)
            # train model:
            K.set_value(model.optimizer.learning_rate, current_learning_rate)  # set new learning_rate
            loss = model.train_on_batch(x, y) 
    

    希望对你有帮助!

    【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2019-02-16
    相关资源
    最近更新 更多