如何从此 Pytorch 代码找到 Keras 中使用的等效 'batch_size'?
How can I find the equivalent 'batch_size' used in Keras from this Pytorch code?
我正在使用来自 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 代码的见解也将不胜感激。
下面是一个关于如何在 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 的较低值。将其修改为更花哨的调度策略是微不足道的。
我正在使用来自 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 代码的见解也将不胜感激。
下面是一个关于如何在 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 的较低值。将其修改为更花哨的调度策略是微不足道的。