gpt4 book ai didi

machine-learning - 迭代应用 keras 模型 fit() 时的学习率状态如何?

转载 作者:行者123 更新时间:2023-11-30 08:53:54 24 4
gpt4 key购买 nike

我正在申请 keras model fitting由于数据集很大,因此需要迭代(在 for 循环内)。我的目标是将数据集分成 100 个部分,立即读取每个部分并应用 fit() 方法。

我的问题:在每次迭代中, fit() 是否方法从我在模型编译期间设置的初始学习率(lr=0.1)开始?或者它会记住上次更新的学习率并将其直接应用于 fit() 的新调用。 方法。

我的代码示例如下:

# Define model
my_model()

# Set the optimizer
sgd = SGD(lr=0.1, decay=1e-08, momentum=0.9, nesterov=False)

# Compile model
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

# Fit model and train
for j in range(100):
print('Data extracting from big matrix ...')
X_train = HDF5Matrix(path_train, 'X', start=st, end=ed)
Y_train = HDF5Matrix(path_train, 'y', start=st, end=ed)

print('Fitting model ...')
model.fit(X_train, Y_train, batch_size=100, shuffle='batch', nb_epoch=1,
validation_data=(X_test, Y_test))

最佳答案

更新后的学习率会被记录在优化器对象model.optimizer中,它就是示例中的sgd变量。

LearningRateScheduler 等回调中,学习率变量 model.optimizer.lr 会更新(为了清楚起见,删除了一些行)。

def on_epoch_begin(self, epoch, logs=None):
lr = self.schedule(epoch)
K.set_value(self.model.optimizer.lr, lr)

但是,当使用decay时(如您的示例中所示),学习率变量不会直接更新,而是更新变量model.optimizer.iterations。该变量记录了模型拟合中使用了多少批处理,并且衰减的学习率在 SGD.get_updates() 中通过以下方式计算:

lr = self.lr
if self.initial_decay > 0:
lr *= (1. / (1. + self.decay * K.cast(self.iterations,
K.dtype(self.decay))))

因此,无论哪种情况,只要模型不重新编译,它就会在新的 fit() 调用中使用更新的学习率。

关于machine-learning - 迭代应用 keras 模型 fit() 时的学习率状态如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com