我目前正在研究一种对食物图像进行分类的CNN模型。到目前为止,我已经设法建立了一个正常运作的CNN,但我想提高这种能力。对于数据集,我使用了Kaggle中的一些图像,而我自己的集合中使用了一些图像。
以下是有关数据集的一些信息:
这是我的CNN模型:
classifier = Sequential()
def cnn_layer_creation(classifier):
classifier.add(InputLayer(input_shape=[224,224,3]))
classifier.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu',data_format='channels_first'))
classifier.add(MaxPooling2D(pool_size=5,padding='same'))
classifier.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
classifier.add(MaxPooling2D(pool_size=5,padding='same'))
classifier.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu',data_format='channels_last'))
classifier.add(MaxPooling2D(pool_size=5,padding='same'))
classifier.add(Dropout(0.25))
classifier.add(Flatten())
classifier.add(Dense(64,activation='relu'))
classifier.add(Dropout(rate=0.5))
classifier.add(Dense(91,activation='softmax'))
# Compiling the CNN
classifier.compile(optimizer="RMSprop", loss = 'categorical_crossentropy', metrics = ['accuracy'])
data_initialization(classifier)
def data_initialization(classifier):
# Part 2 - Fitting the CNN to the images
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
training_set = train_datagen.flow_from_directory('food_image/train',
target_size = (224, 224),
batch_size = 100,
class_mode = 'categorical')
test_set = test_datagen.flow_from_directory('food_image/test',
target_size = (224, 224),
batch_size = 100,
class_mode = 'categorical')
classifier.fit_generator(training_set,
steps_per_epoch = 100,
epochs = 100,
validation_data = test_set,
validation_steps = 100)
classifier.save("brynModelGPULite.h5")
classifier.summary()
def main():
cnn_layer_creation(classifier)
在GPU上进行训练(nVidia 980M)
不幸的是,准确度没有超过10%。我尝试过的事情是:
这些都没有提高准确性。
任何人都可以对我如何提高模型精度有所启发吗?
您只能扩充训练数据。
以下代码
test_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
应该
test_datagen = ImageDataGenerator(rescale = 1./255)
首先,我假设您正在从头开始构建模型。因为这样的训练在较少的时期(我假设你不会训练你的模型超过1000个时期),因为网络不会完全演变,所以没有帮助,因为当训练时,这些表示在如此少的时代内不会被完全学习从头开始的模型。您可以尝试将时期数增加到10000左右并查看。相反,为什么不尝试使用相同的转移学习,另外你也可以使用特征提取和微调或两者都使用训练有素的网络。作为参考,您可以查看Francois Chollet在题为“使用Python进行深度学习”一书中的第5章。
我和另一个数据集有同样的问题,我用globalAveragepooling
替换了flatten图层,它解决了这个问题。
我不确定这对你有用,但由于我的模型有类似于你的模型,我认为这可以帮到你。但不同的是,我训练我的模型为3个班级。