我得到了一个具有多个重要层的重要模型,我想对其执行以下操作: 我创建一个值 v 的随机向量,其长度等于模型参数的数量。 现在我想以直观的方式将向量 v 添加到模型参数中,即将 v 的每个分量添加到模型的单个参数中。然后将该总和设置为新的权重。所以基本上我需要的就是所有模型参数作为 N x 1 向量,将 v 添加到该 Nx1 向量,然后将该 Nx1 向量放回到模型中。
目前我做了类似的事情(未经测试):
N = model.count_params()
b = GenerateVectorV(N)
weights_per_layer = model.get_weights()
idx = 0
for i in range(0, len(weights_per_layer)):
sec = b[idx:idx+weights_per_layer[i].size]
idx += weights_per_layer[i].size
weights_per_layer[i] = weights_per_layer[i] + np.reshape(sec, weights_per_layer[i].shape)
然后我可以使用更改后的权重更新模型。这感觉太像 C 代码了,我确信有更简单的方法。
让我们想象一下,您只想添加高斯噪声(只需替换为任何其他噪声发生器),那么逻辑实际上只是一个衬垫
new_weights = [weight + np.random.normal(size=weight.shape)
for weight in model.get_weights()]