如何将多个Keras模型的权重存储到单个变量/数组,以便后续调用set_weights?
解决Keras多模型权重存储与复用问题
首先,你原代码的问题在于空列表不能直接通过索引赋值,weights = []初始为空,weights[i]会触发IndexError,因为列表还没有对应索引位置的元素。
正确的权重存储方式
你可以用列表的append()方法逐个添加模型权重:
weights = [] # 假设model是包含3个Keras模型的列表 for mdl in model: weights.append(mdl.get_weights())
或者提前初始化一个长度匹配的列表再赋值:
weights = [None] * 3 for i in range(3): weights[i] = model[i].get_weights()
model.get_weights()返回的是包含numpy数组的列表,每个数组对应模型中一层的权重/偏置,这种结构可直接被model.set_weights()识别。
后续复用权重的方法
当需要把存储的权重放回模型时,对应索引调用set_weights()即可:
# 给第一个模型恢复权重 model[0].set_weights(weights[0]) # 批量恢复所有模型权重 for i in range(3): model[i].set_weights(weights[i])
注意:恢复权重的模型结构必须和存储权重时的模型完全一致(层数量、层类型、输出形状等均需匹配),否则set_weights()会报错。
内容的提问来源于stack exchange,提问作者Nikhil Ostwal
相关产品推荐
相关产品推荐

