【问题标题】:How do we compare the performance of different ConvNets?我们如何比较不同 ConvNets 的性能?
【发布时间】:2018-11-14 10:32:55
【问题描述】:

我目前正在训练网络与具有以下架构的 CNN 一起玩游戏:

model = Sequential()
model.add(Conv2D(100, kernel_size=(2, 2), strides=(2, 2), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(250, activation='relu'))
model.add(Dense(classifications, activation='softmax'))
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['accuracy'])

现在我想在架构中引入一些复杂性并让网络变得更深。如何将不同复杂度的 CNN 的性能制成表格,并最终通过为特定任务提供最佳选择得出结论?

我是不是走错了方向?如何确定 CNN 的深度以及它如何影响同一数据集上的性能?

提前感谢(我是这个网站的新手,请原谅这篇文章的不成熟)

编辑:关于我正在使用的数据集的信息:数据集由图像组成,每个图像都有 3 个可能的标签(0、1、2)存储在 CSV 文件中,每一行对应于该特定图像。

【问题讨论】:

    标签: python-3.x tensorflow machine-learning keras


    【解决方案1】:

    您可以做的最简单的事情是生成几个不同的模型架构,在训练集上训练它们并在测试集上评估它们。然后比较他们的准确率,准确率最高的应该是理论上表现最好的模型。

    要使模型更深,您可以添加额外的密集层或卷积层。例如:

    改变这个:

    model.add(Dense(250, activation='relu'))
    

    到这里:

    model.add(Dense(250, activation='relu'))
    model.add(Dense(250, activation='relu'))
    model.add(Dense(250, activation='relu'))
    

    将添加三个额外的密集层。从而使网络更深。

    您可以通过复制 Conv2D 和 MaxPooling2D 线来复制卷积层。

    寻找最佳架构和超参数的“试错”方法的替代方法是使用搜索方法like explained in this tutorial,即用户网格搜索。但是,这将比仅尝试几个您可以自己尝试的版本花费更长的时间。

    【讨论】:

    • 感谢您的信息,开发人员在添加更多层时是否有某种直觉?这些结果(通过随机添加更多层获得)能否使网络性能更好?这些结果可以制成表格并作为研究工作吗?还是太新手了?
    • 对于初学者,我建议查看当前的架构,如 resnet 或 inception,看看哪些架构运行良好,然后通过修改进行试验。比较当前最先进模型的方式是在相同的数据集(如 COCO 数据集)上评估它们,虽然并不容易,但如果您获得比当前模型更好的结果,您肯定可以发表一篇关于它的论文。
    • 我们可以缩小这些已经训练好的网络,在我为玩游戏准备的数据集上进行训练吗?
    • 如果你指的是重新训练已经训练好的网络来解决你自己的问题(在你的情况下玩游戏),那么这绝对是可行的并且是一种常见的做法。这被称为迁移学习。这里描述得很好medium.com/@14prakash/…
    • 我的数据集有大约 5000 张图像 (270*160)(灰度),我希望比较不同 CNN 架构的训练结果(2 个预训练和 1 个(我的)只会重复 Conv、池化和密集层 3-4 次)。我应该继续这个想法来写论文还是我走错了方向?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2022-11-02
    • 2010-10-21
    • 2012-06-07
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多