如何将多GPU权重转换为单个GPU模型?

时间:2019-07-16 13:47:12

标签: python tensorflow keras deep-learning

将权重从经过多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的所有图层权重。

非常感谢,

0 个答案:

没有答案