我有一个如下矩阵:
[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 回答
你可以使用tf.nn.conv2d,操纵像这样的矩阵叫做卷积
请参阅tensorflow.org/api_docs/python/tf/nn/conv2d
您可以使用numpy数组切片
然后,也许,将numpy数组转换为Tensor对象