8

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

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)

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

(...)
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)

4

1 に答える 1

17

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

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

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

  1. 質問で行ったように、NumPy を使用してランダムな値を生成し、それを atf.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`
    
于 2016-02-26T21:24:57.540 に答える