メインコンテンツへジャンプ

TensorFlow™ on Databricks

Illustration

プレースホルダー

これまでは変数を使用してデータを管理してきましたが、より基本的な構造としてプレースホルダーがあります。プレースホルダーとは、あとでデータを割り当てられる変数のことです。これにより、データを必要とすることなく演算を作成し、計算グラフを構築できます。TensorFlow の用語では、これらのプレースホルダーを通してデータをグラフにフィードします。

 

 

この例は、これまでの例とは少し異なります。詳しく見てみましょう。

まず、通常どおり tensorflow をインポートします。次に、プレースホルダー x というあとで値を保存するメモリ内の場所を作成します。

次に、x を 2 で乗算する演算であるという Tensor を作成します。まだ x の初期値を定義していないことに注意してください。

これでオペレーション (y) が定義され、セッションで実行できるようになりました。セッションオブジェクトを作成し、y 変数だけを実行します。これは、より大きな演算グラフを定義した場合でも、グラフのほんの一部分だけを実行可能ということです。このサブグラフ評価は、実は TensorFlow のちょっとしたセールスポイントであり、同様のことを行う他の多くのライブラリには存在しないものです。

y を実行するには、x の値に関する知識が必要です。これらを feed_dict 引数で定義して実行します。ここでは、x の値が [1, 2, 3] であるとします。y を実行すると、[2, 4, 6] の結果が得られます。

プレースホルダーは、静的にサイズを設定する必要はありません。x が任意の長さを取れるように、プログラムを更新してみましょう。x の定義を次のように変更します。

 

 

feed_dictx の値を定義する際、値はいくつでも指定できます。コードは今までどおり動作し、同じ答えを返すはずですが、feed_dict にいくつの値があっても動作するようになりました。

プレースホルダーは複数の次元を持つことができ、配列を格納できます。次の例では、3×2 の行列を作成し、そこに数値を格納します。次に、先ほどと同じ演算を使用して、要素ごとに数値を 2 倍にします。

 

 

プレースホルダーの最初の次元は、None です。これは、任意の数の行を含められることを意味します。2 番目の次元は 3 に固定されており、各行には 3 列のデータが必要であることを意味します。

これを拡張して、任意の数の None 次元を取ることが可能です。この例では、前回のレッスンで使用した画像をロードし、その画像のスライスを保存するプレースホルダーを作成します。スライスは画像の 2D セグメントですが、各「ピクセル」には 3 つのコンポーネント(赤、緑、青)があります。したがって、最初の 2 つの次元には None が必要ですが、最後の次元には 3 つ(あるいは None)が必要です。次に、TensorFlow のスライスを使用して、画像からサブセグメントを取り出します。

 

 

  1. TensorFlow の配列に関する他の関数については、公式ドキュメントを参照してください。
  2. 画像を 4 つの「角」に分割し、再度つなぎあわせます。
  3. 画像をグレースケールに変換します。これを行う 1 つの方法は、単一のカラーチャンネルだけを取り出し、それを表示することです。別の方法では、3 つのチャンネルの平均をグレー色として取得します。