我正在制作一个简单的 PyTorch 神经网络来逼近 x = [0, 2pi] 上的正弦函数。这是一个简单的架构,我使用不同的深度学习库来测试我是否了解如何使用它。神经网络在未经训练时总是产生一条水平直线,而在训练时,在 y = 0 处产生一条直线。一般来说,它总是在 y =(函数的平均值)处产生一条直线。这让我相信它的前支柱部分有问题,因为边界不应该只是未经训练的直线。这是网络的代码:
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.model = nn.Sequential(
nn.Linear(1, 20),
nn.Sigmoid(),
nn.Linear(20, 50),
nn.Sigmoid(),
nn.Linear(50, 50),
nn.Sigmoid(),
nn.Linear(50, 1)
)
def forward(self, x):
x = self.model(x)
return x
这是训练循环
def train(net, trainloader, valloader, learningrate, n_epochs):
net = net.train()
loss = nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr = learningrate)
for epoch in range(n_epochs):
for X, y in trainloader:
X = X.reshape(-1, 1)
y = y.view(-1, 1)
optimizer.zero_grad()
outputs = net(X)
error = loss(outputs, y)
error.backward()
#net.parameters() net.parameters() * learningrate
optimizer.step()
total_loss = 0
for X, y in valloader:
X = X.reshape(-1, 1).float()
y = y.view(-1, 1)
outputs = net(X)
error = loss(outputs, y)
total_loss += error.data
print('Val loss for epoch', epoch, 'is', total_loss / len(valloader) )
它被称为:
net = Net()
losslist = train(net, trainloader, valloader, .0001, n_epochs = 4)
其中 trainloader 和 valloader 是训练和验证加载器。谁能帮我看看这有什么问题?我知道它不是学习率,因为它是我在其他框架中使用的,而且我知道这不是我使用 SGD 或 sigmoid 激活函数的事实,尽管我怀疑错误出在某处的激活函数中。
有谁知道如何解决这一问题?谢谢。

