如何为Tensorflow中的指定位置赋值?

如何为Tensorflow中的指定位置赋值?,tensorflow,ssim,loss-function,Tensorflow,Ssim,Loss Function,我想实现一个SSIM损失函数,因为边界被卷积中止,我想保留边界并计算边界像素的L1损失。代码从这里学习 例如,我们有img1和img2大小[batch,32,32,32,1],以及Guassian 11的窗口大小,结果ssim映射将是[batch,22,22,22,1],L1映射[batch,32,32,1],如何将ssim分配给L1的中心 我收到这样的错误 TypeError:“Tensor”对象不支持项赋值对于值赋值,请在此处查看答案: 一种可能更符合您所寻找的内容的方法可能是: 创建ss

我想实现一个SSIM损失函数,因为边界被卷积中止,我想保留边界并计算边界像素的L1损失。代码从这里学习

例如,我们有img1和img2大小[batch,32,32,32,1],以及Guassian 11的窗口大小,结果ssim映射将是[batch,22,22,22,1],L1映射[batch,32,32,1],如何将ssim分配给L1的中心

我收到这样的错误
TypeError:“Tensor”对象不支持项赋值

对于值赋值,请在此处查看答案:

一种可能更符合您所寻找的内容的方法可能是:

  • 创建ssim_映射张量
  • 创建ssim_映射的框架,即完成ssim_映射到L1_映射所需的部分(作为张量)
  • 使用
    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)

ssim_地图的框架是什么?我被搞糊涂了。我是指L1_映射中的值没有被ssim_映射的值覆盖。为了获得这些,您应该相应地对L1_映射进行切片。添加了一个更完整的示例,可能有一个bug,但它说明了很多问题,我将尝试解决它