【问题标题】:Implementing 2D sliding window in Tensorflow在 Tensorflow 中实现 2D 滑动窗口
【发布时间】:2022-11-27 02:25:10
【问题描述】:

我有一个 3-dim 形状的张量,我正在尝试使用 2D 滑动窗口横穿它,如下图所示:

在此图像中,每个字母代表一个 n 元素数组,窗口大小为 3x3。窗口总是方形的,例如 3x3、5x5 等

我找不到没有 numpy/loops 的方法来实现它。我的对象仅使用张量流矢量化操作。有任何想法吗?

【问题讨论】:

  • tf.image.extract_patches(images=image, sizes=[1, 3, 3, 1], strides=[1, 1, 1, 1], rates=[1, 1, 1, 1], padding='有效')

标签: python tensorflow sliding-window


【解决方案1】:

假设创建一个矩阵msizen*n

 m =[
    ['a' , 'b' , 'c' , 'd' , 'e'],
    ['f' , 'g' , 'h' , 'i' , 'j'],
    ['k' , 'l' , 'm' , 'n' , 'o'],
    ['p', 'q' , 'r' , 's' ,  't'],
    ['u' , 'v' , 'w' , 'y' , 'x']
]
def conv_slide_window(matrix_len , pad_size):

    matrix = tf.reshape(tf.range(matrix_len**2)+1, (matrix_len , matrix_len))
    
    conv_window = (len(matrix) - pad_size + 1)
    conv_window = conv_window * conv_window
    
    image = tf.image.extract_patches(images=matrix[None,...,None], 
                         sizes=[1, pad_size, pad_size, 1], 
                         strides=[1, 1, 1, 1], 
                         rates=[1, 1, 1, 1], padding='VALID').numpy().reshape(-1,1).tolist()
    
    return tf.squeeze(tf.reshape(tokenize.sequences_to_texts(image) , (pad_size , pad_size , conv_window))) if pad_size >= conv_window else tf.squeeze(tf.split(tf.reshape(tokenize.sequences_to_texts(image) , (pad_size , pad_size , conv_window)) , conv_window , axis=-1)) 
#First do some pre-processing
#Define Tokenizer to tokenize the alphabets first you cannot directly map the alphabets
tokenize = tf.keras.preprocessing.text.Tokenizer()
tokenize.fit_on_sequences(m)
tokenize.fit_on_texts(m)
    
pad_size = 3
conv_slide_window(len(m) , pad_size)
<tf.Tensor: shape=(3, 3, 3, 3), dtype=string, numpy=
array([[[[b'a', b'b', b'c'],
         [b'f', b'g', b'h'],
         [b'k', b'l', b'm']],

        [[b'b', b'c', b'd'],
         [b'g', b'h', b'i'],
         [b'l', b'm', b'n']],

        [[b'c', b'd', b'e'],
         [b'h', b'i', b'j'],
         [b'm', b'n', b'o']]],


       [[[b'f', b'g', b'h'],
         [b'k', b'l', b'm'],
         [b'p', b'q', b'r']],

        [[b'g', b'h', b'i'],
         [b'l', b'm', b'n'],
         [b'q', b'r', b's']],

        [[b'h', b'i', b'j'],
         [b'm', b'n', b'o'],
         [b'r', b's', b't']]],


       [[[b'k', b'l', b'm'],
         [b'p', b'q', b'r'],
         [b'u', b'v', b'w']],

        [[b'l', b'm', b'n'],
         [b'q', b'r', b's'],
         [b'v', b'w', b'y']],

        [[b'm', b'n', b'o'],
         [b'r', b's', b't'],
         [b'w', b'y', b'x']]]], dtype=object)>

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2015-06-16
    • 1970-01-01
    • 2017-09-23
    • 2015-02-20
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多