Skip to main content
 首页 » 编程设计

python之如何在 tensorflow 中加权剪辑

2024年11月24日23傻小

我正在 mnist 数据集上的 tensorflow 中编写一个 wgan,它运行良好,但我发现很难在 tensorflow 中裁剪鉴别器模型 [-0.01,0.01] 的权重。在 keras我们可以使用 weight clipping。

for l in self.discriminator.layers: 
    weights = l.get_weights() 
    weights = [np.clip(w, -self.clip_value, self.clip_value) for w in weights] 
    l.set_weights(weights) 

我找到了 weight clipping discrimantor 的 tensorflow 文档

tf.contrib.gan.features.clip_discriminator_weights( 
    optimizer, 
    model, 
    weight_clip 
) 

除此之外,没有太多介绍如何使用此功能。

#my tf code 
def generator(z): 
    h=tf.nn.relu(layer_mlp(z,"g1",[10,128])) 
    prob=tf.nn.sigmoid(layer_mlp(h,"g2",[128,784])) 
    return prob 
 
 
def discriminator(x): 
    h=tf.nn.relu(layer_mlp(x,"d1",[784,128])) 
    logit=layer_mlp(h,"d2",[128,1]) 
    prob=tf.nn.sigmoid(logit) 
    return prob 
 
G_sample=generator(z) 
D_real= discriminator(x) 
D_fake= discriminator(G_sample) 
 
 
D_loss = tf.reduce_mean(D_real) - tf.reduce_mean(D_fake) 
G_loss = -tf.reduce_mean(D_fake) 
 
for epoch in epochs: 
    #training the model 

请您参考如下方法:

添加到 Yaakov 的答案中,您可以将 tf.clip_by_value 与 trainable_variables 一起使用,如本 repo https://github.com/hcnoh/WGAN-tensorflow2 所示

for w in model.discriminator.trainable_variables: 
  w.assign(tf.clip_by_value(w, -clip_const, clip_const))