Уменьшение одного измерения тензора в Lua Torch

У меня есть тензор X формы

(2,[...])

где три точки могут быть любым вектором размеров (например: 4,4)

Я хотел бы преобразовать этот тензор в тензор, форма которого

(1,[...])

Другими словами, я хочу уменьшить размерность первого измерения. Конечно, я потеряю информацию, проиндексированную 2, но в данном случае это не имеет значения. Проблема не тривиальна, так как я не знаю размерности тензоров. Но, по крайней мере, больше или равно 2. Код ниже:

th> x = torch.Tensor(2, 4, 4):fill(1)
th> y = x[1]
th> z = torch.Tensor()
th> z[1] = y -- bad argument #1 to '?' (empty tensor at /home/ubuntu/torch/pkg/torch/generic/Tensor.c:684)

У вас есть идеи, как это сделать?

Спасибо заранее


person Philippe Remy    schedule 11.12.2015    source источник


Ответы (2)


Я хочу уменьшить размерность первого измерения

Если под сокращением вы подразумеваете уменьшение тогда вы можете сделать, например:

x = torch.Tensor(2, 4, 4)
x[1]:fill(0)
x[2]:fill(1)

-- this creates tensors of size 1x4x4
-- the first dimension is narrowed, one index at a time
a = x:narrow(1, 1, 1)
b = x:narrow(1, 2, 1)

Это дает:

> print(a)
(1,.,.) = 
  0  0  0  0
  0  0  0  0
  0  0  0  0
  0  0  0  0
[torch.DoubleTensor of size 1x4x4]

> print(b)
(1,.,.) = 
  1  1  1  1
  1  1  1  1
  1  1  1  1
  1  1  1  1
[torch.DoubleTensor of size 1x4x4]
person deltheil    schedule 11.12.2015

Этот код делает то, что вам нужно:

y = x[{{1, 1}, {}, {}}]

Неизвестное количество измерений? Не проблема, вам не нужно указывать их все:

y = x[{{1, 1}}]

(1,.,.) = 
  1  1  1  1
  1  1  1  1
  1  1  1  1
  1  1  1  1
[torch.DoubleTensor of size 1x4x4]
person Alexander Lutsenko    schedule 11.12.2015