2017-08-27 10 views
1

ルック:tf.map_fnはどのように機能しますか?デモで

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

elems = (np.array([1, 2, 3]), np.array([-1, 1, -1])) 
alternate = map_fn(lambda x: x[0] * x[1], elems, dtype=tf.int64) 
# alternate == [-1, 2, -3] 

elems = np.array([1, 2, 3]) 
alternates = map_fn(lambda x: (x, -x), elems, dtype=(tf.int64, tf.int64)) 
# alternates[0] == [1, 2, 3] 
# alternates[1] == [-1, -2, -3] 

は、私は、第2、第3のを理解することはできません。

2番目の場合: 最初のx = np.array([1,2,3])と1 * 2を返すため、結果は[2、-1] 3番目の場合:結果の形は(3,2)と思います。最初のx = (1、-1)、2回目のx = 2、戻り値(2、-2)、3回目のx = 3、戻り値(3、-3)を返します。

map_fnはどのように機能しますか?

+0

公式のGitHubリポジトリをご覧ください – Aditya

答えて

1

Tensorflowのmap_fn、ドキュメントから、この場合には寸法0

にelemsからアンパックテンソルのリストに

マップ、入力テンソル[1の軸のみ、 2,3]、または[-1,1、-1]である。したがって、演算は1 * -1,2 * 1と3 * -1であり、結果は再テンションされてテンソルの形を与えます。秒間

0

:私は結果だと思う[2、-1]、初めてので X = np.array([1、2、3])とリターン1 * 2、二度目X = np.array([ - 1、 1、-1])とリターン1 *( - 1)

In [26]: a = np.array([[1, 2, 3], [2, 4, 1], [5, 1, 7]]) 
In [27]: b = np.array([[1, -1, -1], [1, 1, 1], [-1, 1, -1]]) 
In [28]: elems = (a, b)  
In [29]: alternate = map_fn(lambda x: x[0] * x[1], elems, dtype=tf.int64) 
In [30]: alternate.eval() 
Out[30]: 
array([[ 1, -2, -3], 
     [ 2, 4, 1], 
     [-5, 1, -7]]) 

それは各要素の0次元でテンソルであることがわかります関数に適用されるelems。第三のため

:I 2(結果の形状であると思う(3,2)、第 時間X = 1及びリターン(1、-1)ので、X = 2秒の時間と戻り、-2)、 3回目のx = 3で戻り値(3、-3)。

In [36]: elems = np.array([[1, 2, 3], [4, 5, 1], [1, 6, 1]]) 
In [37]: alternates = map_fn(lambda x: (x, -x), elems, dtype=(tf.int64, tf.int64)) 
In [38]: alternates 
Out[38]: 
(<tf.Tensor 'map_6/TensorArrayStack/TensorArrayGatherV3:0' shape=(3, 3) dtype=int64>, 
<tf.Tensor 'map_6/TensorArrayStack_1/TensorArrayGatherV3:0' shape=(3, 3) dtype=int64>) 
In [39]: alternates[0].eval() 
Out[39]: 
array([[1, 2, 3], 
     [4, 5, 1], 
     [1, 6, 1]]) 
In [40]: alternates[1].eval() 
Out[40]: 
array([[-1, -2, -3], 
     [-4, -5, -1], 
     [-1, -6, -1]]) 

あなたが期待する結果を取得するには、次の

In [8]: elems = np.array([[1], [2], [3]])               
In [9]: alternates = map_fn(lambda x: (x, -x), elems, dtype=(tf.int64, tf.int64)) 
In [10]: sess = tf.InteractiveSession()                
In [11]: alternates[0].eval() 
Out[11]: 
array([[1], 
     [2], 
     [3]]) 

In [12]: alternates[1].eval()                  
Out[12]: 
array([[-1], 
     [-2], 
     [-3]]) 

が、これは、より良いmap_fnを理解する上であなたを助けることができる可能性があります。

関連する問題