我有一个如下的矩阵:
[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)
答案 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)