如何替换张量中的值?

时间:2017-07-10 14:17:24

标签: machine-learning tensorflow computer-vision

我将图像作为张量对象读取,目的是成为一个面具。

现在,我想用0替换接近白色(接近1.0)的值 和值为灰色的值。

然后掩码对我的机器学习任务是正确的。

我尝试过:

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,tensor,float32),值从[0,255]重新调整为[0,1]。

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

2 个答案:

答案 0 :(得分:0)

要使图像达到阈值,您可以使用:

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

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

im_update = im.assign(thim)

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

如果im不是变量,则无法为其重新分配值。但一般情况下,您确实需要将值重新分配给节点的情况很少。

答案 1 :(得分:0)

我发现一种解决方法是使用numpy()桥。在numpy数组上执行numpy操作,并且在张量值中也是如此。这是因为numpy数组和pytorch张量使用相同的基础内存位置。

pytorch入门教程here

中提到了内存共享