Присвоение значений тензорам горелки - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь присвоить некоторые значения тензору факела.В приведенном ниже примере кода я инициализировал тензор U и попытался присвоить тензор b последним двум измерениям.В действительности это цикл по i и j, который решает некоторое соотношение для ряда обучающих данных (здесь 10) и присваивает его соответствующему местоположению.

import torch

U = torch.zeros([10, 1, 4, 4])
b = torch.rand([10, 1, 1, 1])

i = 2
j = 2
U[:, :, i, j] = b

Я ожидал, что будет назначен вектор bдля измерений i и j соответствующих данных обучения (форма данных обучения составляет (10,1)), но это дает мне ошибку.Я получаю следующую ошибку:

RuntimeError: expand(torch.FloatTensor{[10, 1, 1, 1]}, size=[10, 1]): the number of sizes provided (2) must be greater or equal to the number of dimensions in the tensor (4)

Любые предложения о том, как ее исправить, будут оценены.


Например, вы можете думать об этом так, как будто '[10, 1] 'это форма моих данных.Представьте, что это 10 изображений, каждое из которых имеет один канал.Затем представьте, что каждое изображение имеет форму «[4, 4]».На каждой итерации цикла вычисляется пиксель «[i, j]» для всех изображений и каналов.

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

Ваш тензор b имеет слишком много измерений.

U[:, :, i, j] имеет [10, 1] форму (попробуйте U[:, :, i, j].shape)

Используйте b = torch.rand([10, 1]) вместо.

1 голос
/ 04 июня 2019

Благодаря подсказке @ Khoyo об источнике проблемы, я использовал reshape, чтобы исправить это следующим образом

import torch

U = torch.zeros([10, 1, 4, 4])
b = torch.rand([10, 1, 1, 1])

i = 2
j = 2
U[:, :, i, j] = b.reshape((-1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...