python - 如何扩展CNN来识别更多物体?

标签 python machine-learning neural-network keras

我创建了一个简单的 CNN 来区分 5 种不同类别的花。我想扩展 CNN 以识别更多物体。例如,我希望 CNN 能够识别一杯啤酒、 window 、树木等的图像。 下面是我编写的用于对花朵进行分类的代码,效果非常好。但如何扩展它,让它识别越来越多的物体。我不想使用任何预先训练的模型。我希望它能够学习对更多对象进行分类。请帮忙。

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D, Flatten, Dense
classifier=Sequential()
#1st Convolution Layer
classifier.add(Convolution2D(32, 3, 3, input_shape=(64,64,3),activation="relu"))
#Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))

# Adding a second convolutional layer
classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))

classifier.add(MaxPooling2D(pool_size = (2, 2)))

# Flattening
classifier.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 an incremnetal network (paper)

当然你必须改变你的算法和代码。我找到了这个 github 存储库,显然他们已经实现了它:Github repo for iCaRL in tensorflow

但是你必须使用tensorflow。查看它以了解如何将它与您的模型一起使用(如果可能的话,我今天才找到这篇论文和这个存储库,所以我还没有看过它)。

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

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

关于python - 如何扩展CNN来识别更多物体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51499231/

相关文章:

python:用元素散布列表的最优雅方式

machine-learning - 在纯 TensorFlow 中使用有状态 Keras 模型

python - 在python中使用基因表达矩阵进行层次聚类

python - 深度学习——关于caffe的一些幼稚问题

neural-network - Caffe 中的缩放层

Python:将正整数和负整数的列表元素字符串转换为int?

python - 在实例化父类(super class)的python中进行子类化

python - scipy 的 PIP 安装在 Ubuntu 14.04 上严重失败

python-3.x - 评估 tf.keras.model 输出之间的成对距离

machine-learning - 我应该应用哪些人工神经网络概念?