Как утяжелить клип в tensorflow?

#python #tensorflow #deep-learning

#python #tensorflow #глубокое обучение

Вопрос:

Я кодирую wgan в tensorflow для набора данных mnist, и это работает хорошо, но мне трудно обрезать веса модели дискриминатора [-0.01,0.01] в tensorflow. В keras мы можем выполнять обрезку веса с помощью.

 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)
  

Я нашел документ 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
  

Ответ №1:

Добавляя к ответу Яакова, вы можете использовать tf.clip_by_value с trainable_variables, как показано в этом репозитории https://github.com/hcnoh/WGAN-tensorflow2

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

Ответ №2:

Вы можете использовать приведенную ниже функцию для реализации отсечения в tensorflow.

 tf.clip_by_value(
    t,
    clip_value_min,
    clip_value_max,
    name=None
)
  

Пожалуйста, обратитесь к приведенным ниже ссылкам о том, как реализовать это в вашем коде.