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)
  • 这个优化器通常是训练循环神经网络R N N 的 不 错 选 择 \color{blue}RNN的不错选择R N N 的不错选择。参考文献

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

  1. Adam参数
  2. lr: float >= 0. 学习率。
  3. beta_1: float, 0 < beta < 1. 通常接近于 1。
  4. beta_2: float, 0 < beta < 1. 通常接近于 1。
  5. epsilon: float >= 0. 模糊因子. 若为 None, 默认为 K.epsilon()。
  6. decay: float >= 0. 每次参数更新后学习率衰减值。
  7. 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
  8. Adamax参数
  9. Adamax 优化器,来自 Adam 论文的第七小节.它是 Adam算法基于无穷范数(infinity norm)的变种。 默认参数遵循论文中提供的值。
  10. 参数
  11. lr: float >= 0. 学习率。
  12. beta_1/beta_2: floats, 0 < beta < 1. 通常接近于 1。
  13. epsilon: float >= 0. 模糊因子. 若为 None, 默认为 K.epsilon()。
  14. decay: float >= 0. 每次参数更新后学习率衰减值。 例如:其默认为:
    keras.optimizers.Adamax(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0)
  15. Nadam
  16. Nesterov 版本 Adam 优化器
  17. 正像 Adam 本质上是 RMSProp 与动量 momentum 的结合, Nadam 是采用 Nesterov momentum 版本的 Adam 优化器。
  18. 参数
  19. lr: float >= 0. 学习率。
  20. beta_1/beta_2: floats, 0 < beta < 1. 通常接近于 1。
  21. 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)

  22. loss

损失函数的目的是计 算 模 型 在 训 练 期 间 应 寻 求 最 小 化 的 数 量 \color{red}计算模型在训练期间应寻求最小化的数量计算模型在训练期间应寻求最小化的数量。loss可用参数

keras中model.compile()基本用法
简写:
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 and
    to abs(x) - log(2) for large x. This means that 'logcosh' works mostly
    like the mean squared error, but will not be so strongly affected by the
    occasional wildly incorrect prediction.

    # Arguments
        y_true: tensor of true targets.

        y_pred: tensor of predicted targets.

    # Returns
        Tensor 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)
  1. Matrics

  2. 评价函数用于评 估 当 前 训 练 模 型 的 性 能 \color{blue}评估当前训练模型的性能评估当前训练模型的性能。当模型编译后(compile),评价函数应该作为 metrics的参数来输入。

  3. 评价函数和 损失函数 相似,只不过评 价 函 数 的 结 果 不 会 用 于 训 练 过 程 中 \color{blue}评价函数的结果不会用于训练过程中评价函数的结果不会用于训练过程中。我们可以传递已有的评价函数名称,或者传递一个自定义的 Theano/TensorFlow 函数来使用。可用Matrics
    keras中model.compile()基本用法

; 3.1 keras内置的评价函数

  • binary_accuracy
binary_accuracy(y_true, y_pred)
  • categorical_accuracy
categorical_accuracy(y_true, y_pred)
  • sparse_categorical_accuracy
sparse_categorical_accuracy(y_true, y_pred)
  • top_k_categorical_accuracy
top_k_categorical_accuracy(y_true, y_pred, k=5)
  • sparse_top_k_categorical_accuracy
sparse_top_k_categorical_accuracy(y_true, y_pred, k=5)

3.2 自定义评价函数

自定义评价函数应该在编译的时候( compile)传递进去。该函数需要以 (y_true, y_pred) 作为输入参数,并返回一个张量作为输出结果。

import keras.backend as K

def mean_pred(y_true, y_pred):
    return K.mean(y_pred)

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy', mean_pred])

参考:

Original: https://blog.csdn.net/huang1024rui/article/details/120055487
Author: Paul-Huang
Title: keras中model.compile()基本用法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/625032/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球