2017-06-22 77 views
2

我想用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

这听起来像你正在尝试做一些转移学习(即使用以来V3模型,一组不同的图像比它最初训练做分类)。有关于这个问题在这里 https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0

基本上所有你需要做的就是把你的训练图像到每个班级命名的文件夹(你将有1003个文件夹)一个伟大的教程,并运行retrain.py脚本(包含在教程)。你想确保rebin.py运行在新的图像文件夹上。