以前、TensorFlowの計算グラフ内で変数を使用できるtf.Variable
を紹介しました。
TensorFlowの計算グラフ内の変数tf.Variableの使い方 /tensorflow/2017/06/02/tensorflow-variable.html
tf.placeholder
は、事前に変数の値を定義する必要のない、計算グラフ内の変数の容れ物のような扱いになります。tf.placeholder
の使い方をマスターすると、実行時に任意の値を入れてTensorFlowに計算させることができるようになります。
この記事を通して、使い方をマスターしてください。
APIドキュメント
まずはAPIドキュメントを確認してみましょう。
tf.placeholder(dtype, shape=None, name=None)
params:
パラメータ名 | 型 | 概要 |
---|---|---|
dtype |
Tensorの型 | 変数に代入される型を指定します |
shape |
TensorShape | 割り当てる変数のshape。もしshapeが指定されていなければ、任意のshapeの変数を割り当てることができます |
name |
string | 変数の名前。デフォルトでは自動でユニークな名前を割り当てます。 |
returns:
直接評価されない、feedされる変数のTensorを返します。
dtype
に使用する型を指定する必要があります。
具体的な使用例
具体的な使用例を見てみましょう。まずは簡単な例から紹介してみます。1+1
を計算させてみる場合にはtf.constant
を使用すると以下のようになります。
tf.constant
は定数を指定することができます。では、x+1=z
のように任意の値をxに与えるためには、tf.placeholder
を使用する必要があります。
x=2
を実行時に定義して2+1=3
を計算することができました。
次に、tf.placeholder
にshape
を指定して配列を渡せるようにしてみます。
配列を渡して、結果を配列で受け取ることができるようになります。以下のように、feed_dict
にNumPyのndarray
も渡すことができます。NumPyのndarrayについては以下の記事で解説しています。
NumPyの多次元配列データ構造ndarrayの基礎 /features/numpy/numpy-ndarray.html
tf.placeholder_with_default
tf.placeholder
は初期値を持たないので、以下のようにfeed_dict
に値を指定しないとInvalidArgumentError
を発生させてしまいます。
tf.placeholder_with_default
を使うことで、事前に指定されない場合に使用する初期値を決めておくことができます。
まとめ
今回はtf.placeholder
の基本的な使い方を解説しました。tf.placeholder
を使えるようになると、実行時に任意の値を計算グラフに渡すことができるようになります。
機械学習のコードでは、主に入力層に渡す変数をtf.placeholder
で定義して、実行時に学習に入力画像や情報をバッチ毎に供給するために使用することが多いです。
是非、使いこなせるようにしてみてください。