pytorch训练时accuracy收敛缓慢的可能原因

本文分享了作者在使用PyTorch搭建LSTM网络处理THUC新闻数据集时遇到的问题及解决方法。最初模型训练过程中准确率增长缓慢,通过调整学习率,显著提升了模型收敛速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在使用pytorch搭建LSTM网络跑THUC数据集时,发现每遍历一遍50000条数据,准确率只增长了0.001-0.01。后来发现是学习率设置小了

提高学习率后,模型在前几个epoch就快速收敛了。
这种小错误以后要避免呀!=_=

### PyTorch 训练模型全流程 #### 准备工作环境 确保安装了必要的库,如PyTorch和其他可能需要的工具包。对于可视化损失函数的变化情况,可以采用Visdom或其他类似的工具来实现实监控[^4]。 #### 数据加载与预处理 构建数据集类并定义转换操作(transform),用于增强图像或调整张量形状等目的。接着创建DataLoader实例以便于批量读取数据样本,这有助于提高训练效率以及更好地模拟实际应用场景中的流式数据输入方式[^2]。 ```python from torch.utils.data import DataLoader, Dataset import torchvision.transforms as transforms class CustomDataset(Dataset): def __init__(self, transform=None): self.transform = transform def __len__(self): pass # 返回数据集中样本总数 def __getitem__(self, idx): sample = ... # 获取第idx个样本的数据和标签 if self.transform: sample['image'] = self.transform(sample['image']) return sample train_dataset = CustomDataset(transform=transforms.ToTensor()) train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True) ``` #### 定义网络结构 设计适合解决特定问题类型的神经网络架构,比如卷积神经网络(CNNs)适用于计算机视觉领域;循环神经网络(RNNs),长短记忆单元(LSTMs)则更擅长处理序列预测等问题。这里以简单的全连接层为例展示基本框架: ```python import torch.nn as nn class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(input_features, hidden_units) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_units, output_classes) def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out ``` #### 设置优化器与损失函数 选择合适的算法来进行参数更新过程中的最优化求解,并指定衡量误差大小的标准作为反馈信号指导学习方向。常用的组合有Adam/Stochastic Gradient Descent (SGD)+CrossEntropyLoss/Binary Cross Entropy Loss等等。 ```python criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate) ``` #### 开始训练阶段 进入核心部分——迭代整个数据集合多次直至收敛为止。每一次完整的遍历称为一个epoch,在此期间还需注意切换`model.train()`模式开启dropout等功能辅助泛化能力提升[^3]。 ```python for epoch in range(num_epochs): net.train() running_loss = 0.0 for i, data in enumerate(train_loader, start=0): inputs, labels = data['image'], data['label'] optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/(i+1):.4f}') ``` #### 测试评估性能 完成一轮或多轮次的学习之后,应当检验所得到的结果质量如何。为此需将模型置于evaluation状态下(`model.eval()`),禁用掉那些仅限于训练期使用的组件特性,从而获得更加真实的预测表现指标。 ```python correct = 0 total = 0 net.eval() with torch.no_grad(): for data in test_loader: images, labels = data['image'], data['label'] outputs = net(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print('Accuracy of the network on the %d test images: %.2f %%' % (total, 100 * correct / total)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值