首页 Paddle框架 帖子详情
f1 score loss 实现问题
收藏
快速回复
Paddle框架 问答深度学习模型训练 1917 5
f1 score loss 实现问题
收藏
快速回复
Paddle框架 问答深度学习模型训练 1917 5

在paddle上实现了一个f1 loss函数:
def _compute_loss(self, dec_output): tp = fluid.layers.sum(fluid.layers.cast(self.label * dec_output, dtype="float32")) tn = fluid.layers.sum(fluid.layers.cast((1 -self.label) * (1 - dec_output), dtype="float32")) fp = fluid.layers.sum(fluid.layers.cast((1 -self.label) * dec_output, dtype="float32")) fn = fluid.layers.sum(fluid.layers.cast(self.label * (1 - dec_output), dtype="float32")) print ("shape:loss", tp.shape, tn.shape, fp.shape, fn.shape) p = tp / (tp + fp + 1e-07) r = tp / (tp + fn + 1e-07) f1 = 2 * p * r / (p + r + 1e-07) print ("f1_shape ", f1.shape) print ("mean_shape ", fluid.layers.mean(f1)) print ("loss_shape", 1 - fluid.layers.mean(f1)) return 1 - fluid.layers.mean(f1), dec_output, self.label
输出的shape如下:
shape:loss (-1L, -1L, 3L) (-1L, -1L, 3L) (-1L, -1L, 3L) (-1L, -1L, 3L)
f1_shape (-1L, -1L, 3L)
mean_shape name: "mean_0.tmp_0"
type {
type: LOD_TENSOR
lod_tensor {
tensor {
data_type: FP32
dims: 1
}
}
}
persistable: false

loss_shape name: "tmp_25"
type {
type: LOD_TENSOR
lod_tensor {
tensor {
data_type: FP32
dims: 1
}
lod_level: 0
}
}

实际以此loss做训练,结果很怪异,能帮忙看下原因吗,在keras实现此loss函数无问题

0
收藏
回复
全部评论(5)
时间顺序
AIStudio788474
#2 回复于2019-11

重新贴下代码:
image

0
回复
AIStudio788475
#3 回复于2019-11

请问, label和dec_out的shape是什么?数值是0,1?

0
回复
AIStudio788474
#4 回复于2019-11

label_out 的shape是(-1L, -1L, 3L)
dec_out的shape是
name: "transpose_3.tmp_0"
type {
type: LOD_TENSOR
lod_tensor {
tensor {
data_type: FP32
dims: -1
dims: -1
dims: 3
}
}
}
persistable: false

0
回复
AIStudio788474
#5 回复于2019-11

label数值是3分类的one-hot,
dec_output是经过softmax处理的三个概率值,(LSTM seq2seq的loss函数)

0
回复
AIStudio788475
#6 回复于2019-11

sum op没有做reduce,请使用reduce_sum试试,设置需要做reduce的dim

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户