我正在尝试将SegNet与我自己的班级编号一起使用。因为我只想更改类号,并且想使用权重和几乎所有网络结构,所以我尝试对keras进行微调。
我做到了
1。使用load_model
并加载SegNet的结构和权重
2。。pop(0)
最后一次转换,批处理规范和激活层
3。。我创建了Sequential实例,并放置了旧模型和新的conv,批处理规范和激活层
4。编译新模型
#1 load the model
model = load_model(model_path)
#2 pop the layers
model.layers.pop() #conv
model.layers.pop() #batch norm
model.layers.pop() #activation
#3 create new model
top_model = Sequential()
top_model.add(Conv2D(new_class_num, (1, 1), padding='same'))
top_model.add(Reshape((imagew * imageh, new_class_num)))
top_model.add(Activation('softmax'))
#4 build the new model
top_model.compile(loss='categorical_crossentropy',optimizer=optimizers.RMSprop(lr=1e-5), metrics=['acc'])
model=Model(inputs=model.input, outputs=top_model(model.output))
在top_model.add(Conv2D(new_class_num, (1, 1), padding='same'))
代码处,我警告了Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=3
错误。
我该如何解决?