如何为 Keras 模型的每个权重添加随机值

问题描述 投票:0回答:1

我得到了一个具有多个重要层的重要模型,我想对其执行以下操作: 我创建一个值 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 代码了,我确信有更简单的方法。

keras neural-network layer
1个回答
0
投票

让我们想象一下,您只想添加高斯噪声(只需替换为任何其他噪声发生器),那么逻辑实际上只是一个衬垫

new_weights = [weight + np.random.normal(size=weight.shape)
               for weight in model.get_weights()]
© www.soinside.com 2019 - 2024. All rights reserved.