model.compile()用来配置模型的优化器、损失函数,评估指标等

里面的具体参数有:

compile(optimizer='rmsprop',loss=None,metrics=None,loss_weights=None,weighted_metrics=None,run_eagerly=None,steps_per_execution=None,jit_compile=None,**kwargs
)

我们一帮需要设置的就只有前三个参数,

一. optimizer设置优化器

没有衰减率的一般是在整个更新过程中学习率不改变,有衰减率的就是自适应学习率的优化器,就是在更新参数过程中,学习率能根据梯度自己改变。
这里的学习率改变好像是针对的这一轮中的学习率,在下一个epoch中学习率又会变成没变化之前的值。例如某一轮的学习率为0.001,在这一轮训练过程中学习率可能会变化,但是下一轮开始时学习率是0.001,也就是变化不带入下一轮训练,如果想要改变学习率,就在回调函数里设置学习率衰减方式才能改变 (不知道我说的对不对,我也不是很明白,有错误的话请大哥批评指正

tf.keras.optimizers中有很多优化器供我们选择:

  1. tf.keras.optimizers.Adadelta
tf.keras.optimizers.Adadelta(learning_rate=0.001, #初始学习率rho=0.95, # 衰减率epsilon=1e-07, #加在分母避免出现除以0的情况name='Adadelta',**kwargs
)
  1. tf.keras.optimizers.Adagrad
tf.keras.optimizers.Adagrad(learning_rate=0.001, #初始学习率initial_accumulator_value=0.1, #动量值epsilon=1e-07,name='Adagrad',**kwargs
)
  1. tf.keras.optimizers.Adam

Adam优化是一种基于一阶和二阶矩自适应估计的随机梯度下降方法。
根据Kingma et al.,2014的说法,该方法“计算效率高,几乎不需要内存,对梯度的对角线重新缩放不变性,非常适合于数据/参数较大的问题”。

tf.keras.optimizers.Adam(learning_rate=0.001, #初始学习率beta_1=0.9, #一阶矩估计的衰减率beta_2=0.999, #二阶矩估计的衰减率epsilon=1e-07,amsgrad=False,name='Adam',**kwargs
)
  1. tf.keras.optimizers.RMSprop
    利用了梯度的均方
tf.keras.optimizers.RMSprop(learning_rate=0.001,rho=0.9, #衰减率momentum=0.0, #动量epsilon=1e-07,centered=False,name='RMSprop',**kwargs
)
  1. tf.keras.optimizers.SGD
    SGD就是每一次迭代计算mini-batch的梯度,然后对参数进行更新,是最常见的优化方法了。缺点还挺大的,
tf.keras.optimizers.SGD(learning_rate=0.01,momentum=0.0,nesterov=False,name='SGD',**kwargs
)

二. loss设置损失函数

  1. tf.keras.losses.BinaryCrossentropy为二分类交叉熵损失函数
    计算公式为:

    yi为第i个的真实标签,p(xi)为第i个预测正确的概率,当输出的预测值不是概率时,我们需要将from_logits参数设置为True,它会将预测值转换为概率,如果预测值是概率的话,就设置为False
tf.keras.losses.BinaryCrossentropy(from_logits=False,label_smoothing=0.0,axis=-1,reduction=losses_utils.ReductionV2.AUTO,name='binary_crossentropy'
)
import tensorflow as tfy_true = [0, 1, 0, 0]
y_pred = [-18.6, 0.51, 2.94, -12.8]
bce = tf.keras.losses.BinaryCrossentropy(from_logits=True)
print(bce(y_true, y_pred))L = 0
for i in range(4):y_pred[i] = 1.0/(1+tf.math.exp(-1*y_pred[i]))L += y_true[i]*tf.math.log(y_pred[i]) + (1-y_true[i])*tf.math.log(1-y_pred[i])print(-1*L/4)

输出:

2. tf.keras.losses.BinaryFocalCrossentropy
Focal loss主要用来解决样本不均衡问题,引入了一个聚焦因子和loss相乘。
如果真实标签为1,聚焦因子为 focal_factor = (1 - output) ^ gamma
如果真是标签为0,聚焦因子为 focal_factor = ( output) ^ gamma
output为输出概率:
当gamma为0时,就成了BinaryCrossentropy。
参数:

tf.keras.losses.BinaryFocalCrossentropy(gamma=2.0,from_logits=False,label_smoothing=0.0,axis=-1,reduction=losses_utils.ReductionV2.AUTO,name='binary_focal_crossentropy'
)

具体实现过程:

import tensorflow as tfy_true = [0, 1, 0, 0]
y_pred = [-18.6, 0.51, 2.94, -12.8]
bce = tf.keras.losses.BinaryFocalCrossentropy(gamma=2.0, from_logits=True)
print(bce(y_true, y_pred))
L = 0for i in range(4):y_pred[i] = 1.0/(1+tf.math.exp(-1*y_pred[i]))L += tf.math.pow((1.0-y_pred[i]),2)*y_true[i]*tf.math.log(y_pred[i]) + tf.math.pow(y_pred[i],2)*(1-y_true[i])*tf.math.log(1-y_pred[i])print(-1*L/4)

输出:

3. tf.keras.losses.CategoricalCrossentropy 多分类交叉熵损失函数
y_trueOne-Hot 编码时使用CategoricalCrossentropy
y_true整数编码时使用SparseCategoricalCrossentropy

tf.keras.losses.CategoricalCrossentropy(from_logits=False,label_smoothing=0.0,axis=-1,reduction=losses_utils.ReductionV2.AUTO,name='categorical_crossentropy'
)

tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False,reduction=losses_utils.ReductionV2.AUTO,name='sparse_categorical_crossentropy'
)


