2017-03-19 13 views
1
a = tf.constant([[1,2,3],[4,5,6]]) 
b = tf.constant([True, False], dtype=tf.bool) 

a.eval() 
array([[1, 2, 3], 
     [4, 5, 6]], dtype=int32) 
b.eval() 
array([ True, False], dtype=bool) 

tf.map_fnを使用して、上記の入力にabの関数を適用したいとします。 [1,2,3]Trueの両方を入力し、同様の値を出力します。複数の入出力にtf.map_fn(...)を適用できますか?

関数が単純にID:lambda(x,y): x,yであるとします。入力が[1,2,3], Trueの場合、これらの同じテンソルが出力されます。

私はtf.map_fn(...)を1つの変数で使用する方法を知っていますが、2つではありません。そして、この場合私はデータ型(int32とbool)が混在しているので、テンソルを連結して呼び出しの後に分割することはできません。

tf.map_fn(...)に異なるデータタイプの複数の入出力を使用できますか?

答えて

5

それを実演しました。さまざまなテンソルのそれぞれについてテンソルのデータ型をdtypeに定義する必要があります。次に、テンソルをタプルとして渡し、マップ関数がタプルの入力を受け取り、map_fnがタプルを返します。

a = tf.constant([[1,2,3],[4,5,6]]) 
b = tf.constant([True, False], dtype=tf.bool) 

c = tf.map_fn(lambda x: (x[0], x[1]), (a,b), dtype=(tf.int32, tf.bool)) 

c[0].eval() 
array([[1, 2, 3], 
     [4, 5, 6]], dtype=int32) 
c[1].eval() 
array([ True, False], dtype=bool) 
+2

は、あなたが使用している場合、この処理はないGPU上で、CPUに実行されますので注意して:働く

例。これは、GPUでトレーニングするときに特にスピードを損なう可能性があります。 –

関連する問題