Machine learning keras(cnn+;nn)预测4个类别中只有一个类别

Machine learning keras(cnn+;nn)预测4个类别中只有一个类别,machine-learning,neural-network,image-recognition,conv-neural-network,keras,Machine Learning,Neural Network,Image Recognition,Conv Neural Network,Keras,我使用两个不同的数据集,每个数据集有1200个图像。第一个数据集有4个类,第二个数据集有6个类 这是一个简单的图像分类问题。但是,在训练期间,在每一个历元中,我得到的两个数据集的验证精度值是相同的 我已经使用imagemagick将两个数据集的所有图像调整为100x100 我不知道我在哪里犯了错误。 提前谢谢 终端输出: Using Theano backend. Couldn't import dot_parser, loading of dot files will not be possi

我使用两个不同的数据集,每个数据集有1200个图像。第一个数据集有4个类,第二个数据集有6个类

这是一个简单的图像分类问题。但是,在训练期间,在每一个历元中,我得到的两个数据集的验证精度值是相同的

我已经使用imagemagick将两个数据集的所有图像调整为100x100

我不知道我在哪里犯了错误。 提前谢谢

终端输出:

Using Theano backend.
Couldn't import dot_parser, loading of dot files will not be possible.
X_train shape: (880, 3, 100, 100)
880 train samples
220 test samples
train:
0 418
3 179
2 174
1 109
dtype: int64
test:
0 98
3 55
2 43
1 24
dtype: int64
Train on 880 samples, validate on 220 samples
Epoch 1/5
880/880 [==============================] - 582s - loss: 1.3444 - acc: 0.4500 - val_loss: 1.2752 - val_acc: 0.4455
Epoch 2/5
880/880 [==============================] - 540s - loss: 1.2624 - acc: 0.4750 - val_loss: 1.2802 - val_acc: 0.4455
Epoch 3/5
880/880 [==============================] - 540s - loss: 1.2637 - acc: 0.4750 - val_loss: 1.2712 - val_acc: 0.4455
Epoch 4/5
880/880 [==============================] - 538s - loss: 1.2484 - acc: 0.4750 - val_loss: 1.2623 - val_acc: 0.4455
Epoch 5/5
880/880 [==============================] - 537s - loss: 1.2375 - acc: 0.4750 - val_loss: 1.2486 - val_acc: 0.4455

prediction on test data:
In [26]: model.predict_classes(X_test)
220/220 [==============================] - 37s

Out[26]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
代码:

from\uuuuu future\uuuuu导入打印功能
从keras.dataset导入cifar10
从keras.preprocessing.image导入ImageDataGenerator
从keras.models导入顺序
从keras.layers.core导入致密、脱落、激活、展平、重塑
从keras.layers.convolution导入卷积2D、MaxPoolig2D、卷积1D、MaxPoolig1D
从keras.optimizers导入新加坡元
从keras.utils导入np_utils、generic_utils
将numpy作为np导入
从sklearn.cross\u验证导入序列测试\u分割
作为pd进口熊猫
批量大小=30
nb_类=4
nb_epoch=10
img_行,img_列=100100
img_通道=3
X=np.load('image data.npy')
y=np.load('image class.npy')
#数据在训练集和测试集之间混合和分割
X_序列,X_测试,y_序列,y_测试=序列测试分割(X,y,测试大小=0.2,随机状态=100)
打印('X_列形状:',X_列形状)
打印(X_序列形状[0],“序列样本”)
打印(X_测试形状[0],“测试样本”)
打印(“序列号:\n”,局部放电值\u计数(y\u序列))
打印(“测试:\n”,局部放电值\u计数(y\u测试))
Y_列=np_实用到分类(Y_列,nb_类)
Y_测试=np_实用到_分类(Y_测试,nb_类)
模型=顺序()
添加(卷积2D(32,3,3,border_mode='same',input_shape=(img_通道,img_行,img_列)))
添加(激活('relu'))
模型添加(卷积2D(32,3,3))
添加(激活('relu'))
add(MaxPooling2D(池大小=(2,2),跨步=(1,1)))
模型。添加(辍学率(0.25))
添加(卷积2D(64,3,3,border_mode='same'))
添加(激活('relu'))
模型添加(卷积2D(64,3,3))
添加(激活('relu'))
add(MaxPooling2D(池大小=(2,2),跨步=(1,1)))
模型。添加(辍学率(0.25))
model.add(展平())
模型.添加(密度(256))
添加(激活('relu'))
模型。添加(辍学率(0.25))
模型添加(密集(nb_类))
添加(激活('softmax'))
sgd=sgd(lr=0.01,衰变=1e-6,动量=0.9,nesterov=True)
compile(loss='classifical\u crossentropy',optimizer=sgd)
模型拟合(X_序列,Y_序列,批次大小=批次大小,nb_历元=nb_历元,随机数=真,显示精度=真,验证数据=(X_测试,Y_测试))
out=模型预测类(X检验)

添加您的网络和优化器。我使用的是本文提供的糖尿病视网膜病变数据集,可能100x100张图像太小,无法诊断这些疾病。还可以尝试使用Adam而不是SGD,并让它运行超过5个时代。更多的卷积可能也会有帮助。我已经尝试了不同的优化器和更多的时代,但没有改进。上述网络为另一个多标签分类问题@aleju工作