from_logits

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


tensorflow 2.0 画出model网络模型的拓扑图 

tensorflow 2.0 的回调函数callbacks(TensorBoard、ModelCheckpoint)

TensorBoard视觉化网络每层权重分布、视觉化网络层结构

MSE(均方误差)、MAE(平均绝对误差)

from_logits

CE(Cross-Entropy)、BCE(Binary Cross-Entropy 即Sigmoid+CE)、CCE(Categorical Cross-Entropy 即Softmax+CE)

对连续值/离散值进行预处理的两种方式(标准化/one-hot化)、反标准化/逆标准化、字符串预处理

损失函数loss、指标函数metrics

激活函数 Sigmoid、Tanh、ReLU、Softmax

Batch Normalization

反向传播、梯度下降、学习率、优化器optimizers(GD、SGD、Momentum、AdaGrad、Adam)

权重初始化对于激活函数的选择:随机常态分布/随机正态分布初始化(标准差为0.01或1)、Xavier(Glorot)初始化、He初始化

图像增强(IA)、数据预处理

混淆矩阵tf.math.confusion_matrix

使用预训练网络训练的两种方式:Keras Applications、TensorFlow Hub


import tensorflow as tf
help(tf.losses.categorical_crossentropy) 
	查看categorical_crossentropy函数的默认参数列表和使用方法介绍
 	其中形参默认为from_logits=False,网络预测值y_pred 表示必须为经过了 Softmax函数的输出值。
	当 from_logits 设置为 True 时,网络预测值y_pred 表示必须为还没经过 Softmax 函数的变量 z。
	from_logits=True 标志位将softmax激活函数实现在损失函数中,便不需要手动添加softmax损失函数,提升数值计算稳定性。
	from_logits 指的就是是否有经过Logistic函数,常见的Logistic函数包括Sigmoid、Softmax函数。

Help on function categorical_crossentropy in module tensorflow.python.keras.losses:
categorical_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0) 
    Computes the categorical crossentropy loss.
    Args:
      y_true: tensor of true targets.
      y_pred: tensor of predicted targets.
      from_logits: Whether `y_pred` is expected to be a logits tensor. By default,
        we assume that `y_pred` encodes a probability distribution.
1.BCE(Binary Cross-Entropy 实际即Sigmoid激活+CE)
	1.import tensorflow as tf
	  help(tf.losses.binary_crossentropy) 
	  打印信息如下 binary_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)
 
	2.from tensorflow import keras
	  help(keras.losses.BinaryCrossentropy()) 
	  打印信息如下 class BinaryCrossentropy(LossFunctionWrapper)
			BinaryCrossentropy(from_logits=False, label_smoothing=0, reduction='auto', name='binary_crossentropy')
 
2.CCE(Categorical Cross-Entropy 实际即Softmax激活+CE) 
	1.import tensorflow as tf
	help(tf.losses.categorical_crossentropy) 
	打印信息如下 categorical_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)

	2.from tensorflow import keras
	  help(keras.losses.CategoricalCrossentropy()) 
	  打印信息如下 class CategoricalCrossentropy(LossFunctionWrapper)
			CategoricalCrossentropy(from_logits=False, label_smoothing=0, reduction='auto', name='categorical_crossentropy')

3.不论是BCE(Binary Cross-Entropy)还是CCE(Categorical Cross-Entropy),其中的from_logits参数都默认为False。
	from_logits=False:BCE(Binary Cross-Entropy)损失函数不会内建Sigmoid激活函数运算,CCE(Categorical Cross-Entropy)损失函数不会内建Softmax激活函数运算。
	from_logits=True:BCE(Binary Cross-Entropy)损失函数内建了Sigmoid激活函数运算,CCE(Categorical Cross-Entropy)损失函数内建了Softmax激活函数运算。
  	如果使用默认的from_logits=False,则网络输出层需要加上Sigmoid/Softmax激活函数运算。
	如果使用 from_logits=True,则网络输出层无需加上Sigmoid/Softmax激活函数运算,因为要避免输出连续做两次Sigmoid/Softmax激活函数运算。

4.例子:网络输出层没有使用Sigmoid激活函数,便可以设置from_logits=True,在BCE(BinaryCrossentropy)中自动内建Sigmoid激活函数
		model.compile(keras.optimizers.Adam(0.001), 
			     loss=keras.losses.BinaryCrossentropy(from_logits=True), 
			     metrics=[keras.metrics.BinaryAccuracy()])

5.例子:网络输出层没有使用Softmax激活函数,便可以设置from_logits=True,在CCE(CategoricalCrossentropy)中自动内建Softmax激活函数
		model.compile(keras.optimizers.Adam(0.001), 
			     loss=keras.losses.CategoricalCrossentropy(from_logits=True), 
			     metrics=[keras.metrics.CategoricalAccuracy()])
1.tensorflow中经常看到logits,指的就是Logistic(注意逻辑回归Logistic Regression指的是分类问题,并非是指回归问题,而回归问题是预测一个连续的数值)。
  而from_logits指的就是是否有经过Logistic函数,常见的Logistic函数包括Sigmoid、Softmax函数。
2.逻辑回归Logistic Regression指的是分类问题,并非是指回归问题,而回归问题是预测一个连续的数值。
  回归问题一般使用MSE作为损失函数,二分类的分类问题一般使用BCE(Binary Cross-Entropy)作为损失函数,
  多分类的分类问题一般使用CCE(Categorical Cross-Entropy)作为损失函数,BCE和CCE两者的公式上有些不同,但本质都是一样,都可以使用CE作为统称。
  分类问题中的模型预测输出一般都会首先经过Sigmoid或Softmax激活函数。
