Path: blob/master/site/ja/tutorials/customization/basics.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
テンソルと演算
これは、下記の手法を示す TensorFlow の入門チュートリアルです。
必要なパッケージのインポート
テンソルの作成と使用
GPU アクセラレーションの使用
tf.data.Dataset
を使用してデータパイプラインを構築する
TensorFlowのインポート
始めるにはまず、tensorflow
モジュールをインポートします。TensorFlow 2 の時点では、Eager execution はデフォルトでオンになっています。Eager execution では、TensorFlow のフロントエンドがよりインタラクティブになります。これについては、後で詳しく説明します。
テンソル
テンソルは多次元の配列です。NumPy の ndarray
オブジェクトと同様に、tf.Tensor
オブジェクトにはデータ型と形状があります。また、tf.Tensor
はアクセラレータのメモリ(GPU など)に留まることができます。TensorFlow には、tf.Tensor
を消費して生成する演算(tf.math.add
、tf.linalg.matmul
、tf.linalg.inv
など)が多数含まれたライブラリが用意されています。これらの演算によって、以下のように、組み込み Python 型が自動的に変換されます。
それぞれのtf.Tensor
には、形状とデータ型があります。
NumPy 配列と tf.Tensor
の間のもっとも明確な違いは
テンソルは( GPU や TPU などの)アクセラレータメモリを使用できる
テンソルは変更不可
NumPy との互換性
TensorFlow tf.Tensor
と NumPy ndarray
の変換は簡単です。
TensorFlow の演算により NumPy の ndarray は自動的にテンソルに変換される
NumPy の演算によりテンソルは自動的に NumPy の ndarray に変換される
テンソルは .numpy()
メソッドを使って明示的に NumPy の ndarray に変換されます。NumPy のndarray と tf.Tensor
はその下敷きとなるメモリ上の表現が、できるかぎり共通化されているので、通常この変換のコストは小さいです。しかし、NumPy 配列はホスト側のメモリに置かれる一方、tf.Tensor
はGPU のメモリに置かれる可能性もあるため、下層の表現をいつも共通化できるとは限りません。また、変換にはGPU からホスト側メモリへのコピーも関わってきます。
GPU による高速化
多くの TensorFlow 演算の計算速度は、GPU を使って高速化されています。TensorFlow はアノテーションを使用せずに、GPU または CPU を演算に使用するかどうかを決定し、必要であれば CPU と GPU メモリ間でテンソルをコピーします。演算によって生成されたテンソルは、通常、演算が実行されたデバイスのメモリによってバックアップされます。以下に例を示します。
デバイス名
Tensor.device
プロパティにより、そのテンソルの内容を保持しているデバイスの完全な名前文字列を得ることができます。この名前には、プログラムを実行中のホストのネットワークアドレスや、ホスト上のデバイスについての詳細がエンコードされています。この情報は、TensorFlow プログラムの分散実行に必要なものです。テンソルがホスト上の N
番目のGPUにある場合、文字列の最後は GPU:<N>
となります。
明示的なデバイスの配置
TensorFlow における「配置」とは、個々の演算を実行するデバイスの割り当てを指します。前述のとおり、明示的に指定されていない場合、TensorFlow は演算を実行するデバイスを自動的に決定し、必要であれば、そのデバイスにテンソルをコピーします。
ただし、TensorFlow 演算は、tf.device
コンテキストマネージャーを使用して、特定のデバイスに明示的に配置することが可能です。以下に例を示します。
データセット
このセクションでは、tf.data.Dataset
API を使用して、モデルにデータを提供するためのパイプラインを構築しています。tf.data.Dataset
は、パフォーマンスの高い複雑な入力パイプラインを、モデルのトレーニングまたは評価ループを提供する単純で再利用可能なピースから構築するために使用されます。(詳細については、tf.data: TensorFlow 入力パイプラインを構築するガイドをご覧ください。)
ソースDataset
の作成
ソース Dataset を作成するには、tf.data.Dataset.from_tensors
や tf.data.Dataset.from_tensor_slices
などのファクトリー関数を使用して、またはファイルから読み取る tf.data.TextLineDataset
や tf.data.TFRecordDataset
などのオブジェクトを使用します。詳細については、tf.data: TensorFlow 入力パイプラインを構築するガイドの「入力データを読み取る」セクションをご覧ください。
変換の適用
tf.data.Dataset.map
、tf.data.Dataset.batch
、tf.data.Dataset.shuffle
などの変換関数を使用して、データセットのレコードに変換を適用します。
イテレート
tf.data.Dataset
オブジェクトは、中のレコードを繰り返し利用するためのイテレーションをサポートします。