我想实现一个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'对象不支持项目分配
答案 0 :(得分:1)
对于有价值的分配,请在此处查看答案:Adjust Single Value within Tensor -- TensorFlow
可能更符合您所寻找的方式可能是:
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)