从 training loss 和 validation / testing loss 判断网络学习状态

点赞和关注是我创作的最大动力~~

1 train loss 不断下降,test loss 不断下降,说明网络正在学习
2 train loss 不断下降,test loss 趋于不变,说明网络过拟合 (如何解决网络过拟合)
3 train loss 趋于不变,test loss 趋于不变,说明学习遇到瓶颈,需要减小学习率或者批处理大小
4 train loss 趋于不变,test loss 不断下降,说明数据集100%有问题
5 train loss 不断上升,test loss 不断上升(最终变为NaN),可能是网络结构设计不当,训练超参数设置不当,程序bug等某个问题引起

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Sure, here's the code snippet that satisfies your requirements: ``` import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from tqdm import tqdm import matplotlib.pyplot as plt from IPython.display import display, clear_output # Define your OneFCNet model class OneFCNet(nn.Module): def __init__(self): super().__init__() self.fc = nn.Linear(100, 10) def forward(self, x): x = self.fc(x) return x # Define your Gradient Descent optimizer class GD(): def __init__(self, params, lr): self.params = list(params) self.lr = lr def step(self): with torch.no_grad(): for p in self.params: p -= self.lr * p.grad p.grad.zero_() # Define your training function def train(net, loader, optimizer, loss_fn): net.train() losses = [] states = [] for epoch in range(epochs): running_loss = 0.0 for i, data in tqdm(enumerate(loader)): inputs, labels = data optimizer.zero_grad() outputs = net(inputs) loss = loss_fn(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() epoch_loss = running_loss / len(loader) losses.append(epoch_loss) states.append([p.detach().clone() for p in net.parameters()]) clear_output(wait=True) fig = plot_losses(losses) display(fig) return losses, states # Define your data loader class MyDataset(torch.utils.data.Dataset): def __init__(self, data, labels): self.data = data self.labels = labels def __getitem__(self, index): x = self.data[index] y = self.labels[index] return x, y def __len__(self): return len(self.data) # Create your OneFCNet object net = OneFCNet() # Define number of epochs, learning rate, Gradient Descent optimizer, and Cross Entropy loss epochs = 10 lr = 0.002 optimizer = GD(net.parameters(), lr) loss_fn = nn.CrossEntropyLoss() # Create your data and labels tensors data = torch.randn(1000, 100) labels = torch.randint(0, 10, (1000,)) # Create your data loader dataset = MyDataset(data, labels) loader = DataLoader(dataset, batch_size=32, shuffle=True) # Call your train function to train the model losses, states = train(net, loader, optimizer, loss_fn) ``` Note that I assumed that you already have a `plot_losses` function that plots the training loss over time. If you don't have one already, you can define it as follows: ``` def plot_losses(losses): fig, ax = plt.subplots(figsize=(8, 6)) ax.plot(losses) ax.set_xlabel('Epochs') ax.set_ylabel('Loss') ax.set_title('Training Loss') plt.show() return fig ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值