这是一个普遍的问题.我发现在张量流中,在我们构建图形之后,将数据提取到图形中,图形的输出是张量.但在许多情况下,我们需要根据此输出(即a tensor)进行一些计算,这在tensorflow中是不允许的.
例如,我正在尝试实现RNN,它基于数据自身属性循环时间.也就是说,我需要使用a tensor来判断是否应该停止(我不使用dynamic_rnn,因为在我的设计中,rnn是高度自定义的).我发现tf.while_loop(cond,body.....)可能是我实施的候选人.但官方教程太简单了.我不知道如何在'body'中添加更多功能.谁能给我一些更复杂的例子?
此外,在这种情况下,如果将来的计算基于张量输出(例如:基于输出标准的RNN停止),这是非常常见的情况.是否有优雅的方式或更好的方式而不是动态图?
我正在使用TensorFlow创建一个新模型,其中包括一个动态循环.我使用tf.while_loop来实现这个实例.我遇到的一个问题是:
AttributeError: 'NoneType' object has no attribute 'back_prop'
这样做就出现了
gradients = tf.gradients(self.loss, params)
Run Code Online (Sandbox Code Playgroud)
然后,我尝试打印所有params,结果每个参数都有一个形状.我想如果有一个nonetype参数,它的形状应该也None一样吗?另一方面,有没有其他方法可以帮助我检测哪个变量未分配或类似[]?
这是完整的引用:
Traceback (most recent call last):
File "main.py", line 125, in <module>
tf.app.run()
File "/usr/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 30, in run
sys.exit(main(sys.argv))
File "main.py", line 119, in main
train()# if FLAGS.train:
File "main.py", line 95, in train
model = create_model(sess, False)
File "main.py", line 75, in create_model
forward_only=False)
File "/home/sniu/lab/ai_lab/DMN-tensorflow/models/DMN.py", line 248, in __init__
gradients = tf.gradients(self.loss, params)
File "/usr/lib/python2.7/site-packages/tensorflow/python/ops/gradients.py", …Run Code Online (Sandbox Code Playgroud) 我目前正在修补Hopfield网络,这是一个非常有趣的神经网络.我也在为Hopfield网编写我自己的代码以识别MNIST数字,但它无法正常工作,所以我尝试在线搜索.令人惊讶的是,我几乎找不到与MNIST数字和Hopfield网络相关的任何内容.谁能告诉我原因?
我正在使用TensorFlow来实现需要使用的网络 tf.while_loop()
import tensorflow as tf
import numpy as np
class model(object):
def __init__(self):
self.argmax_ep_gate_array = [ tf.placeholder(tf.int32, [None]) for _ in range(10)]
argmax_ep_gate_array_concat = tf.concat(0, self.argmax_ep_gate_array)
story_len = tf.constant(7)
starter = tf.constant(0)
z = []
def body(hops):
hops = tf.add(hops,1)
z.append(hops)
return hops
def condition(hops):
return tf.logical_and(tf.less(tf.gather(argmax_ep_gate_array_concat, hops),story_len),tf.less(hops,tf.constant(20)))
self.gate_index = tf.while_loop(condition,body,[starter])
self.z=tf.concat(0,z)
def step(self, sess):
feed={}
for i in range(10):
feed[self.argmax_ep_gate_array[i].name]=[i]
print (sess.run([self.gate_index,self.z],feed))
with tf.Session() as sess:
while_loop = model()
sess.run(tf.initialize_all_variables())
while_loop.step(sess)
Run Code Online (Sandbox Code Playgroud)
我发现如果我想sess.run()body()中没有返回的任何变量,tensorflow会陷入无限循环.上面的例子是微不足道的,但它揭示了一些东西.在现实情况下,我使用的tf.while_loop()运行RNN包括Y = WX …