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作成方法は是非マスターしておきましょう。

参考