TensorFlowの計算グラフに、静的な形状、値を持つ定数を定義することができるtf.constant
という関数が存在します。
本記事では、計算グラフに定数を定義するtf.constant
の使い方を紹介します。
同じ値をもつTensorを作成するときにも便利なので、是非使い方を覚えてみてください。
APIドキュメント
tf.constant(value, dtype=None, shape=None, name=’Const’, verify_shape=False)
params:
パラメータ名 | 型 | 概要 |
---|---|---|
value | Tensorに変換可能な型 | 定数で定義される値を指定します |
dtype |
Tensorの型 | 変数に代入される型を指定します |
shape |
TensorShape | 割り当てる変数のshape。もしshapeが指定されていなければ、valueのshapeが使用されます |
name |
string | 変数の名前。デフォルトでは自動でユニークな名前を割り当てます。 |
verify_shape |
bool | 値の形状を変更可能にするかを指定します |
returns:
定数のTensorを返します。
value
には、定数として定義される値を指定します。dtype
はTensorの型を指定してください。shape
にはvalue
と対応する形状を指定します。指定されなければ、value
の形状が使用されます。
具体的な使用例
以下のように第一引数に定義される値を指定する使い方があります。
In [1]: import tensorflow as tf
In [2]: a = tf.constant([1, 2, 3])
In [3]: b = tf.constant('Hello, World!') # 文字列も使える
In [4]: sess = tf.Session()
In [5]: sess.run(a)
Out[5]: array([1, 2, 3], dtype=int32)
In [6]: sess.run(b)
Out[6]: b'Hello, World!'
また、shape
を指定して値を指定すると、すべての要素が同じ値のTensorが作成されます。
In [3]: a = tf.constant(3, shape=[1, 3])
In [4]: sess = tf.Session()
In [5]: sess.run(a)
Out[5]: array([[3, 3, 3]], dtype=int32)
In [6]: b = tf.constant(-1, shape=[2, 3])
In [7]: sess.run(b)
Out[7]:
array([[-1, -1, -1],
[-1, -1, -1]], dtype=int32)
tf.fillとの違い
TensorFlowには、同じような使用方法の関数にtf.fill
という関数が存在しています。例えば、以下のようにtf.fill
でも同じ値を持つTensorを手軽に作成することができます。
In [1]: import tensorflow as tf
In [2]: a = tf.fill([1, 3], -1)
In [3]: sess = tf.Session()
In [4]: sess.run(a)
Out[4]: array([[-1, -1, -1]], dtype=int32)
tf.fill
は、計算グラフにOpsノードを定義するので、計算グラフの実行時に値が割り当てられるのに対して、tf.constant
ではConstノードが作成されます。
計算グラフの構築時に値が割り当てられて、その後変更されることがありません。
また、tf.fill
では、グラフ構築時ではなく実行時に変数を割り当てる操作をするため、以下のようにtf.placeholder
などで動的に値を割り当てることができますが、tf.constant
ではTypeError
例外となります。
In [1]: import tensorflow as tf
In [2]: a = tf.placeholder(tf.int32)
In [3]: b = tf.fill([2, 3], a)
In [4]: sess = tf.Session()
In [5]: sess.run(b, feed_dict={a: 3})
Out[5]:
array([[3, 3, 3],
[3, 3, 3]], dtype=int32)
In [6]: c = tf.constant(a, shape=[2, 3])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
...
TypeError: List of Tensors when single Tensor expected
tf.constant
はグラフ構築時に定数を宣言するため、その後変更されることはなく、何度も計算を処理する場合には実行が高速になる可能性があります。
まとめ
本記事では、tf.constant
の使い方とtf.fill
との違いについて解説しました。
tf.constant
などのTensor作成方法は是非マスターしておきましょう。
参考
- [1] tf.constant