nn.Linear layer output nan on well formed input

kelps: <p>On well formatted inputs (without nan) linear transformation is returning NaN:</p>
<pre><code class="lang-auto">vec_tensor = torch.from_numpy(vec)

# check if input is nan
if np.isnan(np.sum(vec_tensor.cpu().numpy())):
    print("some values from input are nan")    

x = vec_tensor[:,0:ZONE_SIZE*2]
x = x.view(-1, ZONE_SIZE * 2)

x_mean = torch.mean(x, dim=1).view(-1,1)
x_std = torch.std(x, dim=1).view(-1,1)
x = (x -x_mean) / x_std

o = net.linear1(x)
print (o)
</code></pre>
<p>And the result is:</p>
<pre><code class="lang-auto">tensor([[nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        ...,
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.]])
</code></pre>
<p>Repo with the faulty network params and vector is here: <a href="https://github.com/ssainz/pytorch_bug" rel="nofollow noopener">https://github.com/ssainz/pytorch_bug</a></p>
<p>Versions are:</p>
<pre><code class="lang-auto">backports-abc (0.5)
backports.functools-lru-cache (1.5)
backports.shutil-get-terminal-size (1.0.0)
bleach (2.1.3)
certifi (2018.4.16)
chardet (3.0.4)
configparser (3.5.0)
cycler (0.10.0)
decorator (4.3.0)
entrypoints (0.2.3)
enum34 (1.1.6)
functools32 (3.2.3.post2)
future (0.16.0)
futures (3.2.0)
gym (0.10.5)
html5lib (1.0.1)
idna (2.6)
ipykernel (4.8.2)
ipython (5.7.0)
ipython-genutils (0.2.0)
ipywidgets (7.2.1)
Jinja2 (2.10)
jsonschema (2.6.0)
jupyter (1.0.0)
jupyter-client (5.2.3)
jupyter-console (5.2.0)
jupyter-core (4.4.0)
kiwisolver (1.0.1)
MarkupSafe (1.0)
matplotlib (2.2.2)
mistune (0.8.3)
nbconvert (5.3.1)
nbformat (4.4.0)
networkx (1.11)
notebook (5.5.0)
numpy (1.14.4)
pandocfilters (1.4.2)
pathlib2 (2.3.2)
pexpect (4.6.0)
pickleshare (0.7.4)
Pillow (5.1.0)
pip (9.0.1)
prompt-toolkit (1.0.15)
ptyprocess (0.5.2)
pyglet (1.3.2)
Pygments (2.2.0)
pyparsing (2.2.0)
python-dateutil (2.7.3)
pytz (2018.4)
pyzmq (17.0.0)
qtconsole (4.3.1)
requests (2.18.4)
scandir (1.7)
scipy (1.1.0)
Send2Trash (1.5.0)
setuptools (28.8.0)
simplegeneric (0.8.1)
singledispatch (3.4.0.3)
six (1.11.0)
subprocess32 (3.5.2)
terminado (0.8.1)
testpath (0.3.1)
torch (0.4.0)
torchvision (0.2.1)
tornado (5.0.2)
traitlets (4.3.2)
urllib3 (1.22)
wcwidth (0.1.7)
webencodings (0.5.1)
wheel (0.29.0)
widgetsnbextension (3.2.1)

</code></pre>
<p>Been able to reproduce this in 3 different machines with cpu and gpu~</p>

albanD: <p>Hi,</p>
<p>Are you sure <code>x_std</code> is not 0 in your case? Could you print <code>x</code> juste before giving it to the linear layer?</p>

