我试图制作一个RNN
来生成代码,但是要注意的是,我希望它将代码写入python文件并获取输出。最后,如果输出满足某些条件,则可以通过。例如,如果列表的长度小于50,则可以通过。我尝试为此创建一个自定义损失函数,但遇到一个错误,我无法解决问题。
好吧,我在常规的python函数中迷失了:
def loss_func(generated):
# Write to python file.
# Get the output of that file.
# Check if output meets conditions.
# If so...
return 1.0
else:
return 0.0
我还创建了一个函数,用于将字符串编码为数字,并为其解码提供一个数字。
然后我加载我的数据,对其进行编码,定义了诸如num_inputs
和num_time_steps
之类的东西,为X
创建了一个占位符,并制作了一个基本的LSTM
单元格输出投影包装中的单元格。
那之后,该是我的损失函数了。
encoder_loss = tf.reduce_mean(loss_func(to_string(enc_outputs)))
# 'to_string' is the function I said decoded the data earlier
我还向损失函数添加了一个部分,以使它无论是Tensor
还是None
类型都无法运行,因为否则我会得到错误信息。
它确实有效,但是当我尝试制作train
变量时(在优化程序之后),我得到“没有为任何变量提供渐变”,这是代码:
train = optimizer.minimize(loss_func)
我不知道它是否有帮助,但这是完整的追溯:
ValueError Traceback (most recent call last)
<ipython-input-268-ffd2f0e929af> in <module>
----> 1 train = optimizer.minimize(loss)
c:\users\gabor\documents\anaconda\envs\tfdeeplearning\lib\site-packages\tensorflow\python\training\optimizer.py in minimize(self, loss, global_step, var_list, gate_gradients, aggregation_method, colocate_gradients_with_ops, name, grad_loss)
320 "No gradients provided for any variable, check your graph for ops"
321 " that do not support gradients, between variables %s and loss %s." %
--> 322 ([str(v) for _, v in grads_and_vars], loss))
323
324 return self.apply_gradients(grads_and_vars, global_step=global_step,
ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, between variables ["<tf.Variable 'rnn/output_projection_wrapper/basic_lstm_cell/kernel:0' shape=(278, 1108) dtype=float32_ref>", "<tf.Variable 'rnn/output_projection_wrapper/basic_lstm_cell/bias:0' shape=(1108,) dtype=float32_ref>", "<tf.Variable 'rnn/output_projection_wrapper/kernel:0' shape=(277, 1) dtype=float32_ref>", "<tf.Variable 'rnn/output_projection_wrapper/bias:0' shape=(1,) dtype=float32_ref>"] and loss Tensor("Mean:0", shape=(), dtype=float32).
我真的不确定是什么导致了这个问题(我对tensorflow还是比较陌生),我知道这与变量未连接到损失函数有关。所以,如果我错过了什么,请告诉我!我将尝试尽可能多地更新!
谢谢;)