Tensorflow GAN没有为任何变量提供渐变

时间:2018-03-28 21:30:30

标签: python tensorflow deep-learning

我正在尝试在tensorflow中构建LSTM-GAN。

仅在descriminator net中,当我尝试计算损失时,我得到错误

ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, between variables ["<tf.Variable 'd_w:0' shape=(128, 1) dtype=float32_ref>", "<tf.Variable 'd_b:0' shape=(1,) dtype=float32_ref>"] and loss Tensor("Neg:0", shape=(), dtype=float32).

descriminator net看起来像这样

## Descriminator net
x = tf.placeholder("float", [None, time_steps, num_inputs], name='x')
d_w = tf.Variable(tf.random_normal([num_units,1]), name='d_w')
d_b = tf.Variable(tf.random_normal([1]), name='d_b')

des_vars = [d_w, d_b]

def descriminator(x):
    inp = tf.unstack(x, time_steps, 1)
    lstm_layer = rnn.BasicLSTMCell(num_units,forget_bias=1, reuse=tf.AUTO_REUSE)
    outputs, _ = rnn.static_rnn(lstm_layer, inp, dtype='float32')
    descriminator_logit = tf.nn.sigmoid(tf.matmul(outputs[-1],g_w)+g_b)

    return descriminator_logit

g_prediction = generator(Z)
d_real = descriminator(x)
d_fake = descriminator(Y)


d_loss = -tf.reduce_mean( tf.log(d_real) + tf.log(1. - d_fake) )
g_loss = -tf.reduce_mean( tf.log(d_fake) )

g_optimizer = tf.train.AdamOptimizer().minimize(g_loss, var_list=gen_vars)
d_optimizer = tf.train.AdamOptimizer().minimize(d_loss, var_list=des_vars)

我不确定这是打破它的哪一部分......我原以为它可能是d_fake Variavle。 Y是一个tf.placeholder,其形状与x相同但重新格式化,因此需要生成器网络的输出(这是在tf.session()

内完成的

任何想法为什么会破坏?

1 个答案:

答案 0 :(得分:2)

des_varsg_loss未使用d_loss中的变量。您的descriminator功能使用g_wg_b但不使用d_wd_b

使用TensorBoard,您可以非常轻松地查看哪些操作取决于哪些变量。在这种情况下,您是否已经使用过它,您会看到d_wd_b与图表中的d_lossg_loss操作断开连接。