Мне нужно объединить 4 тензора, представляющих изображения в оттенках серого, размером [1,84,84], в стопку формы [4,84,84], представляющую четыре изображения в оттенках серого, причем каждое изображение представлено в виде «канала»в тензорном стиле CxWxH.
Я использую PyTorch.
Я пытался использовать torch.stack и torch.cat, но если один из них является решением, мне не удастся выяснить,правильная подготовка / методология для получения моих результатов.
Спасибо за любую помощь.
import torchvision.transforms as T
class ReplayBuffer:
def __init__(self, buffersize, batchsize, framestack, device, nS):
self.buffer = deque(maxlen=buffersize)
self.phi = deque(maxlen=framestack)
self.batchsize = batchsize
self.device = device
self._initialize_stack(nS)
def get_stack(self):
#t = torch.cat(tuple(self.phi),dim=0)
t = torch.stack(tuple(self.phi),dim=0)
return t
def _initialize_stack(self, nS):
while len(self.phi) < self.phi.maxlen:
self.phi.append(torch.tensor([1,nS[1], nS[2]]))
a = ReplayBuffer(buffersize=50000, batchsize=64, framestack=4, device='cuda', nS=[1,84,84])
print(a.phi)
s = a.get_stack()
print(s, s.shape)
Приведенный выше код возвращает:
print(a.phi)
deque([tensor([ 1, 84, 84]), tensor([ 1, 84, 84]), tensor([ 1, 84, 84]), tensor([ 1, 84, 84])], maxlen=4)
print(s, s.shape)
tensor([[ 1, 84, 84],
[ 1, 84, 84],
[ 1, 84, 84],
[ 1, 84, 84]]) torch.Size([4, 3])
Но то, что я хотел быэто возвращение просто быть [4, 84, 84].Я подозреваю, что это довольно просто, но это ускользает от меня.