pytorch 中 x**2 回归的预测不佳

问题描述 投票:0回答:0

我正在尝试使用 pytorch 复制 https://machinelearningmastery.com/neural-networks-are-function-approximators/ 中可用的代码并添加训练和测试数据,但预测和损失结果并不好。

第一次尝试,我尝试改变深度网络节点、epochs和学习率,然后
我尝试添加调度程序来调整学习率,并实施了一个小检查点来保存好的模型,但仍然不足以获得好的结果。

我想知道社区是否有任何想法来修复我的代码。

数据

X = torch.arange(start, end, step, dtype=torch.float32).unsqueeze(dim=1)
y = torch.tensor([i**2.0 for i in X[0:]]).unsqueeze(dim=1)

train_split = int (0.8 *len(X))
X_train, y_train = X[:train_split], y[:train_split]
X_test , y_test = X[train_split:], y[train_split:]

scaler_x = MinMaxScaler()
scaler_x.fit(X_train)
X_Train = scaler_x.transform(X_train)


scaler_y = MinMaxScaler()
scaler_y.fit(y_train)
y_Train = scaler_y.transform(y_train)

深度网络


class FunctionEstimatorModel(nn.Module):
    def __init__(self):
        super().__init__()

        self.linear_layer_1 = nn.Linear(in_features = 1,out_features = 200)
        self.relu = nn.LeakyReLU()
        self.linear_layer_2 = nn.Linear(in_features = 200,out_features = 200)
        self.relu = nn.LeakyReLU()
        self.linear_layer_3 = nn.Linear(in_features = 200,out_features = 1)



    def forward (self, x: torch.Tensor) -> torch.Tensor:
        return self.linear_layer_3(self.relu(self.linear_layer_2(self.relu(self.linear_layer_1(x)))))


循环

for epoch in range(epochs):

    model_0.train()
    y_preds = model_0(X_train).squeeze()
    loss = loss_fn(y_preds, y_train)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    scheduler.step()


#####Testing 
    model_0.eval()

    with torch.inference_mode():
        test_pred = model_0(X_test).squeeze()
        test_loss = loss_fn(test_pred, y_test)

    print(f"Epoch: {epoch} | Loss: {loss} | Test Loss: {test_loss}") 

enter image description here

非常感谢

python tensorflow deep-learning pytorch artificial-intelligence
© www.soinside.com 2019 - 2024. All rights reserved.