Pytorch构建神经网络进行训练

目录

1.构建网络结构

2.定义损失函数和优化器

3.训练部分

4.保存和加载网络


1.构建网络结构

网络名=torch.nn.Sequential(网络层)
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.predict=nn.Sequential(
            nn.Linear(1,20),
            nn.ReLU(),
            nn.Linear(20,20),
            nn.ReLU(),
            nn.Linear(20,1)
        )
    def forward(self,x):#前向传播过程
        prediction=self.predict(x)#将x传入网络
        return prediction

2.定义损失函数和优化器

optimizer=torch.optim.SGD(net.parameters(),lr=0.05)
loss_func=nn.MSELoss()

 具体优化器的区别,请读者查看另一篇文章

Pytorch学习笔记(3)--优化器optimicon-default.png?t=N176https://blog.csdn.net/m0_61385981/article/details/124244484?spm=1001.2014.3001.5502

3.训练部分

out=net(x)#实际输出
loss=loss_func(out,y)#实际输出与期望输出传入损失函数
optimizer.zero_grad()#清除梯度
loss.backward()#误差反向传播
optimizer.step()#优化器开始优化

4.保存和加载网络

方法一:保存和加载整个网络

torch.save(网络名,'路径/命名.pkl')
torch.load('路径/文件名.pkl')

 保存了整个网络,在加载网络时不用再重新定义网络模型

但是.pkl文件较大,在网络模型特别复杂时比较占用空间,且加载网络速度较慢

方法二:只保存网络的参数,不保存整个网络

torch.save(网络名.state_dict(),'路径/命名.pkl')
torch.load_state_dict(torch.load('路径/文件名.pkl'))

只保存加载网络的参数,速度快,占用空间小

但是需要在加载之前重新定义好网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是基于 PyTorch 构建神经网络模型进行回归的示例代码: ```python import torch import torch.nn as nn from torch.utils.data import DataLoader, Dataset # 定义数据集类 class MyDataset(Dataset): def __init__(self, x_data, y_data): self.x_data = x_data self.y_data = y_data def __getitem__(self, index): x = self.x_data[index] y = self.y_data[index] return x, y def __len__(self): return len(self.x_data) # 定义神经网络模型 class MyNet(nn.Module): def __init__(self): super(MyNet, self).__init__() self.linear1 = nn.Linear(1, 10) self.relu = nn.ReLU() self.linear2 = nn.Linear(10, 1) def forward(self, x): x = self.linear1(x) x = self.relu(x) x = self.linear2(x) return x # 定义训练函数 def train(model, dataloader, criterion, optimizer, epochs): for epoch in range(epochs): for x, y in dataloader: optimizer.zero_grad() # 梯度清零 y_pred = model(x) # 前向传播 loss = criterion(y_pred, y) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新参数 print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, epochs, loss.item())) # 构造数据 x_data = torch.randn(100, 1) y_data = 3 * x_data + 2 dataset = MyDataset(x_data, y_data) dataloader = DataLoader(dataset, batch_size=10, shuffle=True) # 定义模型、损失函数和优化器 model = MyNet() criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # 训练模型 train(model, dataloader, criterion, optimizer, epochs=50) # 预测结果 x_test = torch.Tensor([[1.0], [2.0], [3.0]]) y_test = model(x_test) print(y_test) ``` 在这个示例中,我们定义了一个简单的神经网络模型 `MyNet`,它包含一个输入层、一个隐藏层和一个输出层。我们使用均方误差作为损失函数,Adam 优化器来更新参数。然后我们构造了一个数据集 `MyDataset`,用 DataLoader 进行数据加载,并在数据集上训练模型。最后,我们使用训练好的模型对一些测试数据进行预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别管我啦就是说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值