d-r*_*roy 25 python tensorflow
我正试图将列表传入feed_dict,但是我很难这样做.说我有:
inputs = 10 * [tf.placeholder(tf.float32, shape=(batch_size, input_size))]
Run Code Online (Sandbox Code Playgroud)
输入被输入到outputs我想要计算的某个函数中.所以要在tensorflow中运行它,我创建了一个会话并运行以下内容:
sess.run(outputs, feed_dict = {inputs: data})
#data is my list of inputs, which is also of length 10
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误,TypeError: unhashable type: 'list'.
但是,我能够像这样传递数据元素:
sess.run(outputs, feed_dict = {inputs[0]: data[0], ..., inputs[9]: data[9]})
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否有办法解决这个问题.我也尝试构建一个字典(使用for循环),但是这会产生一个包含单个元素的字典,其中键是:
tensorflow.python.framework.ops.Tensor at 0x107594a10
mrr*_*rry 44
这里有两个问题导致问题:
第一个问题是Session.run()调用只接受少量类型作为键的键feed_dict.特别是,不支持张量列表作为键,因此您必须将每个张量作为单独的键.*一种方便的方法是使用字典理解:
inputs = [tf.placeholder(...), ...]
data = [np.array(...), ...]
sess.run(y, feed_dict={i: d for i, d in zip(inputs, data)})
Run Code Online (Sandbox Code Playgroud)
第二个问题是10 * [tf.placeholder(...)]Python 中的语法创建了一个包含十个元素的列表,其中每个元素都是相同的张量对象(即具有相同的name属性,相同的id属性,并且如果比较列表中的两个元素,则引用相同inputs[i] is inputs[j]) .这就解释了为什么当您尝试使用列表元素作为键创建字典时,您最终会得到一个包含单个元素的字典 - 因为所有列表元素都是相同的.
要按照您的意图创建10个不同的占位符张量,您应该执行以下操作:
inputs = [tf.placeholder(tf.float32, shape=(batch_size, input_size))
for _ in xrange(10)]
Run Code Online (Sandbox Code Playgroud)
如果打印此列表的元素,您将看到每个元素都是具有不同名称的张量.
编辑: *您现在可以传递元组作为a的键feed_dict,因为这些可以用作字典键.
这是一个正确的例子:
batch_size, input_size, n = 2, 3, 2
# in your case n = 10
x = tf.placeholder(tf.types.float32, shape=(n, batch_size, input_size))
y = tf.add(x, x)
data = np.random.rand(n, batch_size, input_size)
sess = tf.Session()
print sess.run(y, feed_dict={x: data})
Run Code Online (Sandbox Code Playgroud)
我在您的方法中看到的是一件奇怪的事情。由于某种原因,您使用10 * [tf.placeholder(...)],它将创建10个张量的张量(batch_size, input_size)。如果您只能在等级3的Tensor(第一个维度为10)上创建,就不知道为什么要这样做。
由于您具有张量列表(而不是张量),因此无法将数据馈入此列表(但在我的情况下,我可以馈入张量)。
| 归档时间: |
|
| 查看次数: |
41877 次 |
| 最近记录: |