我正在为tensorflow中的回归任务构建CNN。 我有一个非常特殊的丢失函数,它是稀疏的,因为预测的输出图像只有几个像素标签可用。在这个损失函数中,我想分割输出图像的两个像素值,并将结果与一些给定的标签进行比较。 使用for循环很容易做到这一点。但是我需要在tensorflow操作中执行此操作以确保反向传播正常工作(渐变必须计算)。
更详细地说明我需要什么以及我失败的地方:
在这个玩具模型中,我有2个形状(批次,高度,宽度)的灰度图像:
import numpy as np
import tensorflow as tf
# given:
# normalized greyscale image (batch=2):
grey_img = np.array([
# image 1:
[[ 0.65625 , 0.67578125, 0.69140625],
[ 0.66796875, 0.6796875 , 0.6953125 ],
[ 0.6796875 , 0.69140625, 0.6796875 ]],
# image 2:
[[ 0.37890625, 0.3671875 , 0.3671875 ],
[ 0.3828125 , 0.37109375, 0.3671875 ],
[ 0.38671875, 0.37890625, 0.37109375]]
])
grey_img_tf = tf.constant(grey_img)
我有一个(稀疏的)带标签的像素比较列表。 我需要比较批次的point1(' x1',' y1')和point2(' x2',' y2') '批量')标签('标签'在{1,2,3}中)。 (' x1',' y1',' x2',' y2')表示灰度图像grey_img的像素索引(' ; x1 / 2'是宽度轴上的):
# labels are in order ['batch', 'x1', 'y1', 'x2', 'y2', 'label']
labels = np.array([[0, 0, 2, 1, 1, 1],
[0, 2, 1, 0, 0, 3],
[1, 1, 1, 1, 1, 2]])
我需要以tensorflow-istic方式做的是比较grey_img_tf中的相应像素: 例如,我需要进行第一次比较
# if point 2 is greater than point 1:
if grey_img[0, 1, 1] / grey_img[0, 0, 2] > 1:
prediction = 1
# if point 1 is greater than point 2:
elif grey_img[0, 0, 2] / grey_img[0, 1, 1] > 1:
prediction = 2
# if both are equal:
else:
prediction = 3
我需要这样做不是为了np数组而是为了tensorflow grey_img_tf和所有批次。