A有两个具有相同架构的模型,但训练有不同的损失。
这些模型给出不同的结果。我想在这些模型之间结合它们的权重线性进行“平衡”:
combined_weights = k * weights_a + (1 - k) * weights_b
我正在研究的问题允许这种方法。有人认为这种方法比对输出进行插值更有效。
我也有这种方法的PyTorch实现:
k = 0.3
model_a = torch.load(...)
model_b = torch.load(...)
combined_model = OrderedDict()
for i, v_a in model_a.items():
v_b = model_b[i]
combined_model[i] = k * v_a + (1 - k) * v_b
torch.save(combined_model, ...)
我如何在TensorFlow中做同样的事情?我试图结合我的模型的权重做到这一点:
k = 0.3
weights_a = model_a.get_weights()
weights_b = model_b.get_weights()
combined_weights = k * weights_a + (1 - k) * weights_b
combined_model.set_weights(combined_weights)
但是在出现错误k * weights_a
:
can't multiply sequence by non-int of type 'float'
那么,我该怎么办呢?
那是因为类型不匹配。双方weights_a
并weights_b
都不能由花车乘只是普通的Python列表(这是不是你正在寻找反正操作)。
权重以ndarray
格式存储为这些列表的元素。使其工作最简单的方法可能是遍历权重并针对每个权重执行操作ndarray
k = 0.3
weights_a = ...
weights_b = ...
combined = []
for i in range(len(weights_a)):
c = k * weights_a[i] + (1 - k) * weights_b[i]
combined.append(c)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句