首页 文章

乘以一系列矩阵

提问于
浏览
0

我有一个如下矩阵:

[0 0 1 1]
[0 0 1 1]
[0 0 0 0]
[0 0 0 0]

我需要将它从左上角到右上角分成多个 3x3 矩阵 . 它是整个矩阵的一种滑动 . 在这个例子中,我们会像这样使用 4 3x3 矩阵:

[0 0 1]     [0 1 1]
1 = [0 0 1] 2 = [0 1 1]
    [0 0 0]     [0 0 0]

    [0 0 1]     [0 1 1]
3 = [0 0 0] 4 = [0 0 0]
    [0 0 0]     [0 0 0]

我已经尝试使用 tf.extract_image_patch 获得了4个矩阵,但我仍然不确定如何在Tensorflow中为这些矩阵做一个运行的产品 . 或者,更好地实现运行产品而无需预先计算单独的矩阵 .

对于运行产品,我的意思是:我需要多个1-4个矩阵元素并且需要得到 1 3x3 矩阵 . 例如, 1 & 2 矩阵将相乘,结果将与矩阵 3 相乘,结果将再次与矩阵 4 相乘 . 此操作应该让我在原始矩阵中启动补丁( [[1 1], [1 1]] ),矩阵如下:

[0 0 1]   
res =  [0 0 0] 
       [0 0 0]

完成后,我需要将此操作作为我的网络的一部分,也许是Tensorflow层 .

如果有人可以帮助我实现这一目标,我将不胜感激 . 谢谢 .

EDIT 这似乎是在列表中乘以矩阵的一种方法,但我仍然在寻找多个部分的 1) 切片矩阵并以更好的方式将它们相乘,并将它作为一个层添加到网络中: 2)

tf.scan(lambda a, b: tf.multiply(tf.squeeze(a), tf.squeeze(b)), original)

2 回答

  • 0

    你可以使用tf.nn.conv2d,操纵像这样的矩阵叫做卷积

    请参阅tensorflow.org/api_docs/python/tf/nn/conv2d

  • 0

    您可以使用numpy数组切片

    import numpy as np
    
    A = np.array([[0, 0, 1, 1],
                  [0, 0, 1, 1],
                  [0, 0, 0, 0],
                  [0, 0, 0, 0]])
    
    res = A[:-1, :-1] * A[:-1, 1:] * A[1:, :-1] * A[1:, 1:]
    

    然后,也许,将numpy数组转换为Tensor对象

    tf.convert_to_tensor(res)
    

相关问题