Python 使用SWA应用哪个回调:AverageModelCheckpoint还是ModelCheckpoint?
我试图理解在使用SWA()时使用回调和不使用回调的区别。因此,我有两个实现,它们都工作得很好。但是,我不确定两者之间的区别。第一种是没有swa回调:Python 使用SWA应用哪个回调:AverageModelCheckpoint还是ModelCheckpoint?,python,tensorflow,optimization,callback,tensorflow2.0,Python,Tensorflow,Optimization,Callback,Tensorflow2.0,我试图理解在使用SWA()时使用回调和不使用回调的区别。因此,我有两个实现,它们都工作得很好。但是,我不确定两者之间的区别。第一种是没有swa回调: optimizer = tf.keras.optimizers.Adam(learning_rate=.01, beta_1=0.9, beta_2=0.999) opt = tfa.optimizers.SWA(optimizer, start_averaging=start_epoch, average_p
optimizer = tf.keras.optimizers.Adam(learning_rate=.01, beta_1=0.9, beta_2=0.999)
opt = tfa.optimizers.SWA(optimizer, start_averaging=start_epoch,
average_period=1, lr=0.005)
model.compile(loss=lossFunction, optimizer=opt, metrics=['accuracy'])
print(model.summary())
# simple early stopping
es = tf.keras.callbacks.EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=20)
mc = tf.keras.callbacks.ModelCheckpoint(checkpointFilePath, monitor='val_accuracy',
mode='max', verbose=1, save_best_only=True)
history = model.fit(trainX, trainy, validation_data=(valX, valy),
batch_size=batch_size,
epochs=epochs, verbose=0, callbacks=[es, mc])
swa = tfa.callbacks.AverageModelCheckpoint(filepath=checkpointFilePath,
update_weights=True)
第二个是相同的,只是它有一个额外的回调:
optimizer = tf.keras.optimizers.Adam(learning_rate=.01, beta_1=0.9, beta_2=0.999)
opt = tfa.optimizers.SWA(optimizer, start_averaging=start_epoch,
average_period=1, lr=0.005)
model.compile(loss=lossFunction, optimizer=opt, metrics=['accuracy'])
print(model.summary())
# simple early stopping
es = tf.keras.callbacks.EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=20)
mc = tf.keras.callbacks.ModelCheckpoint(checkpointFilePath, monitor='val_accuracy',
mode='max', verbose=1, save_best_only=True)
history = model.fit(trainX, trainy, validation_data=(valX, valy),
batch_size=batch_size,
epochs=epochs, verbose=0, callbacks=[es, mc])
swa = tfa.callbacks.AverageModelCheckpoint(filepath=checkpointFilePath,
update_weights=True)
添加swa回调时,最后一行更改如下:
history = model.fit(trainX, trainy, validation_data=(valX, valy),
batch_size=batch_size,
epochs=epochs, verbose=0, callbacks=[es, mc, swa])
我的问题是这两种实现之间的区别是什么?如果有,哪一个更好?通过
ModelCheckpoint
回调,您可以每隔一段时间保存一个模型或其权重。如果希望以后加载权重以从保存的状态继续训练,则此选项非常有用
但是,使用
ModelCheckpoint
时,您不能在某个时间间隔保存移动平均权重。也就是说,模型平均优化器需要一个自定义回调来保存权重。使用AverageModelCheckpoint
可以保存权重,并可以选择将此平均权重分配给模型。使用ModelCheckpoint
回调,可以每隔一段时间保存模型或其权重。如果希望以后加载权重以从保存的状态继续训练,则此选项非常有用
但是,使用ModelCheckpoint
时,您不能在某个时间间隔保存移动平均权重。也就是说,模型平均优化器需要一个自定义回调来保存权重。使用AverageModelCheckpoint
可以保存权重,并可以选择将此平均权重指定给模型