天天看點

【深度學習】kears學習筆記(二)

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

繼續閱讀