【发布时间】:2018-06-27 14:22:52
【问题描述】:
我有一个 tensorflow 数组,我想使用字典将它的每个元素转换为另一个元素。
这是我的数组:
elems = tf.convert_to_tensor(np.array([1, 2, 3, 4, 5, 6]))
这是字典:
d = {1:1,2:5,3:7,4:5,5:8,6:2}
转换后的结果数组应该是
tf.convert_to_tensor(np.array([1, 5, 7, 5, 8, 2]))
为了做到这一点,我尝试如下使用tf.map_fn:
import tensorflow as tf
import numpy as np
d = {1:1,2:5,3:7,4:5,5:8,6:2}
elems = tf.convert_to_tensor(np.array([1, 2, 3, 4, 5, 6]))
res = tf.map_fn(lambda x: d[x], elems)
sess=tf.Session()
print(sess.run(res))
当我运行上面的代码时,我得到以下错误:
squares = tf.map_fn(lambda x: d[x], elems) KeyError: <tf.Tensor 'map/while/TensorArrayReadV3:0' shape=() dtype=int64>
这样做的正确方法是什么?我基本上是在尝试遵循 here 的用法。
附:我的数组实际上是 3D,我只是使用 1D 作为示例,因为在这种情况下代码也会失败。
【问题讨论】:
-
这是一个用于数组的 NumPy 解决方案 - stackoverflow.com/questions/47171356。
-
@Divakar 感谢您的链接!在我的情况下,这是更大张量流代码的一部分,所以我不想每次都将数组传输到一个 numpy 数组,然后再返回一个张量。我希望有一些直接的方法可以在不进行翻译的情况下做到这一点。
-
您是否正在使用
tf.data.*管道,这是一个中间步骤? -
你的密钥是0..n,还是更复杂?
-
@gdelab 不,键只是一组非负整数,例如 [0,14,30,55]。所以它们不会是连续的。
标签: python arrays numpy tensorflow machine-learning