2016-05-14 43 views
0

TF内的新的高阶函数在这里详细描述:TensorFlow中的高阶函数 - 如何使用?

https://www.tensorflow.org/versions/r0.8/api_docs/python/functional_ops.html#map_fn

尤其是地图功能看起来非常有用。以下是他们写的教程:

elems = [1, 2, 3, 4, 5, 6] 
    squares = map_fn(lambda x: x * x, elems) 
    # squares == [1, 4, 9, 16, 25, 36] 

因此,我创建了一个空的Python文件:

import tensorflow as tf 
elems = [1, 2, 3, 4, 5, 6] 
squares = tf.map_fn(lambda x: x * x, elems) 

运行这给了这个错误:

/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_util.pyc in make_tensor_proto(values, dtype, shape) 
    323 else: 
    324  if values is None: 
--> 325  raise ValueError("None values not supported.") 
    326  # if dtype is provided, forces numpy array to be the type 
    327  # provided if possible. 

ValueError: None values not supported. 

有谁知道这是怎么回事?谢谢!

编辑:我正在使用TensorFlow 0.8版。

+0

感谢您询问这个问题!事实证明'tf.map_fn()'和它的朋友有一些错误,这意味着转换为张量的处理不正确。我已经打开了一个[GitHub问题](https://github.com/tensorflow/tensorflow/issues/2366),并且正在修复中。 – mrry

+0

谢谢!你知道在哪里可以找到tf.map_fn()作为输入张量的例子吗? – Carl

+0

我认为这是一个相当新的图书馆,所以目前还没有很多例子。我能找到的唯一一个是[本单元测试](https://github.com/tensorflow/tensorflow/blob/f06280b0b8fd4bda35231124186ba3ff7a1f271b/tensorflow/python/kernel_tests/functional_ops_test.py#L65)。 – mrry

回答

1

您的代码看起来不错,但我可以用numpy array这样的事情来解决它:

import tensorflow as tf 
import numpy as np 

elems = np.array([1, 2, 3, 4, 5, 6], dtype="float32") 
squares = tf.map_fn(lambda x: x * x, elems) 

sess = tf.Session() 
sess.run(squares) 

此输出:

[ 1. 4. 9. 16. 25. 36.] 
0

必须使用np.array为elems的,但我不明白为什么

代码如下:

import tensorflow as tf 
import numpy as np 
a = np.array([1, 2, 3, 4, 5]) 
fn = lambda x: x**2 
squares = tf.map_fn(fn=fn, elems=a)