keras中model.compile()基本用法
1. compile參數介紹
model.compile(optimizer, loss = None, metrics = None, loss_weights = None, sample_weight_mode = None, weighted_metrics = None, target_tensors = None )- optimizer:優化器,用于控制梯度裁剪。必選項
- loss:損失函數(或稱目標函數、優化評分函數)。必選項
- metrics:評價函數用于評估當前訓練模型的性能。當模型編譯后(compile),評價函數應該作為 metrics 的參數來輸入。評價函數和損失函數相似,只不過評價函數的結果不會用于訓練過程中。
在使用過程中常用的就是這三個參數。
1. optimizer
optimizer中文文檔
- 可以先實例化一個優化器對象,然后將它傳入 model.compile();from keras import optimizers model = Sequential() model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,))) model.add(Activation('softmax')) sgd = optimizers.SGD(lr=0.01, clipvalue=0.5) model.compile(optimizer=sgd,loss='mse')
- 可以通過名稱來調用優化器。但是使用優化器的默認參數。# 傳入優化器名稱: 默認參數將被采用 model.compile(loss='mean_squared_error', optimizer='sgd')
1.1 optimizer可用參數-SGD
SGD:隨機梯度下降優化器\color{blue}隨機梯度下降優化器隨機梯度下降優化器。包含擴展功能的支持:
- 學習率learning rate (lr)
- 動量(momentum)優化,
- 學習率衰減(每次參數更新后)
- Nestrov 動量 (NAG) 優化。
- lr: float >= 0. 學習率。
- momentum : float>= 0. 參數,用于加速 SGD 在相關方向上前進,并抑制震蕩。
- decay: float >= 0. 每次參數更新后學習率衰減值。
- nesterov: boolean. 是否使用 Nesterov 動量。
例如:
python keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
1.2 optimizer可用參數-RMSprop
- RMSprop:RMSProp 優化器是AdaGrad算法的一種改進。將梯度除以最近幅度的移動平均值\color{blue}將梯度除以最近幅度的移動平均值將梯度除以最近幅度的移動平均值。
- lr: float >= 0. 學習率。
- rho: float >= 0. RMSProp梯度平方的移動均值的衰減率.
- epsilon: float >= 0. 模糊因子. 若為 None, 默認為 K.epsilon()。
- decay: float >= 0. 每次參數更新后學習率衰減值。
例如: keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)
- 這個優化器通常是訓練循環神經網絡RNN的不錯選擇\color{blue}RNN的不錯選擇RNN的不錯選擇。參考文獻
1.3 optimizer可用參數 - Adagrad
-
Adagrad 是一種具有特定參數學習率的優化器,根據參數在訓練期間的更新頻率進行自適應調整\color{blue}根據參數在訓練期間的更新頻率進行自適應調整根據參數在訓練期間的更新頻率進行自適應調整。參數接收的更新越多,更新越小。
- lr: float >= 0. 學習率。
- epsilon: float >= 0. 模糊因子.若為 None, 默認為 K.epsilon()。
- decay: float >= 0. 每次參數更新后學習率衰減值。
例如:keras.optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0)
-
建議使用優化器的默認參數。參考文獻
1.4 optimizer可用參數 - Adadelta
- Adadelta 是 Adagrad 的一個具有更強魯棒性的的擴展版本,它是根據漸變更新的移動窗口調整學習速率\color{blue}根據漸變更新的移動窗口調整學習速率根據漸變更新的移動窗口調整學習速率。
- lr: float >= 0. 學習率,建議保留默認值。
- rho: float >= 0. Adadelta梯度平方移動均值的衰減率。
- epsilon: float >= 0. 模糊因子. 若為 None, 默認為 K.epsilon()。
- decay: float >= 0. 每次參數更新后學習率衰減值。
- 詳細閱讀:參考文獻
1.5 optimizer可用參數 - Adam/Adamax/Nadam
Adam參數
- lr: float >= 0. 學習率。
- beta_1: float, 0 < beta < 1. 通常接近于 1。
- beta_2: float, 0 < beta < 1. 通常接近于 1。
- epsilon: float >= 0. 模糊因子. 若為 None, 默認為 K.epsilon()。
- decay: float >= 0. 每次參數更新后學習率衰減值。
- amsgrad: boolean. 是否應用此算法的 AMSGrad 變種,來自論文 “On the Convergence of Adam and Beyond”。
例如:其默認為:
python keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
參考:Adam - A Method for Stochastic Optimization
Adamax參數
- Adamax 優化器,來自 Adam 論文的第七小節.它是Adam算法基于無窮范數(infinity norm)的變種。 默認參數遵循論文中提供的值。
- 參數
- lr: float >= 0. 學習率。
- beta_1/beta_2: floats, 0 < beta < 1. 通常接近于 1。
- epsilon: float >= 0. 模糊因子. 若為 None, 默認為 K.epsilon()。
- decay: float >= 0. 每次參數更新后學習率衰減值。
例如:其默認為:
keras.optimizers.Adamax(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0)
Nadam
- Nesterov 版本 Adam 優化器。
- 正像 Adam 本質上是 RMSProp 與動量 momentum 的結合, Nadam 是采用 Nesterov momentum 版本的 Adam 優化器。
- 參數
- lr: float >= 0. 學習率。
- beta_1/beta_2: floats, 0 < beta < 1. 通常接近于 1。
- epsilon: float >= 0. 模糊因子. 若為 None, 默認為 K.epsilon()。
例如:其默認為:
keras.optimizers.Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, schedule_decay=0.004)
2. loss
損失函數的目的是計算模型在訓練期間應尋求最小化的數量\color{red}計算模型在訓練期間應尋求最小化的數量計算模型在訓練期間應尋求最小化的數量。loss可用參數
簡寫:
2.1 mean_squared_error:均方誤差
def mean_squared_error(y_true, y_pred):return K.mean(K.square(y_pred - y_true), axis=-1)2.2 mean_absolute_error:平均絕對誤差
def mean_absolute_error(y_true, y_pred):return K.mean(K.abs(y_pred - y_true), axis=-1)2.3 mean_absolute_percentage_error:平均絕對百分比誤差
def mean_absolute_percentage_error(y_true, y_pred):diff = K.abs((y_true - y_pred) / K.clip(K.abs(y_true),K.epsilon(),None))return 100. * K.mean(diff, axis=-1)2.4 mean_squared_logarithmic_error:均方對數誤差
def mean_squared_logarithmic_error(y_true, y_pred):first_log = K.log(K.clip(y_pred, K.epsilon(), None) + 1.)second_log = K.log(K.clip(y_true, K.epsilon(), None) + 1.)return K.mean(K.square(first_log - second_log), axis=-1)2.5 squared_hinge
def squared_hinge(y_true, y_pred):return K.mean(K.square(K.maximum(1. - y_true * y_pred, 0.)), axis=-1)2.6 hinge
def hinge(y_true, y_pred):return K.mean(K.maximum(1. - y_true * y_pred, 0.), axis=-1)2.7 categorical_hinge
def categorical_hinge(y_true, y_pred):pos = K.sum(y_true * y_pred, axis=-1)neg = K.max((1. - y_true) * y_pred, axis=-1)return K.maximum(0., neg - pos + 1.)2.8 logcosh
logcosh:預測誤差的雙曲余弦的對數。
def logcosh(y_true, y_pred):'''Logarithm of the hyperbolic cosine of the prediction error.`log(cosh(x))` is approximately equal to `(x ** 2) / 2` for small `x` andto `abs(x) - log(2)` for large `x`. This means that 'logcosh' works mostlylike the mean squared error, but will not be so strongly affected by theoccasional wildly incorrect prediction.# Argumentsy_true: tensor of true targets.y_pred: tensor of predicted targets.# ReturnsTensor with one scalar loss entry per sample.'''def _logcosh(x):return x + K.softplus(-2. * x) - K.log(2.)return K.mean(_logcosh(y_pred - y_true), axis=-1)2.9 categorical_crossentropy
categorical_crossentropy:分類交叉熵。
def categorical_crossentropy(y_true, y_pred):return K.categorical_crossentropy(y_true, y_pred)2.10 sparse_categorical_crossentropy
sparse_categorical_crossentropy:稀疏的分類交叉熵。
def sparse_categorical_crossentropy(y_true, y_pred):return K.sparse_categorical_crossentropy(y_true, y_pred)2.11 binary_crossentropy
binary_crossentropy:二元交叉熵。
def binary_crossentropy(y_true, y_pred):return K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)2.12 kullback_leibler_divergence
def kullback_leibler_divergence(y_true, y_pred):y_true = K.clip(y_true, K.epsilon(), 1)y_pred = K.clip(y_pred, K.epsilon(), 1)return K.sum(y_true * K.log(y_true / y_pred), axis=-1)2.13 poisson
poisson:泊松。
def poisson(y_true, y_pred):return K.mean(y_pred - y_true * K.log(y_pred + K.epsilon()), axis=-1)2.14 cosine_proximity
cosine_proximity:余弦值。
def cosine_proximity(y_true, y_pred):y_true = K.l2_normalize(y_true, axis=-1)y_pred = K.l2_normalize(y_pred, axis=-1)return -K.sum(y_true * y_pred, axis=-1)3. Matrics
3.1 keras內置的評價函數
- binary_accuracybinary_accuracy(y_true, y_pred)
- categorical_accuracycategorical_accuracy(y_true, y_pred)
- sparse_categorical_accuracysparse_categorical_accuracy(y_true, y_pred)
- top_k_categorical_accuracytop_k_categorical_accuracy(y_true, y_pred, k=5)
- sparse_top_k_categorical_accuracysparse_top_k_categorical_accuracy(y_true, y_pred, k=5)
3.2 自定義評價函數
自定義評價函數應該在編譯的時候(compile)傳遞進去。該函數需要以 (y_true, y_pred) 作為輸入參數,并返回一個張量作為輸出結果。
import keras.backend as Kdef mean_pred(y_true, y_pred):return K.mean(y_pred)model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy', mean_pred])參考:
- keras_7_評估標準 Metrics
- compile參數詳解
總結
以上是生活随笔為你收集整理的keras中model.compile()基本用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星 联通 i9502 4.3root
- 下一篇: 电信说的几兆带宽和自己看到的下载/上传速