Size mismatch in RNN

Hey All,

I’m building a RNN to analyze audio. My current framework is input of 10000, hidden layer of 1000, output of 1.

My code looks like this - I loosely based it on this model here

class discriminator(torch.nn.Module):

    def __init__(self,input_size,hidden_size):
        super(discriminator,self).__init__()
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.i2h = torch.nn.Linear(input_size+hidden_size,hidden_size)
        self.i2o = torch.nn.Linear(input_size+hidden_size,1)
        self.softmax = torch.nn.LogSoftmax(dim=1)
        self.learning_rate = 0.005

    def forward(self, input, hidden):
        combined = torch.cat((input,hidden),0)
        print(combined.size())
        hidden = self.i2h(combined)
        output = self.softmax(self.i2o(combined))
        return output,hidden

    def initHidden(self):
        return torch.zeros(self.hidden_size,1)

    def train_rnn(self,input_tensor,result_tensor):

        hidden = self.initHidden()

        self.zero_grad()

        for i in range(input_tensor.size()[0]):
            output, hidden = self.forward(input_tensor[i],hidden)

        loss = torch.nn.NLLLoss(output,result_tensor)
        loss.backward()
        for p in self.parameters():
            p.data.add_(-self.learning_rate,p.grad.data)

        return output, loss.item()

I am putting in a [15,10000,1] tensor in as a test input into a discriminator with an input size of 10000 and a hidden size of 10000, and am getting this error:

Traceback (most recent call last):

  File "gan.py", line 123, in <module>

    main()

  File "gan.py", line 109, in main

    output,loss = disc.train_rnn(test[0],test[1])

  File "gan.py", line 75, in train_rnn

    output, hidden = self.forward(input_tensor[i],hidden)

  File "gan.py", line 61, in forward

    hidden = self.i2h(combined)

  File "/Users/glma2016/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 477, in __call__

    result = self.forward(*input, **kwargs)

  File "/Users/glma2016/anaconda3/lib/python3.7/site-packages/torch/nn/modules/linear.py", line 55, in forward

    return F.linear(input, self.weight, self.bias)

  File "/Users/glma2016/anaconda3/lib/python3.7/site-packages/torch/nn/functional.py", line 1024, in linear

    return torch.addmm(bias, input, weight.t())

RuntimeError: size mismatch, m1: [20000 x 1], m2: [20000 x 10000] at /Users/soumith/code/builder/wheel/pytorch-src/aten/src/TH/generic/THTensorMath.cpp:2070

I don’t know where this m2 is getting this mismatch from - the i2h linear layer should just be a normal linear layer. Where should I start troubleshooting?

thanks!