关于图片分类深度学习模型输出层、模型编译中的相关问题小结(基于tensorflow框架)

下面均以二分类问题为例子说明上述问题。

一、关于模型输出层激活函数的选择

如果样本序号使用的序号编码,如使用sklearn.preprocessing中的LabelEncoder样样本编码,那么输出层的激活函数应如下所示:

model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

预测值是1个值,一般人为小于0.5是第一个类,大于0.5是第二类;

如果使用独热编码OneHot Encoding,这输出的是1个列表包含两个值(这里是二分类),哪个值大就是属于哪个类别,其输出层激活函数应如下所示:

model.add(Dense(2, activation='softmax'))

其他多分类的也与此相同。

二、关键模型编译中精度评级指标和loss方法的选择

如果是二分类loss选择二元交叉熵 (binary crossentropy)即可,如果是多分类可以采用类别交叉熵 (categorical crossentropy)。

另外,模型编译中的metrics除了常用的‘accuracy’,还可以使用自定义metrics,比如F1-score指标,这需要先定义该指标评价函数:

def f1_score(yTrue, yPred):
    """
    计算F1 score.
    """
    tp = tf.keras.backend.sum(tf.keras.backend.round(tf.keras.backend.clip(yTrue * yPred, 0, 1)))
    # tn = tf.keras.backend.sum(tf.keras.backend.round(tf.keras.backend.clip((1 - yTrue) * (1 - yPred), 0, 1)))
    fp = tf.keras.backend.sum(tf.keras.backend.round(tf.keras.backend.clip((1 - yTrue) * yPred, 0, 1)))
    fn = tf.keras.backend.sum(tf.keras.backend.round(tf.keras.backend.clip(yTrue * (1 - yPred), 0, 1)))
    precision = tp / (tp + fp + tf.keras.backend.epsilon())
    recall = tp / (tp + fn + tf.keras.backend.epsilon())
    f1_score = 2 * precision * recall / (precision + recall + tf.keras.backend.epsilon())
    return f1_score

 然后在模型编译时调用该函数即可,如下所示:

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.003),
              loss='binary_crossentropy',
              metrics=[f1_score])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

John H.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值