还有很多其他损失函数。。。。。

三、metrics设置评估指标

常用的分类指标有准确率、精度等,添加进去就会在训练过程中实时打印这些指标。
metrics=[tf.keras.metrics.Accuracy(),tf.keras.metrics.Precision()]
例外也可以自定义一些函数添加进去,例如想打印学习率:

def get_lr_metric(optimizer):def lr(y_true, y_pred):return optimizer.lrreturn lroptimizer = Adam(learning_rate=lr)
lr_metric = get_lr_metric(optimizer)model.compile(loss=tf.keras.losses.categorical_crossentropy,optimizer=optimizer,metrics=['accuracy', lr_metric])

这样就可以打印了。

tensorflow的API里函数太多了。。。。。

tensorflow中model.compile()相关推荐

  1. model.compile中metrics的参数accuracy

    知乎大佬链接 model.compile(optimizer = tf.keras.optimizers.Adam(0.01),loss = tf.keras.losses.SparseCategor ...

  2. tensorflow model.compile() 示例

    model.compile()方法用于在配置训练方法时,告知训练时用的优化器.损失函数和准确率评测标准 model.compile(optimizer=tf.keras.optimizers.Adam ...

  3. Tensorflow中Sequential model

    sequential模型适用于简单堆叠网络层(a plain stack of layers),及每一层只有一个输入和一个输出: 不推荐使用建议使用函数式,子类模型 几种创建sequential模型的 ...

  4. TensorFlow中的Fashion MNIST图像识别实战

    1.导入相应的库: 关于Fashion MNIST数据集的介绍:看这位博主: https://blog.csdn.net/qq_28869927/article/details/85079808 im ...

  5. TensorFlow中的ResNet残差网络实战(1)

    1.导入相应的库 import os import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from t ...

  6. 【tf.keras】tf.keras使用tensorflow中定义的optimizer

    我的 tensorflow+keras 版本: print(tf.VERSION) # '1.10.0' print(tf.keras.__version__) # '2.1.6-tf' tf.ker ...

  7. tensorflow包_在Keras和Tensorflow中使用深度卷积网络生成Meme(表情包)文本

    作者 | dylan wenzlau 来源 | Medium 编辑 | 代码医生团队 本文介绍如何构建深度转换网络实现端到端的文本生成.在这一过程中,包括有关数据清理,训练,模型设计和预测算法相关的内 ...

  8. SELU︱在keras、tensorflow中使用SELU激活函数

    arXiv 上公开的一篇 NIPS 投稿论文<Self-Normalizing Neural Networks>引起了圈内极大的关注,它提出了缩放指数型线性单元(SELU)而引进了自归一化 ...

  9. TensorFlow中的Keras用法和自定义模型和层

    Keras Keras 是一个用于构建和训练深度学习模型的高阶 API.它可用于快速设计原型.高级研究和生产,具有以下三个主要优势: 方便用户使用 Keras 具有针对常见用例做出优化的简单而一致的界 ...

最新文章

  1. scanf(%s,a)和gets(a)的差别
  2. 聚能聊每周精选 第二十三期
  3. VTK:PolyData之ConnectivityFilter_LargestRegion
  4. C#实现最简单的收银系统
  5. webpack基础入门
  6. 水晶报表分组分栏_web报表可视化设计器工具推荐
  7. sqlserver 2008阻止保存要求重新创建表的更改
  8. abap 创建出口历程_SAP ABAP第一,两,三代出口型BADI实现 解释的概念
  9. sourceTree初识
  10. The Number of Products
  11. jsp之建立一个九九乘法表
  12. curl 断点下载 wget下载
  13. Java开发的第一个开源项目
  14. java打飞机游戏完整代码
  15. JS,等额本息,等额本金计算器
  16. 解决安装虚拟机vmware无法打开注册表项的问题
  17. 移动OA,为企业提供更高效的办公模式
  18. 数学建模国赛美赛(MCM/ICM)赛前准备及比赛过程节奏分享
  19. 李建忠讲23种设计模式笔记-上
  20. Python学习 Day31 DOM

热门文章

  1. Windows Phone 宣告死亡,但为什么我们不感到遗憾?
  2. 2021.07.30丨snakemake常见问题汇总(上)
  3. 用Linux终端撩妹?
  4. 四川麻将纯AI算法------最优拆牌
  5. chrome应用开发API之chrome.fileSystem
  6. 用PYTHON脚本拆分M3U文件
  7. 记录电脑蓝屏错误0x00000019怎么解决
  8. VMware安装XP必须输入序列号的解决办法
  9. 如何在Google Chrome浏览器中更改主页
  10. Hive漏斗分析(计算转换率)