将大小为(n,n,m)的数组转换为(None,n,n,m)

时间:2019-04-01 20:01:25

标签: python arrays numpy conv-neural-network reshape

我正在尝试将大小为(14,14,3)的数组重塑为(None,14,14,3)。我已经看到卷积神经网络中每一层的输出都具有以下格式的形状:(None,n,n,m)。

考虑我的数组名称为 arr

我尝试过arr[None,:,:],但是它将其转换为(1,14,14,3)的尺寸。

我应该怎么做?

2 个答案:

答案 0 :(得分:2)

https://www.tensorflow.org/api_docs/python/tf/TensorShape

  

TensorShape表示Tensor的可能是部分形状的规格。可能是以下之一:

     

部分已知的形状:具有已知的尺寸数量,而对于一个或多个尺寸的尺寸未知。例如TensorShape([None,256])

numpy中是不可能的。 ndarray的所有尺寸都是已知的。

arr[None,:,:]表示法添加了一个新的尺寸为1的尺寸(1,14,14,3)。在广播规则下,可以更改此尺寸以匹配另一个阵列的尺寸。从这种意义上讲,我们通常将None视为一个灵活的维度。


尽管我看到两个标签都有很多问题,但我还没有使用tensorflowtensorflow应该具有在张量之间传递值的机制。它知道numpy,但是numpy并不“了解” tensorflow的任何信息。

ndarray是具有已知值的对象,其形状用于以多维方式访问这些值。相反,tensor没有值:

https://www.tensorflow.org/api_docs/python/tf/Tensor

  

它不保存该操作输出的值,而是提供一种计算这些值的方法

看起来您可以从一个数组创建一个TensorProt(也可以从一个数组返回一个数组):

https://www.tensorflow.org/api_docs/python/tf/make_tensor_proto

并从数组中生成张量:

https://www.tensorflow.org/api_docs/python/tf/convert_to_tensor

答案 1 :(得分:1)

形状(None,14、14、3)表示((batch_size,imgH,imgW,imgChannel),现在imgH和imgW可互换使用取决于网络和问题。 但是在神经网络中,batchsize被指定为“ None”,因为我们不希望将batchsize限制为某个特定值,因为batchsize取决于很多因素,例如可用于模型运行的内存等。

因此,假设您有4张尺寸为14x14x3的图像,然后可以将每个图像附加到数组中,例如L1,现在L1的形状为4x14x14x3,即您制作了4张图像的批处理,现在您可以将其馈送到您的神经网络。

注意此处无将被4替换,并且在整个训练过程中将被替换为4。类似地,当您仅馈送网络一张图像时,它会假定batchsize为1,并将None设置为1从而得到形状(1X14X14X3)