我想重新训练1003类的初始模型,其中前1000个类与imagenet(初始模型)相同。所以我采用了初始模型并提取了最终的图层权重,并为其添加了3个列。我弹出最后一层创建了另一个具有1003个类的层,并且我已经改变了权重,因为前1000个类的权重与开始时保持相同但是训练时准确性从0开始,我没想到。出了什么问题?
这是我的代码
base_model = InceptionV3(weights='imagenet', include_top=False)
m = InceptionV3(weights='imagenet', include_top=True)
a=m.layers[312].get_weights()
k=np.random.normal(size=[2048,3])
k=k/3
l=np.random.normal(size=[3])
l=l/3
a[0]=np.concatenate((a[0],k),axis=1)
a[1]=np.concatenate((a[1],l),axis=0)
x = base_model.output
x = GlobalAveragePooling2D()(x)
predictions = Dense(nb_classes, activation='softmax')(x)
model = Model(input=base_model.input, output=predictions)
model.layers[312].set_weights(a)
答案 0 :(得分:0)
听起来你正在尝试进行一些转移学习(即使用初始v3模型来分类不同于最初训练的图像集)。这里有一个关于这个主题的很棒的教程 https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0
基本上你要做的就是将你的训练图像放到每个类命名的文件夹中(你有1003个文件夹)并运行retrain.py脚本(包含在教程中)。您希望确保在新的图像文件夹上运行retrain.py。