乘以一系列矩阵

时间:2018-10-14 09:57:09

标签: python-3.x tensorflow

我有一个如下的矩阵:

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

我需要将其从左上到右依次分成多个3x3矩阵。有点像是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 :(得分:0)

您可以使用tf.nn.conv2d,像这样操作矩阵称为卷积

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

答案 1 :(得分: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)