Hi,
About alternatives for pooling, you can do it using stride in Conv layers or using different poolings but I do not think that is good idea to skip a method just because of syntax error! 
About the MaxPool and MaxUnpool, something I should mention is that you have to provide the indices to MaxUnpool. When you are using MaxPool in your encoder, it returns a tuple (values, indices) and you have to save those and pass them to your decoder.
I think this post explains the situation very well.

  
    
    
    About MaxPool and MaxUnpool 
  
  
    Hi all, 
I have got a problem about the pooling function, the code were shown below: 
input = Variable(torch.rand(1,1,64,64))
pool1 = nn.MaxPool2d(2, stride=2, padding=1, return_indices=True)
pool2 = nn.MaxPool2d(2, stride=2, return_indices=True)
unpool1= nn.MaxUnpool2d(2, stride=2)
unpool2= nn.MaxUnpool2d(2, stride=2, padding=1)

output1, indices1 = pool1(input)
output2, indices2 = pool2(output1)

output3 = unpool1(output2,indices2)
output4 = unpool2(output3, indices1)

An error I had got: 
Run…
  


bests