【问题标题】:How to assign values to specified location in Tensorflow?如何将值分配给 Tensorflow 中的指定位置?
【发布时间】:2017-11-22 17:53:47
【问题描述】:

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

比如我们有img1和img2 size [batch,32,32,32,1],还有高斯11的window_size,结果ssim map会是[batch,22,22,22,1],L1 map [batch,32,32,32,1] 如何将 ssim 分配到 L1 的中心?

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

【问题讨论】:

    标签: tensorflow ssim loss-function


    【解决方案1】:

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

    一种可能更符合您正在寻找的方法可能是:

    • 创建 ssim_map 张量
    • 创建 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)
    

    【讨论】:

    • ssim_map的frame是什么?我很困惑。
    • 我的意思是 L1_map 中未被 ssim_map 的值覆盖的值。要获得这些,您应该相应地对 L1_map 进行切片。
    • 添加了一个更完整的示例,可能存在错误,但它说明了这个想法
    • 非常感谢,我会努力解决的
    猜你喜欢
    • 2017-09-23
    • 2021-03-22
    • 2020-03-24
    • 2018-11-26
    • 2019-10-01
    • 2018-05-17
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多