如何扩展CNN以识别更多对象?

我创建了一个简单的CNN,用于区分五种不同的花类。我希望扩展这个CNN,使其能够识别更多的对象。例如,我希望它能够识别啤酒杯、窗户、树等的图像。下面是我用于分类花朵的代码,效果还不错。但是,如何扩展它,使其能够识别越来越多的对象呢?我不想使用任何预训练模型。我希望它能够学会分类更多的对象。请帮助我。

from keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequentialfrom keras.layers import Convolution2D, MaxPooling2D, Flatten, Denseclassifier=Sequential()#1st Convolution Layerclassifier.add(Convolution2D(32, 3, 3, input_shape=(64,64,3),activation="relu"))#Poolingclassifier.add(MaxPooling2D(pool_size = (2, 2)))# Adding a second convolutional layerclassifier.add(Convolution2D(32, 3, 3, activation = 'relu'))classifier.add(MaxPooling2D(pool_size = (2, 2)))# Flatteningclassifier.add(Flatten())classifier.add(Dense(output_dim = 128, activation = 'relu'))classifier.add(Dense(output_dim = 64, activation = 'relu'))classifier.add(Dense(output_dim = 5, activation = 'softmax'))classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])print(classifier.summary())train_datagen = ImageDataGenerator(rescale = 1./255,                                   shear_range = 0.2,                                   zoom_range = 0.2,                                   horizontal_flip = True)test_datagen = ImageDataGenerator(rescale = 1./255)training_set= train_datagen.flow_from_directory('flowers/train_set',                                                target_size=(64,64),                                                batch_size=32,                                                class_mode='categorical')test_set= test_datagen.flow_from_directory('flowers/test_set',                                                target_size=(64,64),                                                batch_size=32,                                                class_mode='categorical')classifier.fit_generator(training_set,                         samples_per_epoch = 3000,                         nb_epoch = 25,                         validation_data = test_set,                         nb_val_samples=1000)

回答:

如果你想使用自己的模型,而不是微调像Vgg或Inception这样的预训练模型(例如),你应该阅读这篇论文:

iCaRL 增量网络(论文)

当然,你需要改变你的算法和代码。我找到了这个GitHub仓库,看来他们已经实现了:iCaRL在TensorFlow上的GitHub仓库

但你需要使用TensorFlow。查看它,学习如何将它与你的模型一起使用(如果可能的话,我今天才找到这篇论文和这个仓库,所以我还没有仔细看过)。

你所问的问题仍在研究领域,因此还没有广泛或常见的技术。正如我在评论中所说,搜索关键词“增量学习”,还有其他关于这个主题的论文。(查看iCaRL论文的相关工作部分,所有关于这个主题的主要技术和论文都被很好地总结了!)

另外,请注意,添加与你之前数据集非常不同的对象(例如你的花朵+啤酒或窗户的例子),会大大降低你的准确性。你将需要更长时间的训练才能获得更好的准确性(但也可能你的准确性永远不会像以前那样提高)。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注