簡體   English   中英

PyTorch 線性回歸模型

[英]PyTorch linear regression model

我有一個多元線性回歸問題,其中每個數據點如下所示:

y_i = 3                             # Some integer between 0 and 20
X_i = [0.5, 80, 0.004, 0.5, 0.789]  # A 5 dimensional vector

我可以使用 sklearn 訓練一個簡單的線性模型,例如:

from sklearn import linear_model
ols = linear_model.LinearRegression()
model = ols.fit(X, y)

這使我的准確率達到了約 55%(線性模型不適合該問題,但這是證明對問題建模的可行性的基線,也是我學習 PyTorch 的一種方式,之前使用過 TensorFlow)。

當我嘗試使用 PyTorch 訓練線性模型時,我將模型定義為:

class TwoLayerNet(torch.nn.Module):
    def __init__(self, D_in, D_out):

        super(TwoLayerNet, self).__init__()
        self.linear1 = torch.nn.Linear(D_in, D_out)

    def forward(self, x):

        y_pred = self.linear1(x)
        return y_pred

D_in, D_out = 5, 1
model = TwoLayerNet(D_in, D_out)

並訓練為:

epochs = 10
criterion = torch.nn.MSELoss(reduction='sum')
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4)
for epoch in range(epochs):
    for n, batch in enumerate(batches):
        X = []
        y = []
        for values in batch:
            X.append(values[0])
            y.append(values[1])
        
        X = torch.from_numpy(np.asarray(X))
        y = torch.from_numpy(np.asarray(y))
        # Forward pass: Compute predicted y by passing x to the model
        optimizer.zero_grad()
        y_pred = model(X)
        # Compute and print loss
        loss = criterion(y_pred, y)
        if n % 100 == 99:
            print(n, loss.item())

        # Zero gradients, perform a backward pass, and update the weights.
        
        loss.backward()
        optimizer.step()

這只是我調整過的 PyTorch 文檔中的一些代碼。 當前設置僅達到約 25%,遠不及我對線性模型所期望的准確度。 我在 PyTorch 的模型訓練中做錯了什么嗎?

tam63,

您在模型定義中缺少激活函數。 代替

y_pred = self.linear1(x)

y_pred =  F.relu(self.linear1(x))

還有一些事情可能會出錯。 例如(1)學習率太低,(2)層太少(多加一層)。 如果你像你說的那樣熟悉 TF,在 TF 中嘗試同樣的問題,一旦你有好的結果 - 將它轉換成具有相同網絡結構和相同超參數的 Pytorch。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM