我一直在研究有线电视新闻网,但还不太清楚。所以我插入了我认为重要的内容。
我有一个包含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]]
Q1:这个型号表现不错吗? Q2:我是否过度拟合? 问题3:我如何以最佳方式对CNN进行建模?
感谢您的时间
答案 0 :(得分:2)
考虑到您的测试数据集的混淆矩阵在矩阵的对角线部分具有非常高的数字,而在其他地方几乎为零,这表明您的模型已正确拟合(除非在您输入8的情况下你的混淆矩阵)。
但是如你所提到的那样查看你的数据集,它只包含1400个图像,包含10个类,平均每个类140个图像。对于神经网络来说,140个例子并不是一个非常好的数字。我不确定,您的数据集有多大的多样性以及您希望如何在生产中部署您的网络。 例如,假设您的数据集具有绿色背景的所有图像,并且直接仅存在手图像。如果在测试时,您可以以某种方式模拟此行为,即绿色背景和仅手形图像,那么您的网络可能在生产中表现良好。但是想象一下,如果没有模拟这种类型的条件并且你在生产中部署模型,那么你的模型很可能表现不佳。
要在数据集中添加多样性,您可以使用ImageDataGenerator并模拟各种类型的扭曲,以便您的网络学习更多必需的功能。