tf37:tensorflow中将模型的权重值限定范围

我们在搭建模型的时候,受到一些收敛条件的限制,像wgan_loss需要讲权重设置在[-0.01, 0.01],这个操作在TF中是这样完成中。

首先, 需要获得你搭建net的左右变量:

D_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, 'Discriminator_dcgan')

    其中,'Discriminator_dcgan' 是net的名字,其下一层包含很多变量的名字。

然后,遍历每一个变量,将其限定在一定的范围:即小于-1的值设定在-1,大于1的值设定在1。

最后,在每个batch更新完参数后,需要run一下: _ = sess.run(clip_disc_weights)


代码如下:

    D_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, 'Discriminator_dcgan')
    clip_ops = []
    for var in D_vars:
        clip_bounds = [-.01, .01]
        clip_ops.append(
            tf.assign(
                var, 
                tf.clip_by_value(var, clip_bounds[0], clip_bounds[1])
            )
        )
    clip_disc_weights = tf.group(*clip_ops)
    ......
    _ = session.run(clip_disc_weights)


总结,wgan_loss不加入权重限制不会收敛,同时wgan时候经过严格的理论推导,当理论不充分时,在使用的时候需要多实验室,实验出好的结果,可以再找理论支撑嘛,哈哈丷

猜你喜欢

转载自blog.csdn.net/u014365862/article/details/80415200