Tensorflow: Непонятная документация для поведения выравнивания tf.layers.dense

Созданный на 7 мар. 2017  ·  3Комментарии  ·  Источник: tensorflow/tensorflow

В документации указано:

Примечание: если тензор inputs имеет ранг больше 2, то он
сглаженная перед исходной матрицей умножается на w .

Однако следующее возвращает тензор с формой shape=(2, 2, 2, 400) , как если бы входные данные не были сглажены.
tf.layers.dense(tf.placeholder(tf.float32, (2,2,2,2)), 400)

docs-bug

Самый полезный комментарий

Ах, спасибо, соединение с тенсордотом проясняет.

Кажется, что tf.dense сжимает последний индекс входного тензора с первым индексом тензора весов. Слово "сплющить" сбивало с толку, не знаю, что оно здесь означает.

Пример игрушки, который я сделал для себя, чтобы перевести tf.dense в эквивалент np.tensordot

tf.reset_default_graph()
x0 = np.ones((3, 3, 3))
w0 = np.arange(6).reshape((3, 2))
x = tf.constant(x0)
y = tf.layers.dense(x, 2)
var_dict = {v.op.name: v for v in tf.global_variables()}
assert(var_dict["dense/kernel"].get_shape() == (3, 2))
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sess.run(tf.assign(var_dict["dense/kernel"], w0))
sess.run(tf.assign(var_dict["dense/bias"], np.zeros((2,))))

expected_y0 = np.tensordot(x0,w0,axes=[(2,),(0,)])
y0 = sess.run(y)
np.testing.assert_allclose(y0, expected_y0)

Все 3 Комментарий

Упс, извините, я не хотел удалять себя. Проводя внутреннее расследование, я пытался добавить человека, который, по моему мнению, несет ответственность.

Итак, после расследования мне сказали, что он ведет себя как тензордот, поэтому поведение и текущая документация верны - и инженер, с которым я разговаривал, сказал, что они думают, что мы могли бы использовать более точный язык, но это не будет Это обязательно поможет, поскольку текущий язык ясен и недвусмысленен в контексте. (См. Tensordot: https://docs.scipy.org/doc/numpy/reference/generated/numpy.tensordot.html)

Если вы хотите попытаться самостоятельно сделать запрос на перенос, чтобы немного изменить формулировку, это будет приветствоваться, но я пока закрываю эту ошибку, поскольку мы не собираемся ничего с ней делать внутри.

Ах, спасибо, соединение с тенсордотом проясняет.

Кажется, что tf.dense сжимает последний индекс входного тензора с первым индексом тензора весов. Слово "сплющить" сбивало с толку, не знаю, что оно здесь означает.

Пример игрушки, который я сделал для себя, чтобы перевести tf.dense в эквивалент np.tensordot

tf.reset_default_graph()
x0 = np.ones((3, 3, 3))
w0 = np.arange(6).reshape((3, 2))
x = tf.constant(x0)
y = tf.layers.dense(x, 2)
var_dict = {v.op.name: v for v in tf.global_variables()}
assert(var_dict["dense/kernel"].get_shape() == (3, 2))
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sess.run(tf.assign(var_dict["dense/kernel"], w0))
sess.run(tf.assign(var_dict["dense/bias"], np.zeros((2,))))

expected_y0 = np.tensordot(x0,w0,axes=[(2,),(0,)])
y0 = sess.run(y)
np.testing.assert_allclose(y0, expected_y0)
Была ли эта страница полезной?
0 / 5 - 0 рейтинги