Conditional forward

Hi, guys. When I put the conditional statement in forward function, it will throw an error. Need some help. Thanks.

 284 class Pooling(nn.Module):
 285     r"""Pooling
 286     """
 287     def __init__(self):
 288         super(Pooling, self).__init__()
 289         self.fp1 = nn.FractionalMaxPool2d(kernel_size=3, output_size=(50, 80))
 290         self.fp2 = nn.FractionalMaxPool2d(kernel_size=3, output_size=(80, 50))
 291         self.fp3 = nn.FractionalMaxPool2d(kernel_size=3, output_size=(50, 50))
 292
 293     def forward(self, x):
 294         B, C, H, W = x.size()
 295
 296         if H < W:
 297             return self.fp1(x)
 298         elif H > W:
 299             return self.fp2(x)
 300         else:
 301             return self.fp3(x)

What does "it doesn’t work " means ? what is happening ? what is not happening as it should ?

It will give a very strange error:

*** Error in `python3': free(): invalid pointer: 0x00007f7b9f101d40 ***
======= Backtrace: =========
/opt/compiler/gcc-4.8.2/lib/libc.so.6(+0x7354f)[0x7f7beaa6254f]
/opt/compiler/gcc-4.8.2/lib/libc.so.6(+0x78dbe)[0x7f7beaa67dbe]
/opt/compiler/gcc-4.8.2/lib/libc.so.6(+0x79a97)[0x7f7beaa68a97]
/home/yuekaiyu/python-3.5/lib/python3.5/site-packages/torch/_thnn/_THCUNN.cpython-35m-x86_64-linux-gnu.so(+0x65b80)[0x7f7a556fbb80]
python3(PyCFunction_Call+0x4c)[0x54d92c]
python3(PyEval_EvalFrameEx+0x41a)[0x4ea2da]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c44f]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_CallObjectWithKeywords+0x36)[0x4e9c56]
/home/yuekaiyu/python-3.5/lib/python3.5/site-packages/torch/_C.cpython-35m-x86_64-linux-gnu.so(_Z17THPFunction_applyP7_objectS0_+0x271)[0x7f7b9dc09ac1]
python3(PyCFunction_Call+0x4c)[0x54d92c]
python3(PyEval_EvalFrameEx+0x41a)[0x4ea2da]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c657]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_EvalFrameEx+0x25ab)[0x4ec46b]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c3e3]
python3(PyObject_Call+0x3a)[0x45904a]
python3[0x545a6e]
python3(PyObject_Call+0x3a)[0x45904a]
python3[0x4ac25f]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_EvalFrameEx+0x4866)[0x4ee726]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c657]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_EvalFrameEx+0x25ab)[0x4ec46b]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c3e3]
python3(PyObject_Call+0x3a)[0x45904a]
python3[0x545a6e]
python3(PyObject_Call+0x3a)[0x45904a]
python3[0x4ac25f]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_EvalFrameEx+0x4866)[0x4ee726]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c657]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_EvalFrameEx+0x25ab)[0x4ec46b]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c3e3]
python3(PyObject_Call+0x3a)[0x45904a]
python3[0x545a6e]
python3(PyObject_Call+0x3a)[0x45904a]
python3[0x4ac25f]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_EvalFrameEx+0x4866)[0x4ee726]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c657]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_EvalFrameEx+0x25ab)[0x4ec46b]
python3(PyEval_EvalCodeEx+0x123)[0x4f5a93]
python3[0x54c3e3]
python3(PyObject_Call+0x3a)[0x45904a]
python3[0x545a6e]
python3(PyObject_Call+0x3a)[0x45904a]
python3[0x4ac25f]
python3(PyObject_Call+0x3a)[0x45904a]
python3(PyEval_EvalFrameEx+0x4866)[0x4ee726]
python3(PyEval_EvalCodeEx+0x673)[0x4f5fe3]
python3[0x54c657]
======= Memory map: ========
00400000-0063e000 r-xp 00000000 08:08 50608171                           /home/yuekaiyu/python-3.5/bin/python3.5
0083d000-008a1000 rw-p 0023d000 08:08 50608171                           /home/yuekaiyu/python-3.5/bin/python3.5
008a1000-f4ef0000 rw-p 00000000 00:00 0                                  [heap]
200000000-200200000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
200200000-200400000 ---p 00000000 00:00 0
200400000-200404000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
200404000-200600000 ---p 00000000 00:00 0
200600000-200a00000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
200a00000-201800000 ---p 00000000 00:00 0
201800000-201804000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
201804000-201a00000 ---p 00000000 00:00 0
201a00000-201e00000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
201e00000-202c00000 ---p 00000000 00:00 0
202c00000-202c04000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
202c04000-202e00000 ---p 00000000 00:00 0
202e00000-203200000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
203200000-204000000 ---p 00000000 00:00 0
204000000-204004000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
204004000-204200000 ---p 00000000 00:00 0
204200000-204600000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
204600000-205400000 ---p 00000000 00:00 0
205400000-205404000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
205404000-205600000 ---p 00000000 00:00 0
205600000-205a00000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
205a00000-206800000 ---p 00000000 00:00 0
206800000-206804000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
206804000-206a00000 ---p 00000000 00:00 0
206a00000-206e00000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
206e00000-207c00000 ---p 00000000 00:00 0
207c00000-207c04000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
207c04000-207e00000 ---p 00000000 00:00 0
207e00000-208200000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
208200000-209000000 ---p 00000000 00:00 0
209000000-209004000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
209004000-209200000 ---p 00000000 00:00 0
209200000-209600000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
209600000-20a400000 ---p 00000000 00:00 0
20a400000-20a404000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20a404000-20a600000 ---p 00000000 00:00 0
20a600000-20aa00000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20aa00000-20aa04000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20aa04000-20ac00000 ---p 00000000 00:00 0
20ac00000-20b000000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20b000000-20b004000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20b004000-20b200000 ---p 00000000 00:00 0
20b200000-20b600000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20b600000-20b604000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20b604000-20b800000 ---p 00000000 00:00 0
20b800000-20bc00000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20bc00000-20bc04000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20bc04000-20be00000 ---p 00000000 00:00 0
20be00000-20c200000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20c200000-20c204000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20c204000-20c400000 ---p 00000000 00:00 0
20c400000-20c800000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20c800000-20c804000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20c804000-20ca00000 ---p 00000000 00:00 0
20ca00000-20ce00000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20ce00000-20ce04000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20ce04000-20d000000 ---p 00000000 00:00 0
20d000000-20d400000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20d400000-20d600000 ---p 00000000 00:00 0
20d600000-20d800000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20d800000-20da00000 rw-s 00000000 00:0e 32186                            /dev/nvidiactl
20da00000-300200000 ---p 00000000 00:00 0
318ee00000-318ef39000 r-xp 00000000 08:02 644547                         /usr/lib64/libX11.so.6.3.0
318ef39000-318f139000 ---p 00139000 08:02 644547                         /usr/lib64/libX11.so.6.3.0
318f139000-318f13f000 rw-p 00139000 08:02 644547                         /usr/lib64/libX11.so.6.3.0
318fa00000-318fa02000 r-xp 00000000 08:02 644969                         /usr/lib64/libXau.so.6.0.0
318fa02000-318fc02000 ---p 00002000 08:02 644969                         /usr/lib64/libXau.so.6.0.0
318fc02000-318fc03000 rw-p 00002000 08:02 644969                         /usr/lib64/libXau.so.6.0.0
3190200000-3190211000 r-xp 00000000 08:02 645300                         /usr/lib64/libXext.so.6.4.0
3190211000-3190411000 ---p 00011000 08:02 645300                         /usr/lib64/libXext.so.6.4.0
3190411000-3190412000 rw-p 00011000 08:02 645300                         /usr/lib64/libXext.so.6.4.0
3191200000-3191209000 r-xp 00000000 08:02 644756                         /usr/lib64/libXrender.so.1.3.0
3191209000-3191409000 ---p 00009000 08:02 644756                         /usr/lib64/libXrender.so.1.3.0
3191409000-319140a000 rw-p 00009000 08:02 644756                         /usr/lib64/libXrender.so.1.3.0
3197200000-3197207000 r-xp 00000000 08:02 644927                         /usr/lib64/libSM.so.6.0.0
3197207000-3197407000 ---p 00007000 08:02 644927                         /usr/lib64/libSM.so.6.0.0
3197407000-3197408000 rw-p 00007000 08:02 644927                         /usr/lib64/libSM.so.6.0.0
3197600000-3197617000 r-xp 00000000 08:02 644725                         /usr/lib64/libICE.so.6.3.0
3197617000-3197817000 ---p 00017000 08:02 644725                         /usr/lib64/libICE.so.6.3.0
3197817000-3197818000 rw-p 00017000 08:02 644725                         /usr/lib64/libICE.so.6.3.0

What version of pytorch do you use ?

Python3.5 + PyTorch 0.3.1

try updating pytorch, I guess

Okay, I will try. The code has no problem, right?

I don’t see any, can you print H W B C, if they are not null or if it doesn’t raise any error then there is no mistake.

B, C, H, W = 1, 1024, 55, 50, it seems x is fine.

So yeah there is no mistake in your code.

There’s a bug in pip binaries for pytorch versions 0.3.1 and earlier that causes the invalid free you’re seeing. You can either install pytorch from conda or install pytorch 0.4.0 to fix the problem.

Thanks, @richard. It looks like nn.FractionalMaxPool2d causes the error. nn.AdaptiveMaxPool2d works fine.