Я сделал модель, используя пиро на вершине пироха. Тем не менее, я получаю следующую ошибку:
h_0_contig = self.h_0.expand(1,size,self.rnn.hidden_size)
TypeError: expand (): аргумент 'size' должен быть кортежем из целых чисел, но найден элемент типа Tensor в позиции 2
Я думал, что это потому, что я давал тензор в качестве входных данных. И затем я явно дал его как целое число, а затем он выдал мне следующую ошибку:
RuntimeError: Невозможно вставить Tensor, который требует grad в качестве константы. Попробуйте сделать его параметром или входом или отсоединить градиент
Тензор:
(1,.,.) = Столбцы с 1 по 26 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0
Ниже приведен мой код, в котором я получаю ошибку (руководство по функциям). mini_batch, mini_batch_reversed, mini_batch_mask и коэффициент отжига - все они являются тензорами. Я использую код из следующего:
https://github.com/pyro-ppl/pyro/blob/dev/examples/dmm/dmm.py
Я не знаю, что вызывает эту ошибку. Выводы будут оценены.
def guide(self,mini_batch,mini_batch_reversed,mini_batch_mask,annealing_factor = torch.tensor(1.0)):
#T_max = mini_batch.size(1)
T_max = 247
pyro.module('DMM',self)
#size = mini_batch.size(0)
size = 5
print('type of size : ',type(size))
print('rnn hidden size : ',self.rnn.hidden_size)
h_0_contig = self.h_0.expand(1,size,self.rnn.hidden_size)
rnn_output,_ = self.rnn(mini_batch_reversed,h_0_contig)
rnn_output = dp.pad_and_reverse(rnn_output, mini_batch.size(1))
z_prev = self.z_q_0.expand(mini_batch.size(0),self.z_q_0.size(0))
with pyro.plate('z_minibatch',len(mini_batch)):
for t in range(1,T_max+1):
z_loc,z_scale = self.combiner(z_prev,rnn_output[:,t-1,:])
z_dist = dist.Normal(z_loc,z_scale)
with pyro.poutine.scale(None,annealing_factor):
z_t = pyro.sample("z_%d" % t,z_dist.mask(mini_batch_mask[:, t - 1:t]).to_event(1))
z_prev = z_t