【pytorch】【神经网络训练】loss从第二个epoch开始震荡不下降

自己从头实现了一个神经网络 但是在运行的时候发现问题:训练loss从第二个epoch开始震荡(震荡幅度还挺大的)不下降
训练和验证集损失如下图所示
在这里插入图片描述
很长时间觉得是自己的模型拟合能力不足 找了非常多的原因和解决办法
最后发现是一个很小的点自己写错了(很不容易找到的bug):

我在模型训练的时候使用了学习率下降策略,但没有正确使用它
以下是我的错误代码

# 定义优化器和学习率下降策略
optim = torch.optim.Adam(params, lr=learning_rate, betas=(0.5, 0.999))
scheduler = torch.optim.lr_scheduler.StepLR(optim, step_size=30, gamma=0.1)

# train
for epoch in range(epoches):
	model.train()
	
	for step, sample in enumerate(train_loader):
		output = model(input)

		optim.zero_grad()
		loss = loss_function(output, label)

		loss.backward()
		optim.step()
		scheduler.step()
		
		...

注意这里将scheduler.step()放在了每个epoch的内循环里面!!!!!!
这样会导致每次取出sample计算loss之后都执行一次学习率下降 导致一个epoch之后学习率就已经下降到非常低了!!模型从第二个epoch开始就不会学到任何东西了!!!

正确的操作应该是:

# train
for epoch in range(epoches):
	model.train()
	
	for step, sample in enumerate(train_loader):
		output = model(input)

		optim.zero_grad()
		loss = loss_function(output, label)

		loss.backward()
		optim.step()
	
	scheduler.step()

scheduler.step()应该在每个 epoch 全部算完之后做
改过这里之后loss正常下降了

这件事情提醒自己:一旦对lr或者其他的东西做了改动 一定要print出来 代码一定要规范 就像下面一样
模型学习过程中变动的值一定要打印出来检查一下

在这里插入图片描述

感谢:
神经网络第2次迭代loss不变的问题

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将多个.mat文件从文件夹中导入到PyTorch中并用于神经网络训练,可以使用`os`库中的`listdir()`函数来获取文件夹中所有文件的名称,然后使用`scipy`库中的`loadmat()`函数循环读取每个文件,并将其转换为PyTorch张量,最后将所有张量拼接起来得到一个大张量。具体步骤如下: 1. 导入必要的库: ```python import os import scipy.io import torch ``` 2. 使用`listdir()`函数获取文件夹中所有文件的名称: ```python folder = 'path/to/your/folder' files = os.listdir(folder) ``` 3. 循环读取每个文件,并将其转换为PyTorch张量: ```python tensors = [] for file in files: # load .mat file mat = scipy.io.loadmat(os.path.join(folder, file)) # extract data data = mat['data'] # convert to PyTorch tensor tensor = torch.from_numpy(data) # append to list of tensors tensors.append(tensor) ``` 4. 将所有张量拼接起来得到一个大张量: ```python big_tensor = torch.cat(tensors, dim=0) ``` 5. 使用大张量进行神经网络训练。 完整代码示例: ```python import os import scipy.io import torch # get file names in folder folder = 'path/to/your/folder' files = os.listdir(folder) # load and concatenate .mat files tensors = [] for file in files: # load .mat file mat = scipy.io.loadmat(os.path.join(folder, file)) # extract data data = mat['data'] # convert to PyTorch tensor tensor = torch.from_numpy(data) # append to list of tensors tensors.append(tensor) # concatenate tensors big_tensor = torch.cat(tensors, dim=0) # use big tensor for neural network training ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值