web-dev-qa-db-ja.com

TensorFlow:ランダム定数の生成

Ipythonで、tensorflow as tfnumpy as npをインポートし、TensorFlow InteractiveSessionを作成しました。 numpy入力を使用して正規分布を実行または初期化すると、すべてが正常に実行されます。

some_test = tf.constant(np.random.normal(loc=0.0, scale=1.0, size=(2, 2)))
session.run(some_test)

戻り値:

array([[-0.04152317,  0.19786302],
       [-0.68232622, -0.23439092]])

さすがに。

...しかし、Tensorflow正規分布関数を使用すると:

some_test = tf.constant(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))
session.run(some_test)

...次のようなタイプエラーが発生します。

(...)
TypeError: List of Tensors when single Tensor expected

ここで何が欠けていますか?

の出力:

sess.run(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))

単独では、np.random.normalが生成するものとまったく同じものを返します->正規分布から取得した値を持つ形状(2, 2)の行列。

7
daniel451

tf.constant() opは、numpy配列(または暗黙的にnumpy配列に変換可能なもの)を受け取り、 _tf.Tensor_ を返します。その値はその配列と同じです。引数として_tf.Tensor_を受け入れませんnot

一方、tf.random_normal() opは_tf.Tensor_を返します。その値は、実行されるたびに、指定された分布に従ってランダムに生成されます。 _tf.Tensor_を返すため、tf.constant()の引数として使用することはできません。これは、TypeErrorを説明しています(グラフを作成するときに発生するため、_tf.InteractiveSession_の使用とは関係ありません)。

グラフに、(i)最初の使用時にランダムに生成され、(ii)その後は一定であるテンソルを含めることを想定しています。これを行うには2つの方法があります。

  1. 質問で行ったように、NumPyを使用してランダムな値を生成し、それをtf.constant()に入れます。

    _some_test = tf.constant(
        np.random.normal(loc=0.0, scale=1.0, size=(2, 2)).astype(np.float32))
    _
  2. (GPUを使用して乱数を生成できるため、高速になる可能性があります)TensorFlowを使用してランダム値を生成し、それを_tf.Variable_に配置します。

    _some_test = tf.Variable(
        tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32)
    sess.run(some_test.initializer)  # Must run this before using `some_test`
    _
14
mrry