【问题标题】:Is my model working well? [closed]我的模型运行良好吗? [关闭]
【发布时间】:2017-11-22 14:05:25
【问题描述】:

我研究 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 进行建模?

感谢您的宝贵时间

【问题讨论】:

  • 为了测试你是否过度拟合,将一些数据分成一个训练集和一个测试集,然后如果你的训练集开始执行你的测试集,你的模型就过度拟合了,因为它不能很好地推广到新的看不见的数据。
  • 我正在尝试通过放置一些混淆矩阵、精度和重新计算表的图像,顺序进行编辑。但是,据说我的代码格式不正确。事实上我没有。
  • 问题是这个问题被关闭了,因为这个问题没有确切的答案。只要设置正确,ANN 就一直运行良好,无法给出正确的答案来改进模型。所以 Q1 和 Q3 是无法回答的(技术上......)。

标签: keras conv-neural-network gesture-recognition


【解决方案1】:

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

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

要在您的数据集中添加多样性,您可以使用ImageDataGenerator 并模拟各种类型的扭曲,以便您的网络学习更多所需的特征。

【讨论】:

  • 谢谢!我无法访问 ImageDataGenerator。它不工作!
猜你喜欢
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多