首页 文章

如何从这个Pytorch代码中找到Keras中使用的等效'batch_size'?

提问于
浏览
0

我正在使用github的Pytorch代码

我正试图将此移植到Keras . 特别是,Keras使用 model.fit 训练神经网络并具有 batch_size 参数 . 我试图设置这个,但无法在上面链接的Pytorch脚本中确定它 .

在脚本中,在框4中有一个名为 sliding_window 的函数,其中有一个名为 step 的参数 . 我不确定这是否是 batch_size 的等效设置 .

另外,我正在研究如何从Pytorch代码中的方框11设置学习速率调度程序:

base_lr = 0.01
params_dict = dict(net.named_parameters())
params = []
for key, value in params_dict.items():
    if '_D' in key:
        # Decoder weights are trained at the nominal learning rate
        params += [{'params':[value],'lr': base_lr}]
    else:
        # Encoder weights are trained at lr / 2 (we have VGG-16 weights as initialization)
        params += [{'params':[value],'lr': base_lr / 2}]

optimizer = optim.SGD(net.parameters(), lr=base_lr, momentum=0.9, weight_decay=0.0005)
# We define the scheduler
scheduler = optim.lr_scheduler.MultiStepLR(optimizer, [25, 35, 45], gamma=0.1)

我一直使用Keras的默认学习率 . 任何有关如何将此调度程序转换为Keras代码的见解也将受到赞赏 .

1 回答

  • 1

    下面找到如何在Keras中编写学习速率调度程序的示例:

    from keras.callbacks import Callback
    from keras import backed as K
    
    class LRSchedule(Callback):
        def __init__(self, schedule):
            super(LRSchedule, self).__init__()
            self.schedule = schedule
    
        def on_train_begin(self, logs = {}):
            self.epoch_counter = 0
            self.schedule_index = 0
    
        def on_epoch_end(self, epoch, logs = {}):
            self.epoch_counter += 1
    
            if len(self.schedule)  > self.schedule_index + 1:
                next_epoch = self.schedule[self.schedule_index + 1]
                if self.epoch_counter == next_epoch:
                    K.set_value(self.model.optimizer.lr, self.model.optimizer.lr / 2.0)
                    self.schedule_index += 1
    

    在您的代码中,您将以这种方式调用回调:

    lr_scheduler = LRSchedule([25, 35, 45])
    model.fit_generator(..., callbacks = [lr_scheduler])
    

    请注意,当达到一个纪元时,该调度程序将学习设置为较低的值除以2.将其修改为更花哨的计划策略是微不足道的 .

相关问题