1.one-hot编码
from tensorflow.keras.utils import to_categorical
y_train = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y_train = to_categorical(y_train, num_classes=10)
print(type(y_train))
num_classes:设定的类别个数,相当于把每个样本编码成num_classes位二进制,默认为y_train中最大值加1。
2.EarlyStopping
tf.keras.callbacks.EarlyStopping(
monitor="val_loss",
min_delta=0,
patience=0,
verbose=0,
mode="auto",
baseline=None,
restore_best_weights=False,
)
在model.fit()
训练过程中,每次迭代完监视器会查看loss是否不再改变,如果连续patience
次loss都不再改变,那么训练将会终止。
3.ReduceLROnPlateau(减小学习率)
tf.keras.callbacks.ReduceLROnPlateau(
monitor="val_loss",
factor=0.1,
patience=10,
verbose=0,
mode="auto",
min_delta=0.0001,
cooldown=0,
min_lr=0,
**kwargs
)
monitor:监控指标,默认为loss
factor: 学习率乘子,new_lr = lr * factor
min_lr:学习率下限
model:可取值{'auto','min','max'}
之一。在“min"
模式下,当监测的指标停止减少时,学习率将降低;“max”
模式下,当监测的指标停止增加时,学习率将降低;“auto”
模式下,将根据监测指标的名称自动推断方向。
patience:多少次迭代后更新学习率
举个栗子:
model.compile(optimizer=adam, loss='binary_crossentropy',
metrics=['accuracy'])
early_stopping = EarlyStopping(
monitor="loss",
patience=10
)
red_lr = ReduceLROnPlateau(
monitor="loss",
patience=5,
factor=0.1,
min_lr=1e-5,
model="min"
)
print("Training-------------")
model.fit(x_train, y_train, epochs=100, batch_size=8, callbacks=[early_stopping, red_lr])
print("Testing--------------")
model.evaluate(x_test, y_test)
个人认为,ReduceLROnPlateau
中参数patience
应当小于EarlyStopping
中的参数patience
,否则永远不可能执行学习率减小函数,一旦连续patience次的loss全不变,此时若是大于,则先终止了训练,学习率无法改变。