程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了pytorch 中的模型损失没有变化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决pytorch 中的模型损失没有变化?

开发过程中遇到pytorch 中的模型损失没有变化的问题如何解决?下面主要结合日常开发的经验,给出你关于pytorch 中的模型损失没有变化的解决方法建议,希望对你解决pytorch 中的模型损失没有变化有所启发或帮助;

我正在用 pytorch 处理巨大的数据
这些是我的模型和训练代码

import torch.nn.functional as F

class Net(torch.nn.ModulE):
    def __init__(self):
        super(Net,self).__init__()
        self.fc1_1=torch.nn.linear(13,512)
        self.fc1_2=torch.nn.linear(512,64)
        self.fc1_3=torch.nn.linear(64,10)

        self.fc2_1=torch.nn.linear(13,64)
        self.fc2_2=torch.nn.linear(64,512)
        self.fc2_3=torch.nn.linear(512,10)

        self.fc3_1=torch.nn.linear(13,128)
        self.fc3_2=torch.nn.linear(128,128)
        self.fc3_3=torch.nn.linear(128,10)

        self.fc_full_1=torch.nn.linear(30,64)
        self.fc_full_2=torch.nn.linear(64,128)
        self.fc_full_3=torch.nn.linear(128,2)

    def forWARD(self,X):
        x1=self.fc1_1(X)
        x1=F.relu(x1)
        x1=self.fc1_2(x1)
        x1=F.relu(x1)
        x1=self.fc1_3(x1)
        x1=F.relu(x1)

        x2=self.fc2_1(X)
        x2=F.relu(x2)
        x2=self.fc2_2(x2)
        x2=F.relu(x2)
        x2=self.fc2_3(x2)
        x2=F.relu(x2)

        x3=self.fc3_1(X)
        x3=F.relu(x3)
        x3=self.fc3_2(x3)
        x3=F.relu(x3)
        x3=self.fc3_3(x3)
        x3=F.relu(x3)


        x=torch.cat((x1,x2,x3),dim=1)
        x=self.fc_full_1(X)
        x=F.relu(X)
        x=self.fc_full_2(X)
        x=F.relu(X)
        x=self.fc_full_3(X)

        return x

model=Net()

如上所示,它们只是全连接层 模型损失函数和优化 交叉熵损失和亚当

criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model1.parameters(),lr=0.05)

这些是训练代码

for epoch in range(100):
    model.Train()
    x_var = Variable(torch.floatTensor(x_Train))
    y_var = Variable(torch.LongTensor(y_Train))

    optimizer.zero_grad()
    Train_pred = model(x_var)
    loss =criterion(Train_pred,y_var)
    loss.BACkWARD()
    optimizer.step()

    Train_acc=calc_accuracy(Train_pred,y_var)
    loss=loss.data.numpy()

最后,打印的准确性和损失

Epoch  0
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  10
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  20
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  30
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  40
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  50
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  60
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  70
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  80
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121
Epoch  90
0.6900209 0.531578947368421
valID:   0.692668 0.4621212121212121

如上所示,模型训练损失和有效损失根本没有变化。 似乎是什么问题?

解决方法

您的优化器不使用您的 @H_509_6@model 的参数,而是使用其他一些 @H_509_6@model1 的参数。

optimizer = torch.optim.Adam(model1.parameters(),lr=0.05)

便说一句,您不必为每个时代都使用 @H_509_6@model.Train()。

大佬总结

以上是大佬教程为你收集整理的pytorch 中的模型损失没有变化全部内容,希望文章能够帮你解决pytorch 中的模型损失没有变化所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:pytorch