Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TTLayer doesn't work with non-contiguous input matrix #3

Open
philip-bl opened this issue Mar 19, 2019 · 2 comments
Open

TTLayer doesn't work with non-contiguous input matrix #3

philip-bl opened this issue Mar 19, 2019 · 2 comments

Comments

@philip-bl
Copy link

philip-bl commented Mar 19, 2019

Репорчу баг, доставляющий сложности с использованием твоего TTLayer в некоторых моделях (например в Tensor Train GRU).

<ipython-input-38-60c832c24e05> in forward(self, X)
     63             # this is also called d^{(t)}
     64             updated_hidden_state_value = torch.tanh(
---> 65                 self.input_to_updated_hidden_value(X_part)
     66                 + self.hidden_state_to_updated_hidden_value(self.hidden_state * self.reset_gate)
     67             )

~/soft/conda/lib/python3.6/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    487             result = self._slow_forward(*input, **kwargs)
    488         else:
--> 489             result = self.forward(*input, **kwargs)
    490         for hook in self._forward_hooks.values():
    491             hook_result = hook(self, input, result)

~/soft/conda/lib/python3.6/site-packages/t3nsor/layers.py in forward(self, x)
    126             return t3.tt_dense_matmul(weight_t, x_t).transpose(0, 1)
    127         else:
--> 128             return t3.tt_dense_matmul(weight_t, x_t).transpose(0, 1) + self.bias

~/soft/conda/lib/python3.6/site-packages/t3nsor/ops.py in tt_dense_matmul(tt_matrix_a, matrix_b)
     77     # data is (K, j0, ..., jd-2) x jd-1 x 1
     78     data = matrix_b.transpose(0, 1)
---> 79     data = data.view(-1, a_raw_shape[1][-1], 1)
     80 
     81     for core_idx in reversed(range(ndims)):

RuntimeError: invalid argument 2: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Call .contiguous() before .view(). at /opt/conda/conda-bld/pytorch_1549628766161/work/aten/src/THC/generic/THCTensor.cpp:220

Я думаю, он проявляется вот почему:

В forward моей модели подается тензор X размера 32 x 85 x 1131, где 32 - кол-во сэмплов в бэтче, 85 - кол-во кадров (это видео), 1131 - пиксели.

Так вот, в TTLayer моя модель подает, например, X[:, 0, :], потому что сначала она обрабатывает нулевые элементы последовательностей в бэтче, потом первые, и т.д. Соответсвенно X[:, 0, :].is_contiguous() возвращает False.

@philip-bl
Copy link
Author

Оказывается, весь TTLayer не дружит с методом .to(device). Один такой фикс не поможет.

@philip-bl
Copy link
Author

Как воркэраунд я в своем коде вызываю у матрицы метод contiguous() и результат уже передаю в TTLayer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant