【问题标题】:keras CNN model predicts fine but only one label doesn't predictkeras CNN 模型预测良好,但只有一个标签不能预测
【发布时间】:2020-03-13 14:20:23
【问题描述】:

在我训练模型预测 24 个类别的标签,每个类别使用 2800 张图像并拍摄 5000 张图像进行验证后,我运行了一些测试来查看标签的预测质量,我设计了一个程序来获取所有图像在文件夹测试和预测标签中,所有类都很好,除了第 19 类,其中 1000 张图像用于测试,没有预测为 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)

【问题讨论】:

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


    【解决方案1】:
    • 我假设您的数据集是均衡的?
    • 能否上传您的损失/准确度曲线?
    • 您是否尝试过其他优化器?您的RMSprop learning_rate 低于默认值且净值较浅。
    • 您可以共享数据吗?您至少确定那里没有相互矛盾的知识吗?

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

    请不要自己连接路径。一旦你将这个模型推送到一些基于 linux 的云上,你就会遇到麻烦。检查pathlib

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

    【讨论】:

    • 数据集是平衡的(2800 个训练图像,1000 个测试图像)我没有损失/准确度曲线(不知道如何使用 Keras 绘制它们)是的,我尝试了 Adam 优化器相同的结果(至于学习率,我降低了它,因为模型正在迈出大步)至于我无法分享的数据,因为它确实属于一家公司,但我通过使用 Keras 增强添加了更多数据,路径仅供个人测试查看单独每个标签的准确性
    • 每个班级?
    • 我实现了你所说的一切,除了正则化步骤你有任何我能理解的文档,我看到了一个视频,他们在密集层中使用了 1024 开发的 mnist 分类,所以我为什么要把它减少到 240例如
    • 如果你的网络容量太高,即使熵很低,它也会过拟合。检查这个postthis 一个。
    • 在架构方面几乎没有硬性规定。你必须摆弄参数以获得一些直觉。否则你会在调整模型的超参数时等待。
    猜你喜欢
    • 1970-01-01
    • 2021-08-02
    • 2020-01-02
    • 1970-01-01
    • 2018-12-13
    • 2021-06-06
    • 1970-01-01
    • 2020-09-08
    • 2020-05-14
    相关资源
    最近更新 更多