Machine learning 如何使卷积神经网络接受可变大小的输入?
所以,我看到机器学习中的许多第一个CNN示例都使用MNIST数据集。每个图像都是28x28,因此我们知道输入的形状。对于可变大小的输入,这将如何实现呢?假设您有一些56x56和28x28的图像Machine learning 如何使卷积神经网络接受可变大小的输入?,machine-learning,tensorflow,Machine Learning,Tensorflow,所以,我看到机器学习中的许多第一个CNN示例都使用MNIST数据集。每个图像都是28x28,因此我们知道输入的形状。对于可变大小的输入,这将如何实现呢?假设您有一些56x56和28x28的图像 如果可能的话,我正在寻找一个语言和框架不可知的答案,或者用tensorflow术语更好当您使用CNN进行分类任务时,您的网络有两部分: 特征生成器。零件通过具有大小WI x HI和CI通道的图像,生成具有大小WF x HF和CF通道的特征图。图像大小和特征贴图大小之间的关系取决于NN的结构(例如,池层的数
如果可能的话,我正在寻找一个语言和框架不可知的答案,或者用tensorflow术语更好当您使用CNN进行分类任务时,您的网络有两部分:
WI x HI
和CI
通道的图像,生成具有大小WF x HF
和CF
通道的特征图。图像大小和特征贴图大小之间的关系取决于NN的结构(例如,池层的数量和步长)WF*HF*CF
组件将向量分类为类的任务作者提出了空间金字塔池,解决了CNN输入不同图像的问题。但我不确定tensorflow中是否存在空间金字塔池层。当您使用CNN进行分类任务时,您的网络有两部分:
WI x HI
和CI
通道的图像,生成具有大小WF x HF
和CF
通道的特征图。图像大小和特征贴图大小之间的关系取决于NN的结构(例如,池层的数量和步长)WF*HF*CF
组件将向量分类为类的任务作者提出了空间金字塔池,解决了CNN输入不同图像的问题。但我不确定tensorflow中是否存在空间金字塔池层。在某些情况下,适当调整图像大小(例如保持aspectratio)就足够了。但是,这可能会引入失真,如果这是有害的,另一种解决方案是使用空间金字塔池(SPP)。不同图像大小的问题在于,它会产生不同大小的层,例如,考虑到某些网络的
n-th
层的特征,您可以得到大小128*fw*fh
的特征图,其中fw
和fh
根据输入示例的大小而变化。为了缓解这个问题,SPP所做的是将这个可变大小的特征映射转化为一个固定长度的特征向量。它在不同的尺度上运行,将图像划分为相等的面片并对其执行最大池。我认为在解释它方面做得很好。可以看到一个示例应用程序
作为一个快速的解释,假设您有一个大小为k*fw*fh
的特征图。您可以将其视为<代码> k>代码>窗体的映射。
X Y
Z T
其中每个块的大小为fw/2*fh/2
。现在,分别对这些块中的每个块执行maxpooling将为您提供大小为4
的向量,因此,您可以大致将k*fw*fh
映射描述为k*4
固定大小的特征向量
现在,调用这个固定大小的向量<代码> W>代码>并将其放在一边,这次考虑“<代码> k*fw *fh < /COD>特性图为<代码> k < /COD>作为
的特征平面。 A B C D
E F G H
I J K L
M N O P
同样,在每个块上分别执行maxpooling。因此,使用它,您可以获得更细粒度的表示,作为长度为v=k*16的向量
现在,将两个向量u=[v;w]
串联在一起可以得到一个固定大小的表示。这正是2级SPP所做的(当然,您可以更改分区的数量/大小)
希望这能有所帮助。在某些情况下,适当调整图像大小(例如保持aspectratio)就足够了。但是,这可能会引入失真,如果这是有害的,另一种解决方案是使用空间金字塔池(SPP)。不同图像大小的问题在于,它会产生不同大小的层,例如,考虑到某些网络的
n-th
层的特征,您可以得到大小128*fw*fh
的特征图,其中fw
和fh
根据输入示例的大小而变化。为了缓解这个问题,SPP所做的是将这个可变大小的特征映射转化为一个固定长度的特征向量。它在不同的尺度上运行,将图像划分为相等的面片并对其执行最大池。我认为在解释它方面做得很好。可以看到一个示例应用程序
作为一个快速的解释,假设您有一个大小为k*fw*fh
的特征图。您可以将其视为<代码> k>代码>窗体的映射。
X Y
Z T
其中每个块的大小fw/2*fh/2