kelps: <p>Hi,</p>
<p>Good idea, I did not think that. After printing out I see no zeros ~</p>
<p>Here is the output of x_std:</p>
<pre><code class="lang-auto">tensor([[  92.6681],
        [ 404.6292],
        [ 404.8976],
        [ 250.7227],
        [ 250.4256],
        [ 404.3423],
        [ 405.0550],
        [ 251.0206],
        [  92.5387],
        [  93.0143],
        [ 250.8486],
        [ 250.7405],
        [ 251.2732],
        [ 251.1312],
        [ 405.1576],
        [ 251.5628],
        [ 405.3494],
        [ 251.1480],
        [ 251.1116],
        [ 250.7486],
        [  92.4530],
        [ 404.8680],
        [ 405.2231],
        [ 404.7466],
        [ 251.1800],
        [ 251.3008],
        [ 404.9897],
        [  92.7674],
        [ 251.1480],
        [ 250.7218],
        [ 250.3925],
        [ 251.2240],
        [ 250.2169],
        [ 404.4504],
        [ 250.0995],
        [ 251.2035],
        [  92.9458],
        [ 249.7354],
        [ 404.9981],
        [ 404.6703],
        [ 251.3260],
        [ 405.0110],
        [ 250.1668],
        [ 404.6394],
        [ 250.3278],
        [ 251.0508],
        [ 251.0729],
        [ 250.6330],
        [ 405.1168],
        [ 250.6799],
        [  92.4707],
        [ 251.1223],
        [ 250.9282],
        [  92.1929],
        [ 251.3193],
        [  92.0439],
        [ 251.4816],
        [ 250.2316],
        [ 251.3165],
        [ 405.0492],
        [ 250.7802],
        [ 250.8962],
        [ 404.7462],
        [ 404.8201],
        [ 251.0861],
        [ 251.0475],
        [ 250.3490],
        [ 404.3512],
        [ 251.4652],
        [ 250.8202],
        [ 404.1475],
        [ 250.6063],
        [ 405.0731],
        [ 250.9353],
        [ 250.2173],
        [ 250.8657],
        [ 251.2978],
        [ 249.7068],
        [ 250.8334],
        [ 250.7502],
        [ 249.7354],
        [ 250.4344],
        [ 251.0381],
        [ 250.4152],
        [ 250.4865],
        [ 404.9912],
        [ 250.6725],
        [ 250.4263],
        [ 251.4652],
        [  92.8861],
        [ 250.4647],
        [ 250.7429],
        [ 250.6835],
        [ 250.9700],
        [ 404.8431],
        [ 250.6500],
        [ 250.9970],
        [ 250.8521],
        [ 405.1579],
        [ 404.6438],
        [ 250.6725],
        [ 250.1192],
        [ 250.4342],
        [ 404.7541],
        [ 404.9801],
        [ 404.9246],
        [ 251.1625],
        [  93.1926],
        [ 404.9897],
        [ 404.6542],
        [ 405.0998],
        [ 250.4555],
        [ 250.5661],
        [ 250.4902],
        [ 251.4263],
        [ 250.8609],
        [ 251.2598],
        [ 404.7595],
        [ 405.3346],
        [ 249.7911],
        [ 250.8093],
        [ 250.1427],
        [  92.8163],
        [ 250.6440],
        [ 250.3875],
        [ 250.8757],
        [ 251.1032],
        [ 404.8384]])
tensor([[nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        ...,
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.]])
</code></pre>

albanD: <p>Could you print(x) and print(net.linear1.weight) and print(net.linear1.bias) ?</p>

kelps: <p>Actually, below code still gets NaN, even when there is no division by anything:</p>
<pre><code class="lang-auto">vec_tensor = torch.from_numpy(vec)

# check if input is nan
if np.isnan(np.sum(vec_tensor.cpu().numpy())):
    print("some values from input are nan")    

x = vec_tensor[:,0:ZONE_SIZE*2]
x = x.view(-1, ZONE_SIZE * 2)

#x_mean = torch.mean(x, dim=1).view(-1,1)
#x_std = torch.std(x, dim=1).view(-1,1)
#print x_std

#x = (x -x_mean) / x_std

o = net.linear1(x)
print (o)
</code></pre>

kelps: <p>Ah, I see, the weights, bias are all NaN. Nevermind then <img src="https://discuss.pytorch.org/images/emoji/apple/smiley.png?v=5" title=":smiley:" class="emoji" alt=":smiley:"> . Thanks for checking this. I will go back and check why the network got into this state:</p>
<pre><code class="lang-auto">tensor([[  247.8170,   197.7785,    71.3301,  ...,     6.6686,
             3.2949,     5.3569],
        [ 1083.3394,   876.2274,   329.9731,  ...,     4.0454,
             4.5783,     2.2610],
        [ 1083.3394,   877.2274,   331.9731,  ...,     4.0422,
             1.6040,     3.9885],
        ...,
        [  673.0513,   545.6301,   208.7934,  ...,     4.0422,
             1.6040,     3.9885],
        [  673.0513,   545.6301,   210.7934,  ...,     2.9903,
             3.0112,     2.0683],
        [ 1083.3394,   879.2274,   331.9731,  ...,     5.1492,
             3.8545,     3.5510]])
Parameter containing:
tensor([[nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        ...,
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.],
        [nan., nan., nan.,  ..., nan., nan., nan.]])
Parameter containing:
tensor([nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.,
        nan., nan., nan., nan., nan., nan., nan., nan., nan., nan.])
</code></pre>

colllin: <p>What did you end up changing?  Why does the layer init with <code>nan</code> values??</p>

colllin: <p>Ok, my problem was that my input was not so well-formed.  I had an extremely large float, e.g. <code>-7.4e+168</code>.  This caused the linear layer to overflow and return nans.</p>

Prakriti_Shetty: <p>Hi,<br>
I’m getting the same error<br>
How had you solved this?</p>