将[28,28,2] matlab数组转换为[2,28,28,1]张量

时间:2017-12-22 22:55:27

标签: python matlab tensorflow tensor

我正在学习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]张量?

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)