我正在尝试将大小为(14,14,3)的数组重塑为(None,14,14,3)。我已经看到卷积神经网络中每一层的输出都具有以下格式的形状:(None,n,n,m)。
考虑我的数组名称为 arr
我尝试过arr[None,:,:]
,但是它将其转换为(1,14,14,3)的尺寸。
我应该怎么做?
答案 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
视为一个灵活的维度。
尽管我看到两个标签都有很多问题,但我还没有使用tensorflow
。 tensorflow
应该具有在张量之间传递值的机制。它知道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)