TensorFlow tf.reshape支持Fortran顺序的重塑(类似于numpy)。

11

TensorFlow提供了一种在Fortran(列优先顺序)中改变张量形状的方法吗?NumPy允许:

a = ...
np.reshape(a, (32, 32, 3), order='F')
我想将CIFAR图像重塑为32x32x3(从形状为3072x1的向量),但我得到的图像看起来像这样:Example CIFAR image 在NumPy中使用Fortran顺序解决了问题,但我需要在TensorFlow中做同样的事情。
编辑:我现在意识到可以通过将其重塑为3x32x32,然后转置输出来获得正确的输出。我仍然有点惊讶TF没有提供基于行主序或列主序的开箱即用的重塑。

Tensorflow的reshape文档说了什么?它们有相应的“order”参数吗? - hpaulj
1
抱歉,我应该提到这一点。文档仅显示参数tensorshape和可选参数name - eric.mitchell
1个回答

5

TensorFlow似乎不支持Fortran(列主)顺序,但有一个简单的解决方案。你需要将reshape与transpose相结合。下面的代码使用numpy展示了等效的操作,接着是Tensorflow版本。

Numpy:

>>> import numpy as np
>>> want = np.arange(12).reshape((4,3),order='F')
>>> want
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])
>>> have = np.arange(12).reshape((3,4))
>>> have
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> have.transpose()
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])

Tensorflow:(假设您最终想要 MxN)

want = tf.transpose(tr.reshape(input,(n,m)))

1
如果我有一个三维张量或更多维度,它会如何改变? - Yesid Fonseca V.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接