Tensorflow 踩坑日记:CNN分类时损失函数的选择

CNN分类时损失函数的选择

在使用keras进行神经网络构建时,报如下错误:
tensorflow.python.framework.错误_impl.InvalidArgumentError错误:登录和标签必须具有相同的第一维度,got logits shape[32,4]和labels shape[128]
报错信息

出错原因:

model.compile(metrics=['accuracy'],optimizer='adam', loss='sparse_categorical_crossentropy')

进行分类时:
如果target是one-hot的编码形式,损失函数loss用categorical_crossentropy
one-hot编码:[0, 1, 0, 0],[1, 0, 0, 0],[0, 0, 0, 1]
如果target是数字编码,损失函数loss用sparse_categorical_crossentropy
数字编码:1, 0, 3

修改:

model.compile(metrics=['accuracy'],optimizer='adam', loss='categorical_crossentropy')

把’sparse_categorical_crossentropy’换成’categorical_crossentropy’即可。

官方定义

categorical_crossentropy

keras.backend.categorical_crossentropy(target, output, from_logits=False)

输出张量与目标张量之间的分类交叉熵。

参数

  • target: 与 output 尺寸相同的张量。
  • output: 由 softmax 产生的张量 (除非 from_logits 为 True, 在这种情况下 output 应该是对数形式)。
  • from_logits: 布尔值,output 是 softmax 的结果, 还是对数形式的张量。

返回
输出张量

sparse_categorical_crossentropy

keras.backend.sparse_categorical_crossentropy(target, output, from_logits=False)

稀疏表示的整数值目标的分类交叉熵。

参数

  • target: 一个整数张量。
  • output: 由 softmax 产生的张量 (除非 from_logits 为 True, 在这种情况下 output 应该是对数形式)。
  • from_logits: 布尔值,output 是 softmax 的结果, 还是对数形式的张量。

返回
输出张量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值