TensorFlow: генерация случайной константы
В ipython я импортировал tensorflow as tf
а также numpy as np
и создал TensorFlow 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)
... возникает ошибка типа, говорящая:
(...)
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)
со значениями, взятыми из нормального распределения.
1 ответ
tf.constant()
op принимает массив numpy (или что-то неявно преобразуемое в массив numpy) и возвращает tf.Tensor
значение которого совпадает с этим массивом. Не принимает tf.Tensor
в качестве аргумента.
С другой стороны, tf.random_normal()
оп возвращает tf.Tensor
значение которого генерируется случайным образом в соответствии с заданным распределением при каждом запуске. Так как он возвращает tf.Tensor
, он не может быть использован в качестве аргумента tf.constant()
, Это объясняет TypeError
(который не связан с использованием tf.InteractiveSession
, поскольку это происходит при построении графика).
Я предполагаю, что вы хотите, чтобы ваш график включал тензор, который (i) генерируется случайным образом при первом его использовании, и (ii) постоянный после него. Есть два способа сделать это:
Используйте NumPy, чтобы сгенерировать случайное значение и поместить его в
tf.constant()
, как вы сделали в своем вопросе:some_test = tf.constant( np.random.normal(loc=0.0, scale=1.0, size=(2, 2)).astype(np.float32))
(Потенциально быстрее, поскольку он может использовать графический процессор для генерации случайных чисел). Используйте 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`