我正在尝试在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()
任何想法为什么会破坏?
答案 0 :(得分:2)
des_vars
和g_loss
未使用d_loss
中的变量。您的descriminator
功能使用g_w
和g_b
但不使用d_w
或d_b
。
使用TensorBoard,您可以非常轻松地查看哪些操作取决于哪些变量。在这种情况下,您是否已经使用过它,您会看到d_w
和d_b
与图表中的d_loss
和g_loss
操作断开连接。