【发布时间】:2019-06-06 22:37:41
【问题描述】:
您如何将 InceptionV3、ResNet50 等在 ImageNet(约 1000 个类)上训练的模型的迁移学习应用于超过 1000 个类的问题?
我正在使用 Keras,但对其他解决方案持开放态度。我熟悉加载训练网络的所有权重(如 ImageNet 上的 ResNet50)的想法,除了顶部(具有 1000 个单位的最终分类层),然后将网络的末端连接到我可以指定的其他层(全连接层、池化等)。然而,在许多这些网络中,最后一层之前的层少于 3000 个单元,因此添加一个超过 3000 个单元的层将是一个扩展层,有点像自动编码器中的解码器。通常,我已经看到最后一层的尺寸减小了。解决这个问题的最佳方法是什么?
Keras 应用中的例子是:
from keras.applications.inception_v3 import InceptionV3
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K
# create the base pre-trained model
base_model = InceptionV3(weights='imagenet', include_top=False)
# add a global spatial average pooling layer
x = base_model.output
x = GlobalAveragePooling2D()(x)
# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
# and a logistic layer -- let's say we have 200 classes
predictions = Dense(200, activation='softmax')(x)
【问题讨论】:
-
这里的实际编程问题是什么?
-
我正在尝试解决一个图像分类问题,我有超过 3000 个不同的对象要分类。
-
是的,这很清楚,但问题是什么?我认为这样数量的课程没有任何问题。
标签: machine-learning keras conv-neural-network