如何在Tensorflow中将值分配给指定位置?

时间:2017-06-20 09:15:18

标签: tensorflow ssim loss-function

我想实现一个SSIM丢失函数,因为寄存器被卷积中止,我想保留寄宿生并计算寄宿生像素的L1损失。代码是从这里学到的。 SSIM / MS-SSIM for TensorFlow

例如,我们有img1和img2大小[批次,32,32,32,1]和高斯11的window_size,结果ssim图将是[batch,22,22,22,1],L1 map [batch,32,32,32,1]如何将ssim指定给L1的中心?

我收到这样的错误; TypeError:' Tensor'对象不支持项目分配

1 个答案:

答案 0 :(得分:1)

对于有价值的分配,请在此处查看答案:Adjust Single Value within Tensor -- TensorFlow

可能更符合您所寻找的方式可能是:

  • 创建ssim_map tensor
  • 创建ssim_map的框架,即为完成ssim_map到L1_map所需的部分(作为张量)
  • 使用tf.concat操作将各个部分组合在一起并拥有最终的张量

例如,我没有检查它是否有效,但是像这样的一些想法应该可以完成这项任务:

upper_band1 = L1_map[:, :5, 5:-5, 5:-5, :]
lower_band1 = L1_map[:, -5:, 5:-5, 5:-5, :]
upper_band2 = L1_map[:, :, :5, 5:-5, :]
lower_band2 = L1_map[:, :, -5:, 5:-5, :]
upper_band3 = L1_map[:, :, :, :5, :]
lower_band3 = L1_map[:, :, :, -5:, :]

intermediate_1 = tf.concat([upper_band1, ssmi_map, lower_band1], axis=1)
intermediate_2 = tf.concat([upper_band2, intermediate1, lower_band2], axis=2)
final = tf.concat([upper_band3, intermediate3, lower_band3], axis=3)