machine-learning - "size"在 kaggle 糖尿病视网膜病变检测第二名解决方案神经网络中意味着什么?

标签 machine-learning conv-neural-network theano lasagne

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

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

您好,我是 CNN 新手,最近正在研究这个解决方案。作者画了一张他的小组设计的网络的表格。单位、过滤器和步幅对我来说都有意义,但我只是不知道“大小”意味着什么。它更可能意味着批量大小还是图像大小?

一开始我认为应该是图像大小,但有两个原因不应该:

  1. 正如他们在报告中所述,他们只是将原始图像裁剪为 128x128,256x256,512x512 像素,并且没有进行任何其他图像预处理。

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

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

    这证实了他们的竞争报告中的描述。

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

这是我的问题:

1.如果输入图片尺寸不是448,那么448是什么意思?

2.如果这意味着批量大小,为什么他们会选择 448?和

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

最佳答案

linked table大小列指层中激活的垂直和水平维度。

这些是存储库中表格中网络的完整配置:

这两个输入的宽度和高度都是448,即。输入层的大小为448。

我们可以使用以下公式来计算卷积层激活的垂直和水平维度:

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

我们可以从上面链接的网络配置中获取输入大小、过滤器大小和步幅参数。由于他们使用烤宽面条的早期开发版本,因此很难准确辨别他们使用的填充类型,因此我们必须在那里做出一些假设。

对于网络 A:

INPUT_SIZE = 448
FILTER_SIZE = 5
STRIDE = 2

如果 PADDING_PREV = 2PADDING_AFTER = 1(反之亦然),则使用上面的公式,激活大小将解析为 224。由于根据他们的表,第一个卷积层的大小为 224,因此我们可以非常确定我们正确地解释了参数。

对于网络 B:

INPUT_SIZE = 448
FILTER_SIZE = 4
STRIDE = 2

如果两个填充均为 1,则激活大小将为 224,如表中所示。

总之,作者报告了 512x512 图像的网络架构,并省略了将这些图像调整为 448x448 分辨率以及如何应用填充的细节。这是计算机视觉社区的惯例,人们总是可以依靠上面的公式来验证这些细节。

关于machine-learning - "size"在 kaggle 糖尿病视网膜病变检测第二名解决方案神经网络中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51945485/

相关文章:

theano - 当代码几乎相同时,为什么 theano scan 的工作方式不同?

python - 如何正确创建多输入神经网络

image-processing - 为什么在 CNN 的后期步骤中通常有多个全连接层?

optimization - 使用 Tensorflow w/C++ 时提高性能的策略?

architecture - 时间序列预测 LSTM 神经网络的正确架构是什么?

python - 具有动态输入形状的 CNN

python - 为什么 matplotlib imshow() 显示转置图像?

Python - Theano scan() 函数

java - 使用 weka 和 python 加载分类器模型

python - 使用 sklearn 进行音乐流派分类 : how to accurately evaluate different models