Keras 我的模型行得通吗?

Keras 我的模型行得通吗?,keras,conv-neural-network,gesture-recognition,Keras,Conv Neural Network,Gesture Recognition,我学习CNN已经有一段时间了,对它还不太了解。所以我插入了我认为重要的内容 我有一个手势数据集,包含1400张10类的图片。我正在spyder IDE的keras中构建一个CNN模型。顺序如下 model = Sequential() model.add(Convolution2D(32, 3,3,border_mode='same', input_shape=input_shape)) model.add(Activation('relu')) model.add(Convolution2D

我学习CNN已经有一段时间了,对它还不太了解。所以我插入了我认为重要的内容

我有一个手势数据集,包含1400张10类的图片。我正在spyder IDE的keras中构建一个CNN模型。顺序如下

model = Sequential()

model.add(Convolution2D(32, 3,3,border_mode='same', input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))

model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))

model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=["accuracy"])
我用30个纪元对其进行了培训,并获得:

Test Loss: 0.260991449015
Test accuracy: 0.928571430274

             precision    recall  f1-score   support

    class 0       1.00      0.93      0.96        28
    class 1       0.96      0.96      0.96        26
    class 2       0.92      1.00      0.96        24
    class 3       0.72      0.87      0.79        30
    class 4       0.97      0.97      0.97        35
    class 5       0.90      0.93      0.92        29
    class 6       0.93      1.00      0.97        28
    class 7       1.00      0.97      0.98        33
    class 8       1.00      0.95      0.97        19
    class 9       0.95      0.71      0.82        28

avg / total       0.93      0.93      0.93       280

Confusion matrix, without normalization
[[26  0  0  0  1  0  1  0  0  0]
 [ 0 25  1  0  0  0  0  0  0  0]
 [ 0  0 24  0  0  0  0  0  0  0]
 [ 0  0  1 26  0  3  0  0  0  0]
 [ 0  1  0  0 34  0  0  0  0  0]
 [ 0  0  0  1  0 27  1  0  0  0]
 [ 0  0  0  0  0  0 28  0  0  0]
 [ 0  0  0  0  0  0  0 32  0  1]
 [ 0  0  0  1  0  0  0  0 18  0]
 [ 0  0  0  8  0  0  0  0  0 20]]
,,

问题1:这种模式做得好吗? 问题2:我是不是太合适了? 问题3:我怎样才能用最好的方式为CNN建模


感谢您的时间

考虑到您的测试数据集的混淆矩阵在矩阵的对角线部分有非常高的数字,而在其他地方几乎为零,这表明您的模型已正确拟合(除非在一种情况下,您的混淆矩阵中输入了8)

但是查看您的数据集,如您所述,它只包含1400个图像和10个类,平均每个类140个图像。140个例子对于神经网络来说不是一个很好的推广数字。我不确定您的数据集中有多少多样性,以及您希望在生产中如何部署网络。 例如,考虑您的数据集具有所有具有绿色背景的图像,并且只存在手图像。如果在测试时,您能够以某种方式模拟此行为,即绿色背景和仅手部图像,则您的网络可能在生产中表现良好。但是想象一下,如果这种情况没有得到模拟,并且您在生产中部署了您的模型,那么您的模型很可能会表现糟糕


若要在数据集中添加多样性,您可以利用和模拟各种类型的失真,以便您的网络了解更多所需的功能。

若要测试您是否过度拟合,请将部分数据拆分为一个训练集和一个测试集,然后如果您的训练集开始执行测试集,则您的模型过度拟合,因为它不能很好地推广到新的看不见的数据。我试图通过将一些混乱矩阵、精度和重述表的图像按顺序放置来进行编辑。然而,这意味着我的代码格式不正确。事实上我没有。问题是这个问题已经结束了,因为这个问题没有确切的答案。人工神经网络总是工作得很好,只要它设置正确,就无法给出正确的答案来改进模型。所以Q1和Q3是无法回答的(从技术上来说)。谢谢!我无法访问ImageDataGenerator。它不起作用了!