我正在学习tensorflow
。在完成专家(https://www.tensorflow.org/get_started/mnist/pros)的tensorflow
教程MNist
后,我尝试使用经过训练的模型进行推理。
我制作了两张[28x28]
张图片并将它们放入[28x28x2]
数组并保存Matlab
个文件。
然后我使用scipy.io
将数组加载到python
。
但是,我的网络期待[2, 28, 28, 1]
张量。
如何将[28x28x2]
数组转换为[2, 28, 28, 1]
张量?
答案 0 :(得分:2)
首先,转置数组,使 28x28x2 变为 2x28x28 (第三个维度先行,然后是第一个维度,然后是第二个维度。)
arr = arr.transpose((2, 0, 1))
注意:您可以使用
arr.reshape((2, 28, 28))
获得 2x28x28 的形状,但这会弄乱您的数据顺序。我使用transpose
因为我认为您希望arr[0]
成为一张图片,而arr[1]
则相同。
然后展开数组,以便获得最后一个维度
arr = np.expand_dims(arr, -1)
4x4 而不是 28x28 的示例:
>>> arr = np.empty((4, 4, 2)) # an empty array
>>> arr[..., :] = 0, 1 # first picture is all 0s and second is all 1s
>>> arr[..., 0]
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> arr[..., 1]
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
>>> arr.shape
(4, 4, 2)
现在进行转换
>>> arr = arr.transpose((2, 0, 1))
>>> arr = np.expand_dims(arr, -1)
>>> arr.shape
(2, 4, 4, 1)