首页 > 解决方案 > 为什么代码无法逼近平方函数?

问题描述

为什么以下代码不能用作平方逼近器?我得到奇怪的尺寸。当我尝试绘制损失时,图表不知何故没有显示任何内容。我是 pytorch 的初学者,所以我将不胜感激。

import torch
from torch import nn
import matplotlib.pyplot as plt
import numpy as np

data = [[i] for i in range(-10000, 10000)]
y = [[i[0] * i[0]] for i in data]
data=torch.FloatTensor(data)
y=torch.FloatTensor(y)


class MyModel(nn.Module):
    def __init__(self, numfeatures, outfeatures):
        super().__init__()
        self.modele = nn.Sequential(
                                    nn.Linear( numfeatures,  2*numfeatures),
                                    nn.ReLU(),
                                    nn.Linear(2 * numfeatures, 4 * numfeatures),
                                    nn.ReLU(),
                                    nn.Linear(4* numfeatures, 2 * numfeatures),
                                    nn.ReLU(),
                                    nn.Linear(2*numfeatures, numfeatures),
                                    )
    def forward(self, x):
        return self.modele(x)


model = MyModel(1, 1)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

n_epochs = 10000
epoch_loss= []

for i in range(n_epochs):
    y_pred = model(data)
    loss = criterion(y_pred, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    epoch_loss.append(loss.item())

    

plt.plot(epoch_loss)

标签: pythonpytorch

解决方案


您的数据范围从-1000010000!你需要标准化你的数据,否则你将无法让你的模型学习:

data = (data - data.min()) / (data.max() - data.min())
y = (y - y.min()) / (y.max() - y.min())

此外,您可以使用以下方法标准化您的输入:

mean, std = data.mean(), data.std()
data = (data - mean) / std

100 个epoch后:

在此处输入图像描述


推荐阅读