Path: blob/master/site/ja/guide/tensor_slicing.ipynb
25115 views
Copyright 2020 The TensorFlow Authors.
テンソルスライスの基礎
オブジェクト検出や NLP などの機械学習アプリケーションでは、テンソルのサブセクション(スライス)を使用する必要がある場合があります。たとえば、モデルアーキテクチャにルーティングが含まれている場合、1 つのレイヤーが次のレイヤーにルーティングされるトレーニングサンプルを制御することがあります。この場合、テンソルスライス演算を使用して、テンソルを分割し、正しい順序に戻すことができます。
NLP アプリケーションでは、トレーニング時にテンソルスライスを使用してワードマスキングを実行できます。たとえば、各文でマスクする単語インデックスを選択し、その単語をラベルとして取り出し、選択した単語をマスクトークンに置き換えることで、文のリストからトレーニングデータを生成できます。
このガイドでは、TensorFlow API を使用して次を実行する方法を学習します。
テンソルからスライスを抽出する
テンソルの特定のインデックスにデータを挿入する
このガイドは、テンソルのインデキシングに精通していることを前提としています。このガイドを開始する前に、テンソル、および TensorFlow NumPy ガイドのインデキシングセクションをお読みください。
セットアップ
テンソルスライスを抽出する
tf.slice
を使用して、NumPy のようなテンソルスライスを実行します。
または、Python 構文を使用することもできます。テンソルスライスは、開始から終了までの範囲で等間隔に配置されていることに注意してください。
2 次元テンソルの場合、次を使用できます。
高次元テンソルでも tf.slice
を使用できます。
また、tf.strided_slice
を使用して、テンソルの次元をストライドすることでテンソルのスライスを抽出することもできます。
tf.gather
を使用して、テンソルの 1 つの軸から特定のインデックスを抽出します。
tf.gather
では、インデックスが等間隔である必要はありません。
テンソルの複数の軸からスライスを抽出するには、tf.gather_nd
を使用します。これは、行または列だけではなく、行列の要素を収集する場合に役立ちます。
データをテンソルに挿入する
tf.scatter_nd
を使用して、テンソルの特定のスライス/インデックスにデータを挿入します。値を挿入するテンソルはゼロで初期化されることに注意してください。
ゼロで初期化されたテンソルを必要とする tf.scatter_nd
のようなメソッドは、スパーステンソルのイニシャライザに似ています。tf.gather_nd
と tf.scatter_nd
を使用して、スパーステンソル演算の動作を模倣できます。
これら 2 つのメソッドを組み合わせて使用してスパーステンソルを構築する例を考えてみましょう。
これは次と同様です。
既存の値を持つテンソルにデータを挿入するには、tf.tensor_scatter_nd_add
を使用します。
同様に、tf.tensor_scatter_nd_sub
を使用して、既存の値を持つテンソルから値を減算します。
tf.tensor_scatter_nd_min
を使用して、要素ごとの最小値をあるテンソルから別のテンソルにコピーします。
同様に、tf.tensor_scatter_nd_max
を使用して、要素ごとの最大値をあるテンソルから別のテンソルにコピーします。