我目前正在训练网络,以使用具有以下架构的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文件中,每行对应于该特定图像。
答案 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。但是,这将比仅仅尝试几个可以自己使用的版本花费更多的时间。