日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

keras中model.compile()基本用法

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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可用參數

    簡寫:

    mse = MSE = mean_squared_error # 均方誤差 mae = MAE = mean_absolute_error # 平均絕對誤差 mape = MAPE = mean_absolute_percentage_error # 平均絕對百分比誤差 msle = MSLE = mean_squared_logarithmic_error # 均方對數誤差 kld = KLD = kullback_leibler_divergence # cosine = cosine_proximity # 余弦值

    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

  • 評價函數用于評估當前訓練模型的性能\color{blue}評估當前訓練模型的性能。當模型編譯后(compile),評價函數應該作為 metrics的參數來輸入。
  • 評價函數和 損失函數 相似,只不過評價函數的結果不會用于訓練過程中\color{blue}評價函數的結果不會用于訓練過程中。我們可以傳遞已有的評價函數名稱,或者傳遞一個自定義的 Theano/TensorFlow 函數來使用??捎肕atrics
  • 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()基本用法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。