在Kaggle糖尿病视网膜病变检测比赛中,第二名解决方案的神经网络中的”size”是什么意思?

链接: https://www.kaggle.com/c/diabetic-retinopathy-detection/discussion/15617

Github:https://github.com/sveitser/kaggle_diabetic

大家好,我是CNN的新手,最近在研究这个解决方案。作者绘制了一张他们团队设计的神经网络表格。单位、滤波器和步长对我来说都很好理解,但我不知道“size”是什么意思。它更可能是指批量大小还是图像大小?

我最初认为应该是图像大小,但有两个原因表明它不是:

  1. 正如他们在报告中描述的,他们只是将原始图像裁剪到128×128、256×256、512×512像素,并没有进行其他图像预处理。

  2. 在阅读了他们的代码(来自Github链接)后,我发现他们对InputLayer的设置是:

    (InputLayer, {'shape': (None, 3, cnf['w'], cnf['h'])}),

    这证实了他们在比赛报告中的描述。

因此,我认为输入大小应该是3x128x128,而不是448。

我的问题如下:

1.如果输入图像大小不是448,那么448是什么意思?

2.如果它指的是批量大小,为什么他们选择448?以及

3.为什么他们让批量大小从第1层到第19层逐渐减少(基本上是/2),从448变为224、111、56、27、13、6、2?


回答:

链接表格中的size列指的是某一层中激活值的垂直和水平尺寸。

以下是存储库中表格中网络的完整配置:

这两个网络的输入宽度和高度都是448,即输入层的size为448。

我们可以使用以下公式计算卷积层的激活值的垂直和水平尺寸:

ACTIVATION_SIZE = (INPUT_SIZE − FILTER_SIZE + PADDING_PREV + PADDING_AFTER) / STRIDE + 1

我们可以从上面的链接中获取网络配置的输入大小、滤波器大小和步长参数。由于他们使用的是Lasagne的早期开发版本,因此很难确切辨别他们使用的是哪种填充方式,所以我们需要在此做一些假设。

对于网络A:

INPUT_SIZE = 448FILTER_SIZE = 5STRIDE = 2

使用上面的公式,如果PADDING_PREV = 2PADDING_AFTER = 1(或相反),这将得到一个激活值大小为224。根据他们的表格,第一个卷积层的尺寸是224,我们可以相当确定我们正确地解释了这些参数。

对于网络B:

INPUT_SIZE = 448FILTER_SIZE = 4STRIDE = 2

如果两个填充都是1,这将得到表格中显示的激活值大小224。

总之,作者报告了他们针对512×512图像设计的网络架构,但省略了将这些图像调整到448×448分辨率的细节以及他们如何应用填充。在计算机视觉社区中,这是常见的做法,人们总是可以依赖上述公式来验证这些细节。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注