我是深度学习的新手,我想使用CNN(keras)构建图像分类器。我建立了一个具有2个卷积层的模型(filters = 32,kernel = 3x3),然后是MaxPooling层(2x2),并重复了2次。最后是2个完全连接的层。我的准确度是50%。我的问题是我们如何选择模型。就像我们如何确定应该有2个卷积层,然后是MaxPooling层或1个卷积和1个MaxPooling层。另外,我们如何选择每个卷积层中的过滤器数量和内核大小。
如果我的模型不起作用,那么如何确定对该模型进行哪些更改。
model = Sequential()
model.add(Convolution2D(32,3,3,input_shape=
(280,280,3),activation='relu'))
model.add(Convolution2D(32,3,3,activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
#model.add(Dropout(0.25))
model.add(Convolution2D(64,3,3,activation='relu'))
model.add(Convolution2D(64,3,3,activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
#model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(output_dim=256 , activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(output_dim=5,activation='softmax'))
5个纪元后,我的准确率达到了50%。我应该对模型进行哪些更改?
答案 0 :(得分:1)
让我们首先从更简单的部分开始。知道输入和输出层的数量及其神经元的数量是最容易的部分。每个网络都有一个输入层和一个输出层。输入层中神经元的数量等于正在处理的数据中输入变量的数量。输出层中神经元的数量等于与每个输入关联的输出的数量。 但是挑战在于知道隐藏层及其神经元的数量。
答案是,您无法分析计算人工神经网络中用于解决特定现实世界预测建模问题的层数或每层要使用的节点数。 层数和每层中的节点数是您必须指定和学习的模型超参数。 您必须使用强大的测试工具和受控实验来找到答案。无论采用哪种启发式方法,您都可能会遇到所有答案,这都需要重新进行仔细的试验,以了解哪种方法最适合您的特定数据集。
同样,过滤器大小也是训练网络之前应指定的一种超参数。
对于图像识别问题,如果您认为网络要识别对象需要大量像素,则将使用大型滤镜(如11x11或9x9)。如果您认为区分对象的是一些小的局部特征,则应使用小型滤镜(3x3或5x5)。
这些是一些技巧,但不存在任何规则。
有很多技巧可以提高深度学习模型的准确性。请参考此链接Improve deep learning model performance。
希望这会对您有所帮助。