It depends on what you are trying to do. Are you trying to make a lstm with cnns if so then I would recommend doing this. Add this a new conv layer to your ConvGRUCell:
self.conv_ch = nn.Conv2d(
            in_channels=self.hidden_channels,
            out_channels=gate_channels,
            kernel_size=hidden_kernel_size,
            stride=1,
            padding=hidden_padding,
            dilation=1,
            bias=bias)

then in the forward function you can do this
x = input
        gate_x = self.conv_ih(input) 
        gate_h = self.conv_hh(hidden[0])
        gate_c = self.conv_ch(hidden[1])
        i_r, i_i, i_n = gate_x.chunk(3, 1)
        h_r, h_i, h_n = gate_h.chunk(3, 1)
        c_r, c_i, c_n = gate_c.chunk(3, 1)

        resetgate = F.sigmoid(i_r + h_r + c_r)
        inputgate = F.sigmoid(i_i + h_i + c_i)
        newgate = F.tanh(i_n + (resetgate * (h_n + c_i) ))
        
        hy = newgate + inputgate * (hidden[0]  - newgate)
        
        return hy

or variants of that. You could also just remove one of the variables like this
encoder_h_1 = Variable(torch.zeros(data.size(0), 256, 8, 8).cuda()

that would be less complicated either way it should fix the problem.