keras CNN模型预测很好,但只有一个标签不能预测

时间:2019-11-18 08:44:15

标签: python machine-learning keras conv-neural-network

在训练模型以使用每个类别的2800张图像预测24个类别的标签并获取5000张图像进行验证后,我运行了一些测试以查看标签的预测质量,然后设计了一个程序来获取所有图像在文件夹测试和预测标签中,所有类别的效果都很好,除了用于测试的1000张图像中的第19类没有预测为19

任何人都有解决方案

这是模型架构:

model = Sequential()

model.add(Conv2D(filters=32, kernel_size=2,padding='same',activation='relu',input_shape=(32,32,1)))

model.add(MaxPooling2D(pool_size=2))


model.add(Conv2D(filters=64, kernel_size=2, padding='same', activation='relu'))

model.add(MaxPooling2D(pool_size=2))

model.add(Flatten())

model.add(Dense(1024, activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(24, activation='softmax'))

model.summary()

这是优化程序和培训师:

optimizer = rmsprop(learning_rate=0.0001)

model.compile(loss='categorical_crossentropy',optimizer= optimizer,metrics=['accuracy'])

checkpointer = ModelCheckpoint(filepath='CNN_newData.hdf5',verbose=1,
                               save_best_only=True)
hist = model.fit(x_train,y_train,batch_size=128,epochs=100,
                 validation_data=(x_valid,y_valid),callbacks=[checkpointer],
                 verbose=2,shuffle=True)

这是为预测准备的图像的方式:

  for img in images:

            read_img = cv2.imread('test-images/' + file + '/' + img)
            read_img = cv2.cvtColor(read_img,cv2.COLOR_RGB2GRAY)
            read_img = read_img.reshape( -1,32, 32, 1)
            read_img = read_img.astype('float32')/255
            maxind = model.predict_classes(read_img)

1 个答案:

答案 0 :(得分:2)

  • 我认为您的数据集均衡吗?
  • 能否请您上传损失/准确性曲线?
  • 您是否尝试过其他优化器?您的RMSprop learning_rate 低于默认值,并且很浅。
  • 您是否可以共享数据?您至少可以确定,那里没有矛盾的知识吗?
  

read_img = cv2.imread('test-images /'+文件+'/'+ img)

请不要自己连接路径。一旦将这种模型推到基于Linux的云中,就会遇到麻烦。选中pathlib

  • 尝试使用默认参数运行adam
  • model.add(Dense(1024, activation='relu'))-后面只有24个标签,它很大。尝试较小的东西,例如240。
  • kernel_size 看起来很奇怪,转换内核不应该是奇数吗?尝试 kernel_size = 3
  • 尝试添加一些正则化