Tensorflow-tf.concat () показывает разные результаты - PullRequest
0 голосов
/ 01 мая 2018
with tf.Session() as sess:
t1 = [
    [[0],[1],[2]],
    [[3],[4],[5]],
]
print(sess.run(tf.shape(t1)))
print(sess.run(tf.concat(t1,1)))
print("**********")
t2 = np.arange(6).reshape([2,3,1])
print(sess.run(tf.shape(t2)))
print(sess.run(tf.concat(t2,1)))

тогда показывает

[2 3 1]
[[0 3] [1 4] [2 5]]
[2 3 1]
[[[0] [1] [2]] [[3] [4] [5]]]

t1 и t2 имеют одинаковую форму и значение, почему результат отличается?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Со страницы документации на tf.concat () :

tf.concat(
values,
axis,
name='concat')
...
Concatenates !!the list!! of tensors values along dimension axis,
...
the data from the input tensors is joined along the axis dimension.

tf.concat() принимает список тензоров в качестве входных данных. t1 это список. tf.shape(t1) преобразует его в единый тензор и возвращает его форму. tf.concat(t1,1) видит t1 как список 2 объектов: [[0],[1],[2]] и [[3],[4],[5]]. Он преобразует t1 в список, содержащий 2 тензора формы (3,1), объединяет их и возвращает тензор формы (3,2). Чтобы убедиться в этом, вы можете запустить следующий пример:

with tf.Session() as sess:
  t1 = [
    [[0],[1],[2]],
    [[3],[4],[5]],
  ]

  t100 = [[0],[1],[2]]
  t101 = [[3],[4],[5]]
  print(sess.run(tf.concat(t1,1)))
  # construct a list from t100 and t101
  print(sess.run(tf.concat([t100, t101],1)))

Оба вернут одинаковый результат. С другой стороны, t2 - это пустой массив, tf.concat (t2,1), рассматривает t2 как список, содержащий один простой массив, поэтому никакой конкатенации не происходит, и он по существу возвращает вам t2.

0 голосов
/ 01 мая 2018

Поскольку t1 - это list, а t2 - нет.

tf.concat объединяет список тензоров. Таким образом, t1 рассматривается как список из 2 тензоров размера 3x1 для объединения. С другой стороны, t2 является массивом NumPy, который преобразуется в один 2x3x1 Tensor, и нет ничего другого для конкатенации этого тензора.

Я думаю, что вас могло удивить то, что t1 интерпретируется по-разному в зависимости от контекста. tf.shape ожидает Tensor в качестве аргумента, а не список тензоров, поэтому при передаче этой функции t1 интерпретируется как 2x3x1 тензор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...