权重的转移导致更小的模型(Keras)



我正在尝试将dropout层插入到我的模型中。因此,我加载旧模型,创建新的模型体系结构,并转移权重。

但是,当我保存新模型时,内存占用要小得多:

113 兆字节与原始 338 兆字节。 我怀疑我一定在这个过程中犯了一个错误,但模型似乎保存并正在运行。准确度降低了约15%,但无法判断这是否是辍学效应。

这是我的代码:

def add_dropout(layer_num = None, prob = .4):
#layer num is where you will insert the dropout layer

model = load_model(model_path)
layers_set1 = [layer for layer in model.layers[:layer_num + 1]]
x = layers_set1[-1].output
x = Dropout(prob, name = "drop_test1")(x)
layers_set2 = [layer for layer in model.layers[layer_num+1:]]
for layer in layers_set2:
print(layer)
x = layer(x)

final_model = Model(inputs = layers_set1[0].input, outputs = x)
for num, layer in enumerate(layers_set1):
weights = layer.get_weights()
final_model.layers[num].set_weights(weights)
for num, layer in enumerate(layers_set2, start = len(layers_set1) + 1):
weights = layer.get_weights()
final_model.layers[num].set_weights(weights)

final_model.save(os.path.join(save_dir, "dropout_added.h5"))

您可能使用的是像 Adam 这样的高级优化器,它有一个状态,如果可用,则会保存,并且其通常的大小是模型参数数量的 2 倍。

因此,如果加载模型并基于它保存一个新模型,则优化器状态将丢失,模型文件大小将减小。如果在训练后保存模型,则将保存优化器状态,并且应获得类似的模型文件大小。

最新更新