【发布时间】:2016-03-04 07:47:02
【问题描述】:
我发现索引在 tensorflow (#206) 中仍然是一个悬而未决的问题,所以我想知道目前我可以使用什么作为解决方法。我想根据每个训练示例更改的变量对矩阵的行/列进行索引/切片。
到目前为止我已经尝试过:
- 基于占位符的切片(不起作用)
以下(工作)代码片段基于固定数字。
import tensorflow as tf
import numpy as np
x = tf.placeholder("float")
y = tf.slice(x,[0],[1])
#initialize
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
#run
result = sess.run(y, feed_dict={x:[1,2,3,4,5]})
print(result)
但是,我似乎不能简单地将这些固定数字之一替换为 tf.placeholder。以下代码给了我错误“TypeError: List of Tensors when single Tensor expected.”
import tensorflow as tf
import numpy as np
x = tf.placeholder("float")
i = tf.placeholder("int32")
y = tf.slice(x,[i],[1])
#initialize
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
#run
result = sess.run(y, feed_dict={x:[1,2,3,4,5],i:0})
print(result)
这听起来像 [i] 周围的括号太多了,但删除它们也无济于事。如何使用占位符/变量作为索引?
- 基于 python 变量的切片(不能正确反向传播/更新)
我也尝试过使用普通的 python 变量作为索引。这不会导致错误,但网络在训练时不会学到任何东西。我想是因为更改的变量没有正确注册,所以图表格式错误并且更新不起作用?
- 通过 one-hot 向量 + 乘法进行切片(有效,但速度慢)
我发现的一种解决方法是使用单热向量。在 numpy 中创建一个单热向量,使用占位符传递它,然后通过矩阵乘法进行切片。这可行,但速度很慢。
任何想法如何根据变量有效地切片/索引?
【问题讨论】:
标签: python tensorflow