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全不變,此時若是大于,則先終止了訓練,學習率無法改變。