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

4jb9z9bj  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(113)

我得到了一个有几个非平凡层的非平凡模型,我想做以下事情:我创建一个随机向量值v,其长度等于模型的参数数量。现在我想以直观的方式将向量v添加到模型参数中,即v的每个分量都添加到模型的单个参数中。然后将该总和设置为新的权重。所以基本上我需要的是所有的模型参数作为一个Nx1向量,将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代码了,我相信有更简单的方法。

qxgroojn

qxgroojn1#

让我们想象一下,你只是想添加高斯噪声(只是替换为任何其他噪声发生器),那么逻辑真的只是一个班轮

new_weights = [weight + np.random.normal(size=weight.shape)
               for weight in model.get_weights()]

或者更简单

new_weights = [np.random.normal(loc=weight) for weight in model.get_weights()]

相关问题