是否可以使用二维数组在图形模式下屏蔽张量像素?
Is it possible to mask tensor pixels in graph mode using a 2D array?
我想用 1 和 0 数组来屏蔽像素数组。
我在图形模式下使用 Keras,所以只使用可以在张量上执行的操作。
大多数符号运算符似乎在图形模式下工作,并且有a subset of numpy operations in keras.backend.但是不支持不迭代或枚举。
例如我有:
arr = [[(1,2,3),(2,3,4),(4,5,6)],[(5,6,7),(6,7,8),(7,8,9)]]
mask = [[1, 0, 1],[0, 0, 1]]
# and I want
arr * mask == [[(1,2,3),(0,0,0),(4,5,6)],[(0,0,0),(0,0,0),(7,8,9)]]
实际数组是图片,比这个例子大很多。
有没有合理的方法来屏蔽这样的点?
根据您提供的代码,最简单的方法之一是使用广播,如评论中提到的@user1318499。由于mask
是(2,3)
的形状,而arr
是(2,3,3)
的形状,所以mask
可以扩展一维来用[=13=进行广播].
import tensorflow as tf
arr = tf.reshape(tf.range(2*3*3), [2,3,3])
# array([[[ 0, 1, 2],
# [ 3, 4, 5],
# [ 6, 7, 8]],
# [[ 9, 10, 11],
# [12, 13, 14],
# [15, 16, 17]]], dtype=int32)
mask = tf.constant([[1, 0, 1],[0, 0, 1]])
res = arr * tf.expand_dims(mask, axis=-1)
# array([[[ 0, 1, 2],
# [ 0, 0, 0],
# [ 6, 7, 8]],
# [[ 0, 0, 0],
# [ 0, 0, 0],
# [15, 16, 17]]], dtype=int32)
我想用 1 和 0 数组来屏蔽像素数组。 我在图形模式下使用 Keras,所以只使用可以在张量上执行的操作。
大多数符号运算符似乎在图形模式下工作,并且有a subset of numpy operations in keras.backend.但是不支持不迭代或枚举。
例如我有:
arr = [[(1,2,3),(2,3,4),(4,5,6)],[(5,6,7),(6,7,8),(7,8,9)]]
mask = [[1, 0, 1],[0, 0, 1]]
# and I want
arr * mask == [[(1,2,3),(0,0,0),(4,5,6)],[(0,0,0),(0,0,0),(7,8,9)]]
实际数组是图片,比这个例子大很多。 有没有合理的方法来屏蔽这样的点?
根据您提供的代码,最简单的方法之一是使用广播,如评论中提到的@user1318499。由于mask
是(2,3)
的形状,而arr
是(2,3,3)
的形状,所以mask
可以扩展一维来用[=13=进行广播].
import tensorflow as tf
arr = tf.reshape(tf.range(2*3*3), [2,3,3])
# array([[[ 0, 1, 2],
# [ 3, 4, 5],
# [ 6, 7, 8]],
# [[ 9, 10, 11],
# [12, 13, 14],
# [15, 16, 17]]], dtype=int32)
mask = tf.constant([[1, 0, 1],[0, 0, 1]])
res = arr * tf.expand_dims(mask, axis=-1)
# array([[[ 0, 1, 2],
# [ 0, 0, 0],
# [ 6, 7, 8]],
# [[ 0, 0, 0],
# [ 0, 0, 0],
# [15, 16, 17]]], dtype=int32)