繁体   English   中英

是否可以使用二维数组在图形模式下屏蔽张量像素?

[英]Is it possible to mask tensor pixels in graph mode using a 2D array?

我想用一个和零的数组来掩盖一个像素数组。 我在图形模式下使用 Keras,所以只使用可以在张量上执行的操作。

大多数符号运算符似乎都在图形模式下工作,并且在 keras.backend 中有一部分 numpy 操作。 但是不支持不迭代或枚举

所以例如我有:

    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)]]

实际的 arrays 是图像,比这个例子大得多。 有没有一种合理的方法来掩盖这样的点?

从您提供的代码中,最简单的方法之一是使用广播,例如评论中提到的@user1318499。 由于mask的形状为(2,3) ,而arr的形状为(2,3,3) ,因此可以将mask扩展一暗以使用arr进行广播。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM