このページは Cloud Translation API によって翻訳されました。
Switch to English

tf.scan

TensorFlow 1つのバージョン GitHubの上のソースを表示

テンソルのリスト上の走査から展開elems寸法に0(非推奨の引数値)

最も簡単なバージョンscan繰り返し呼び出し可能な適用fn最初から最後までの要素の順序に。要素がテンソルで作られていますからアンパックelems次元に0呼び出し可能なFNは、引数として2つのテンソルをとります。最初の引数は、FNの前の呼び出しから計算された累積値であり、第二は、現在位置の値であるelems 。場合はinitializer Noneで、 elems少なくとも1つの元素を含まなければならないし、その最初の要素を初期化子として使用されています。

その仮定elemsに展開されvalues 、テンソルのリストを。結果テンソルの形状である[len(values)] + fn(initializer, values[0]).shape 。もし逆= Trueを、それのFN(イニシャライザ、値[-1])。形。

この方法は、マルチアリティの可能elemsとアキュムレータ。場合elemsテンソルの(おそらくネストされた)リストまたはタプルであり、これらのテンソルのそれぞれは、マッチング最初(アンパック)の寸法を有していなければなりません。第2引数fnの構造と一致しなければなりませんelems

いかなる場合initializer設けられていない、出力構造とのdtypes fnその入力と同じであると仮定されます。この場合、最初の引数fnの構造と一致しなければなりませんelems

場合initializer提供され、その後の出力fn同じ構造を有する必要がありinitializer 。そして、の最初の引数fn 、この構造と一致する必要があります。

たとえば、 elemsある(t1, [t2, t3])initializerされ[i1, i2]次に適し署名fnにおけるpython2 :れているfn = lambda (acc_p1, acc_p2), (t1, [t2, t3]):及びfn 、リストを返す必要があります[acc_n1, acc_n2]ための別の正しい署名fn 、およびで動作することを1 python3 、ある: fn = lambda a, t:及びa t入力タプルに対応します。

fn 実行される呼び出し可能。それは2つの引数を受け入れます。最初は、同じ構造を有することになるinitializerそれ以外の場合は同様の構造を持つことになり、一方が設けられている場合elems 。第二は、同じ(おそらくネストされた)構造を有することになるelems 。その出力は同じ構造を持っている必要がありますinitializerそれ以外の場合は、同じ構造を持っている必要があり、1が提供されている場合elems
elems その第一の次元に沿ってアンパックであろうこれらの各々はテンソルまたはテンソルの(おそらくネストされた)配列。その結果、スライスのネストされたシーケンスは、最初の引数になりますfn
initializer (オプション)テンソル又はテンソルの(おそらくネストされた)配列、アキュムレータの初期値との予想される出力タイプfn
parallel_iterations (オプション)反復数は、並列に実行させます。
back_prop (オプション)推奨されていません。 Falseの無効は、バックプロパゲーションのためにサポートされています。使用して優先tf.stop_gradient代わりに。
swap_memory (オプション)Trueの場合、GPU-CPUのメモリスワッピングを可能にします。
infer_shape 一貫した出力形状(オプション)偽無効テスト。
reverse 最初の(代わりの最後に最初の)最後(オプション)真スキャンテンソル。
name 返されたテンソル(オプション)名前の接頭辞。

テンソル又はテンソルの(おそらくネストされた)配列。各テンソルは、適用の結果パックfnテンソルにからアンパックelems (場合、最初にまたは最後の最初から最後まで、第一の次元に沿って、前のアキュムレータ値(S) reverse=True )。

TypeError 場合はfn呼び出すことはできませんかの出力の構造fninitializer一致していません。
ValueError 出力の長さがあればfnおよびinitializer一致していません。

例:

 elems = np.array([1, 2, 3, 4, 5, 6])
sum = scan(lambda a, x: a + x, elems)
# sum == [1, 3, 6, 10, 15, 21]
sum = scan(lambda a, x: a + x, elems, reverse=True)
# sum == [21, 20, 18, 15, 11, 6]
 
 elems = np.array([1, 2, 3, 4, 5, 6])
initializer = np.array(0)
sum_one = scan(
    lambda a, x: x[0] - x[1] + a, (elems + 1, elems), initializer)
# sum_one == [1, 2, 3, 4, 5, 6]
 
 elems = np.array([1, 0, 0, 0, 0, 0])
initializer = (np.array(0), np.array(1))
fibonaccis = scan(lambda a, _: (a[1], a[0] + a[1]), elems, initializer)
# fibonaccis == ([1, 1, 2, 3, 5, 8], [1, 2, 3, 5, 8, 13])