tensorflow中model.compile()
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中有很多优化器供我们选择:
- tf.keras.optimizers.Adadelta
tf.keras.optimizers.Adadelta(learning_rate=0.001, #初始学习率rho=0.95, # 衰减率epsilon=1e-07, #加在分母避免出现除以0的情况name='Adadelta',**kwargs
)
- tf.keras.optimizers.Adagrad
tf.keras.optimizers.Adagrad(learning_rate=0.001, #初始学习率initial_accumulator_value=0.1, #动量值epsilon=1e-07,name='Adagrad',**kwargs
)
- 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
)
- 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
)
- tf.keras.optimizers.SGD
SGD就是每一次迭代计算mini-batch的梯度,然后对参数进行更新,是最常见的优化方法了。缺点还挺大的,
tf.keras.optimizers.SGD(learning_rate=0.01,momentum=0.0,nesterov=False,name='SGD',**kwargs
)
二. loss设置损失函数
- 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_true为One-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()相关推荐
- model.compile中metrics的参数accuracy
知乎大佬链接 model.compile(optimizer = tf.keras.optimizers.Adam(0.01),loss = tf.keras.losses.SparseCategor ...
- tensorflow model.compile() 示例
model.compile()方法用于在配置训练方法时,告知训练时用的优化器.损失函数和准确率评测标准 model.compile(optimizer=tf.keras.optimizers.Adam ...
- Tensorflow中Sequential model
sequential模型适用于简单堆叠网络层(a plain stack of layers),及每一层只有一个输入和一个输出: 不推荐使用建议使用函数式,子类模型 几种创建sequential模型的 ...
- TensorFlow中的Fashion MNIST图像识别实战
1.导入相应的库: 关于Fashion MNIST数据集的介绍:看这位博主: https://blog.csdn.net/qq_28869927/article/details/85079808 im ...
- TensorFlow中的ResNet残差网络实战(1)
1.导入相应的库 import os import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from t ...
- 【tf.keras】tf.keras使用tensorflow中定义的optimizer
我的 tensorflow+keras 版本: print(tf.VERSION) # '1.10.0' print(tf.keras.__version__) # '2.1.6-tf' tf.ker ...
- tensorflow包_在Keras和Tensorflow中使用深度卷积网络生成Meme(表情包)文本
作者 | dylan wenzlau 来源 | Medium 编辑 | 代码医生团队 本文介绍如何构建深度转换网络实现端到端的文本生成.在这一过程中,包括有关数据清理,训练,模型设计和预测算法相关的内 ...
- SELU︱在keras、tensorflow中使用SELU激活函数
arXiv 上公开的一篇 NIPS 投稿论文<Self-Normalizing Neural Networks>引起了圈内极大的关注,它提出了缩放指数型线性单元(SELU)而引进了自归一化 ...
- TensorFlow中的Keras用法和自定义模型和层
Keras Keras 是一个用于构建和训练深度学习模型的高阶 API.它可用于快速设计原型.高级研究和生产,具有以下三个主要优势: 方便用户使用 Keras 具有针对常见用例做出优化的简单而一致的界 ...
最新文章
- scanf(%s,a)和gets(a)的差别
- 聚能聊每周精选 第二十三期
- VTK:PolyData之ConnectivityFilter_LargestRegion
- C#实现最简单的收银系统
- webpack基础入门
- 水晶报表分组分栏_web报表可视化设计器工具推荐
- sqlserver 2008阻止保存要求重新创建表的更改
- abap 创建出口历程_SAP ABAP第一,两,三代出口型BADI实现 解释的概念
- sourceTree初识
- The Number of Products
- jsp之建立一个九九乘法表
- curl 断点下载 wget下载
- Java开发的第一个开源项目
- java打飞机游戏完整代码
- JS,等额本息,等额本金计算器
- 解决安装虚拟机vmware无法打开注册表项的问题
- 移动OA,为企业提供更高效的办公模式
- 数学建模国赛美赛(MCM/ICM)赛前准备及比赛过程节奏分享
- 李建忠讲23种设计模式笔记-上
- Python学习 Day31 DOM