我们如何比较不同ConvNets的性能?

时间:2018-11-14 10:32:56

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

我目前正在训练网络,以使用具有以下架构的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文件中,每行对应于该特定图像。

1 个答案:

答案 0 :(得分:0)

您可以做的最简单的事情是生成一些不同的模型架构,在火车上训练它们并在测试集上对其进行评估。然后比较它们的精度,理论上精度最高的应该是性能最好的模型。

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

更改此内容

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。但是,这将比仅仅尝试几个可以自己使用的版本花费更多的时间。