3.常见的激活函数包括Sigmoid、Tanh、ReLU、Softmax。
  ReLU 一般可用在每个隐藏层或输出层的后面作为非线性输出。
  Sigmoid和Tanh如果作为神经网络中的隐藏层的激活函数的话,都有可能造成梯度消失的问题,所以隐藏层的激活函数一般推荐使用ReLU,不推荐使用Sigmoid和Tanh。
  Sigmoid一般只用在输出层中,而不能用在隐藏层中,因为网络层数太深时使用Sigmoid作为隐藏层的非线性输出的话容易导致梯度消失,使得网络难以更新,
  而ReLU 则能有效避免梯度消失问题,Softmax也一般用在输出层中。
  比如二分类的逻辑回归模型中的输出层末尾一般都加上Sigmoid,那么输出值将介于0到1之间,分别代表两个不同分类。
  比如多分类的逻辑回归模型中的输出层末尾一般都加上Softmax,那么全部输出值的总和将等于1,代表了所有不同分类的概率值的总和等于1。
  下面举例在反向传播中经过多个隐藏层的Sigmoid,首先因为Sigmoid的导函数最大值为f(0)=0.25,也就是说当反向传播中每经过一层隐藏层的Sigmoid时,
  其梯度值都要乘上0.25,代表每经过一次其梯度值就要被衰减0.25倍,如果反向传播中需要经过五层隐藏层的Sigmoid的话,那么其梯度值一共至少会被衰减0.25的5次方的倍数。
  那么将造成神经网络前面的几层的权重将很难被更新,同理Tanh也存在类似的状况,因此大多数的隐藏层的激活函数都使用ReLU,
  另外ReLU的计算速度也比Sigmoid和Tanh还要快上许多。

from_logits_第1张图片


tf.keras.losses.SparseCategoricalCrossentropy 

# 损失基本计算方法为稀疏类别交叉熵损失
# from_logits=True代表是否将预测结果预期为非 0/1 的值进行保留
# 理论来讲二分类最终的结果应该只有0/1,函数将自动将其变为0/1,from_logits=True后,值不会被改变
# reduction='none',接下来我们将自定义损失函数,reduction必须设置为None,
# 我们可以将它看作是自定义损失函数的识别属性
loss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True, reduction='none')

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

from_logits: 
    y_pred是否预期为对数张量。 默认情况下,我们假设y_pred编码概率分布。 
    注意:使用from_logits = True可能在数值上更稳定。
    import tensorflow as tf
    help(tf.losses.categorical_crossentropy) 
        查看categorical_crossentropy函数的默认参数列表和使用方法介绍
        其中形参默认为from_logits=False,网络预测值y_pred 表示必须为经过了 Softmax函数的输出值。
        当 from_logits 设置为 True 时,网络预测值y_pred 表示必须为还没经过 Softmax 函数的变量 z。
        from_logits=True 标志位将softmax激活函数实现在损失函数中,便不需要手动添加softmax损失函数,提升数值计算稳定性。
        from_logits 指的就是是否有经过Logistic函数,常见的Logistic函数包括Sigmoid、Softmax函数。
        
reduction: 
    (可选的) 
    tf.keras.losses.reduction的类型,适用于损失。 默认值为自动。 AUTO表示减少选项将由使用情况决定。 
    在几乎所有情况下,该默认值均为SUM_OVER_BATCH_SIZE。 
    与tf.distribute.Strategy一起使用时,在诸如tf.keras之类的内置训练循环之外,使用AUTO或SUM_OVER_BATCH_SIZE会引发错误。
    
    1.reduction='none':
        默认值为losses_utils.ReductionV2.AUTO,即默认使用SUM_OVER_BATCH_SIZE的方式计算批量样本个数的loss的sum总和返回一个总和值。
        设置'none'代表将自定义损失函数,即自定义损失函数的识别属性,代表每个样本的loss均保留返回。
    2.reduction='none'
        打印loss为 Tensor("sparse_categorical_crossentropy_4/weighted_loss/Mul:0", shape=(64,), dtype=float32)
        shape=(64,) 代表每个样本的loss均保留返回。
    3.reduction=默认值losses_utils.ReductionV2.AUTO
        打印loss为 Tensor("sparse_categorical_crossentropy_7/weighted_loss/value:0", shape=(), dtype=float32)
        shape=() 代表默认使用SUM_OVER_BATCH_SIZE的方式计算批量样本个数的loss的sum总和,那么返回的loss只有一个总和值。
"""
SparseCategoricalCrossentropy
        1.loss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True, reduction='none')    
            SparseCategoricalCrossentropy稀疏类别交叉熵损失,自动将其中一方不是one-hot表示的数据转换为one-hot表示。
            from_logits=True:softmax激活函数实现在损失函数中,便不需要手动添加softmax损失函数
            reduction='none':
                默认值为losses_utils.ReductionV2.AUTO,即默认使用SUM_OVER_BATCH_SIZE的方式计算批量样本个数的loss的sum总和返回一个总和值。
                设置'none'代表将自定义损失函数,即自定义损失函数的识别属性,代表每个样本的loss均保留返回。
        2.reduction='none'
            打印loss为 Tensor("sparse_categorical_crossentropy_4/weighted_loss/Mul:0", shape=(64,), dtype=float32)
            shape=(64,) 代表每个样本的loss均保留返回。
        3.reduction=默认值losses_utils.ReductionV2.AUTO
            打印loss为 Tensor("sparse_categorical_crossentropy_7/weighted_loss/value:0", shape=(), dtype=float32)
            shape=() 代表默认使用SUM_OVER_BATCH_SIZE的方式计算批量样本个数的loss的sum总和,那么返回的loss只有一个总和值。

 

你可能感兴趣的:(TensorFlow,TensorFlow,2.0)