【问题标题】:how to replace values in a tensor?如何替换张量中的值?
【发布时间】:2017-07-10 14:17:24
【问题描述】:

我已将图像读取为张量对象,旨在成为蒙版。

现在,我想用 0 替换接近白色(几乎 1.0)的值 以及灰色到 1 的值。

那么掩码对于我的机器学习任务来说是正确的。

我试过了:

tf.where(imag >= 1.0) 

或者下一个函数也返回索引

greater = tf.greater_equal(mask, 0.95)

但是如何更新/分配 0? scatter_nd_add 对我不起作用。

mask = tf.scatter_nd_add(mask, greater, 0)

编辑:

我尝试了不同的方法:

v_mask = tf.Variable(tf.shape(mask))
ind = tf.to_float(mask >= 0.0)
v_mask.assign(ind)

但如果我运行会话。它停在那里不再继续。

我真正想做的事: 我有一个尺寸为(mxnx1,张量,float32)的灰度图像,并且值从 [0,255] 重新缩放到 [0,1]。

我想用 0 替换所有白色 (1) 和灰色 (0.45 - 0.55) 的值,其余的应该是未定义的。

【问题讨论】:

    标签: machine-learning tensorflow computer-vision


    【解决方案1】:

    要对图像进行阈值处理,您可以使用:

    thim = tf.tofloat(im >= 0.95) # or to whichever type you use
    

    要将结果重新分配给im假设它是一个变量:

    im_update = im.assign(thim)
    

    这为您提供了一个更新操作,您需要调用该操作以进行更新。

    如果im 不是一个变量,那么您就不能给它重新赋值。不过,通常情况下,您确实需要为节点重新分配值的情况很少。

    【讨论】:

    • 它应该保持一个张量
    • 我不明白你想告诉我什么。我有一个用 wholeFileReader 加载到张量中的图像。现在,我想用黑色像素 (0) 替换所有白色像素 (>=0.95)。如何替换这些值?
    • 您尝试过第一种解决方案吗?对你起作用吗?如果不是,错误是什么?
    • @j35t3r 我想你在最后一行是指v_mask.assign(ind)
    • @j35t3r 我忘了提到需要调用更新操作。我相应地更新了我的答案。
    【解决方案2】:

    我发现的一种解决方法是使用 numpy() 桥接器。对 numpy 数组执行 numpy 操作,同样反映在张量值中。这是因为,numpy 数组和 pytorch 张量使用相同的底层内存位置。

    pytorch入门教程here中提到了内存共享

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2018-12-14
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多