Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SWA应用哪个回调:AverageModelCheckpoint还是ModelCheckpoint?_Python_Tensorflow_Optimization_Callback_Tensorflow2.0 - Fatal编程技术网

Python 使用SWA应用哪个回调:AverageModelCheckpoint还是ModelCheckpoint?

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

我试图理解在使用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_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
可以保存权重,并可以选择将此平均权重指定给模型