Ipythonで、tensorflow as tf
とnumpy 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)
の行列。
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つの方法があります。
質問で行ったように、NumPyを使用してランダムな値を生成し、それをtf.constant()
に入れます。
_some_test = tf.constant(
np.random.normal(loc=0.0, scale=1.0, size=(2, 2)).astype(np.float32))
_
(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`
_