Pytorch Verlust inf nan

Ich versuche zu tun, die einfache lineare regression mit 1-Funktion. Es ist eine einfache ‚voraussagen Gehalt gegeben Jahre Erfahrung“ – problem.
Die NN-Züge auf Jahre Erfahrung mit (X) und ein Gehalt (Y).
Aus irgendeinem Grund ist der Verlust explodiert und letztlich gibt inf oder nan

Dies ist der code den ich habe:

import torch
import torch.nn as nn
import pandas as pd
import numpy as np

dataset = pd.read_csv('./salaries.csv')

x_temp = dataset.iloc[:, :-1].values
y_temp = dataset.iloc[:, 1:].values

X_train = torch.FloatTensor(x_temp)
Y_train = torch.FloatTensor(y_temp)

class Model(torch.nn.Module): 
    def __init__(self):
        super().__init__()
        self.linear = torch.nn.Linear(1,1)

    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred

model = Model()

loss_func = torch.nn.MSELoss(size_average=False)
optim = torch.optim.SGD(model.parameters(), lr=0.01)

#training 
for epoch in range(200):
    #calculate y_pred
    y_pred = model(X_train)

    #calculate loss
    loss = loss_func(y_pred, Y_train)
    print(epoch, "{:.2f}".format(loss.data))

    #backward pass + update weights
    optim.zero_grad()
    loss.backward()
    optim.step()


test_exp = torch.FloatTensor([[8.0]])
print("8 years experience --> ", model(test_exp).data[0][0].item())

Als ich erwähnte, sobald es beginnt die Ausbildung der Verlust wird super groß und endet mit inf nach wie die 10th Epoche.

Vermute ich, dass es vielleicht auch etwas damit zu tun, wie ich bin laden der Daten? Das ist, was in salaries.csv Datei:

Years Salary
1.1 39343
1.3 46205
1.5 37731
2   43525
2.2 39891
2.9 56642
3   60150
3.2 54445
3.2 64445
3.7 57189
3.9 63218
4   55794
4   56957
4.1 57081
4.5 61111
4.9 67938
5.1 66029
5.3 83088

Danke für Eure Hilfe

  • Sie haben NaNs oder infs im dataset?
  • Kannst du den link posten für die Gehälter csv?
  • Ich würde anfangen, indem man den durchschnittlichen Verlust, anstatt eine Summe (warum nicht vermeiden, die durchschnittlich in den ersten Platz?). Und/oder verringern Sie den Lern-rate. Schließlich, Sie machen würde das problem eher sinnvoll für MSE durch die Drosselung der Ausgabe von Werten (ich würde vorschlagen, eine um den Faktor 10 000, also die Werte bleiben lesbar).
InformationsquelleAutor JAbrams | 2018-06-25



2 Replies
  1. 5

    Sobald der Verlust wird inf nach einer bestimmten pass, Ihr Modell beschädigt nach backpropagating. Dies geschieht wahrscheinlich, weil die Werte in der „Gehalt“ – Spalte zu groß sind. versuchen Sie, die Normalisierung der Gehälter.

    Alternativ könnten Sie versuchen, initialisieren Sie die Parameter von hand (anstatt die es werden zufällig initialisiert), so dass der bias-term werden die durchschnittlichen Gehälter, und die Steigung der geraden 0 sein (zum Beispiel). So das erste Modell wäre nahe genug, um die optimale Lösung, so dass der Verlust nicht sprengen.

  2. 0

    Hier ist ein Beispiel, wie das alles passiert. Sie können versuchen, dieses Programm auszuführen, die im Grunde stellt r-deep-layer-Netzwerk.

    import torch
    import math
    import matplotlib.pyplot as plt
    def stat(t, p=True):
        m = t.mean()
        s = t.std()
        if p==True:
            print(f"MEAN: {m}, STD: {s}")
        return(m,s)
    
    _m = []
    _s = []
    
    c = 100
    r = 50# repeat steps
    x = torch.randn(c)
    m = torch.randn(c,c)#/math.sqrt(n)
    stat(x)
    
    for _ in range (0,r):
        x = [email protected]    
        _1, _2 = stat(x, False)
        _m.append(_1)
        _s.append(_2)
    
    
    stat(x)
    
    plt.plot(_m)
    plt.plot(_s)
    plt.legend(["mean","std"])
    plt.show()
    

    Pytorch Verlust inf nan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.