Как сохранить укладку тензоров в Tensorflow - PullRequest
0 голосов
/ 26 января 2020

Цель состоит в том, чтобы добавить 2 тензора с одной совпадающей формой

import tensorflow as tf 
x = tf.constant([1, 4]) 
y = tf.constant([2, 5]) 
z = tf.constant([3, 6]) 
res = tf.stack([x, y],axis=0)
print(res)
->tf.Tensor(
  [[1 4]
  [2 5]], shape=(2, 2), dtype=int32)
print(z)
->tf.Tensor([3 6], shape=(2,), dtype=int32)
result = tf.stack((res, z),axis=1)
->tensorflow.python.framework.errors_impl.InvalidArgumentError: Shapes of all inputs must match: values[0].shape = [2,2] != values[1].shape = [2] [Op:Pack] name: stack

что я ожидал

print(result)
->->tf.Tensor(
  [[1 4]
  [2 5]
  [3,6]], shape=(2, 3), dtype=int32)

я пробовал различную комбинацию concat и стека. Как это возможно?

1 Ответ

1 голос
/ 26 января 2020

Первый tf.stack работает, потому что все входные тензоры x, y, z имеют одинаковую форму (2,). Второй tf.stack не будет работать, так как мы имеем дело с тензорами различной формы.

Чтобы присоединиться к ним, вы можете использовать tf.concat, но с настроенной формой Тензора:

# res is shape (2, 2)
z = tf.expand_dims(z, axis=0)     # Shape is now (1, 2) instead of (2,)
result = tf.concat((res, z), axis=0)     # Shape match except in axis 0

print(result)

Это вернет

tf.Tensor(
[[1 4]
 [2 5]
 [3 6]], shape=(3, 2), dtype=int32)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...