将权重从经过多GPU训练的模型加载到CPU或单GPU模型中时,会出现错误。
我将DenseNet121与imagenet权重一起使用,由于输出的激活函数特性不同,因此在其上添加了单独的密集层,并将它们串联在输出层中
base_model = DenseNet121(include_top=False,weights="imagenet", input_shape = IMG_SHAPE)
x = base_model.output
x = GlobalAveragePooling2D()(x)
class1 = Dense(512,activation="relu")(x)
class1 = Dense(3,activation="softmax")(class1)
class2 = Dense(512,activation="relu")(x)
class2 = Dense(4,activation="softmax")(class2 )
class3 = Dense(512,activation="relu")(x)
class3 = Dense(5,activation="sigmoid")(class3 )
class4 = Dense(512,activation="relu")(x)
class4 = Dense(6,activation="softmax")(class4 )
class5 = Dense(512,activation="relu")(x)
class5 = Dense(7,activation="sigmoid")(class5 )
class6 = Dense(512, activation="relu")(x)
class6 = Dense(8, activation = "softmax")(class6 )
con = concatenate([class1 ,class2 ,class3 ,class4 ,class5 ,class6 ])
model = Model(inputs = base_model.input, outputs = con)
model = multi_gpu_model(model, gpus = 2)
## After training is complete:
model.save_weights('model.h5')
在仅CPU模式下使用tf.keras时无法加载。除此之外,由于权重的转换问题,我不确定在部署到Web时如何使用多GPU模型。
我还尝试通过以下方式节省重量
multi_gpu_model = model.layers[-2]
multi_gpu_model.save_weights("single_gpu_model.h5")
它可以在单个GPU或CPU模式下工作,但不能覆盖IMO的所有图层权重。
非常感谢,