我的模型运行良好吗? [已关闭]

问题描述 投票:0回答:1

我研究CNN有一段时间了,但还不太了解。所以我插入了我认为重要的内容。

我有一个手势数据集,包含 10 个类别的 1400 张图像。我正在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 个 epoch 的训练并获得了:

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]]

accuracy, loss

Q1:这个模型做得好吗? Q2:我是否过度拟合? Q3:如何以最佳方式对 CNN 进行建模?

感谢您的宝贵时间

keras conv-neural-network gesture-recognition
1个回答
2
投票

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

但是正如您提到的,查看您的数据集,它仅包含 10 个类别的 1400 张图像,平均每个类别 140 张图像。对于神经网络来说,140 个例子并不是一个很好的泛化数字。我不确定您的数据集中有多少多样性以及您希望如何在生产中部署网络。 例如,假设您的数据集包含所有具有绿色背景的图像,并且直接仅存在手部图像。如果在测试时,您可以以某种方式模拟这种行为,即绿色背景和只有手部图像,那么您的网络可能在生产中表现良好。但想象一下,如果这种类型的条件没有得到模拟并且您在生产中部署模型,那么您的模型很可能表现不佳。

要增加数据集的多样性,您可以使用 ImageDataGenerator 并模拟各种类型的扭曲,以便您的网络了解更多所需的功能。

© www.soinside.com 2019 - 2024. All rights reserved.