MachineLP的Github(欢迎follow):https://github.com/MachineLP
我们在搭建模型的时候,受到一些收敛条件的限制,像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时候经过严格的理论推导,当理论不充分时,在使用的时候需要多实验室,实验出好的结果,可以再找理论支撑嘛,哈哈丷