栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

tensorflow+keras杂话

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

tensorflow+keras杂话

前言:
现在需要用到tensorflow+keras,有一些遇到的问题在此记录,内容随时更新可能会非常杂乱,也许会整理。


交叉熵损失函数

直接调用compile使用自定义的加权交叉熵损失函数作为loss时,keras接收的是一个batch_size大小的tensor对象,因此在初用时遇到定义时没问题但fit时compile收到报错:Incompatible shapes: [100,1] vs. [159999,1](这里我的batch_size是100,样本个数159999也即自定义的损失函数输出了一个159999维的向量,这里应该要让损失函数的输出维度等于1——即计算这159999个数的均值再输出,然后模型会将batch_size个均值以向量形式一次输出作为一个epoch的损失)。

接下来又发现,直接用tf.keras.losses.binary_crossentropy()是可以的,即:

def my_loss(y_true, y_pred):
    return keras.losses.binary_crossentropy(y_true,y_pred)*lamda

正常运行(其中lamda是全局变量)
发现网上大家普遍有两种调用交叉熵损失函数的方法,用到了两个不同的keras定义的交叉熵损失函数:

  1. tf.keras.losses.binary_crossentropy()
  2. tf.keras.backend.binary_crossentropy()

tf.keras.losses.binary_crossentropy()是通过调用tf.keras.backend.binary_crossentropy()来工作的,以下为官方文档提供的源码说明中的关键部分:源码地址

即可以理解为:

from keras import backend as K

tf.keras.losses.binary_crossentropy(): 
	return K.mean( K.binary_crossentropy() )

而backend.binary_crossentropy()的完整计算过程为:(红框为关键部分)


可以发现计算公式为:(公式图片来源知乎(懒得自己写了))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号