【发布时间】:2020-04-14 04:32:28
【问题描述】:
假设我有道路图像的数据集,我希望它输出一个数组,每个元素的范围为 0-1。首先图像中没有 0-1,其次如果有汽车,则为 0-1,最后如果有自行车,则为 0-1。图像中可能既有自行车也有汽车。如果什么都没有,我的标签会被标记为 [1,0,0],如果同时有汽车和自行车,我的标签会被标记为 [0,1,1]。
我不关心汽车或自行车的坐标。我使用了 vgg16 和我的最后一层输出 3 个带有 sigmoid 函数的输出。我被困在损失函数中。我做了一个自定义的,但我认为我对平方差的使用是错误的,这是我的自定义函数。
def lf(y_true,y_pred):
square=0
batchsize=25
for i in range(batchsize):
if y_true[i,0]==0:
square+= tf.squared_difference(y_true[i,0:3], y_pred[i,0:3])
else:
square+= tf.squared_difference(y_true[i,0], y_pred[i,0])
mean_square= square/batchsize
return mean_square
因此,如果没有对象(y_true[0]=1),那么猜测汽车或自行车并不重要,我只对第一部分 y_true[0] 承担损失。这是正确的方法还是我应该做二进制交叉熵。我的损失暂时停留在 0.24605921。
【问题讨论】:
标签: tensorflow keras deep-learning classification conv-neural-network