初学者对训练神经网络的疑问

作为初学者,在开始跑论文当中的代码,会产生一些疑问,我希望用这篇总结一下。如果有没涉及到的,或者错误之处,希望大家可以指出来,后面我也会在学习中不断完善这部分内容。

超参数

1.batchsize(批量大小)

每次训练输入给模型多少张图像。

例如batch size = 8,那模型每次只处理 8 张,叫做“一个 batch”

如果共有10,000 张训练图,那么一个 epoch 会包含 10,000 ÷ 8 = 1250 个 batch

2.epoch(训练轮数)

整个训练集被“完整训练一遍”的次数。

epoch = 100 表示你让模型“看完整个训练集”100次,每一轮都会更新参数,模型逐渐收敛

3.learning_rate(学习率)

每次参数更新走多大步

设置太小,学习太慢也就是收敛慢

设置太大,可能会震荡,学不到最优点

4.decay(学习率衰减)

随着训练时间推移,让学习率变小

训练一个网络的基本流程

  1. 加载训练数据集

  2. 网络从随机权重开始,通过反向传播不断优化

  3. 得到性能最好的模型(在验证集或测试集上指标最高)

  4. 把它保存成 .pth 文件(PyTorch模型)

  5. 后续推理或部署时,就加载这个训练好的权重,不用重新训练

如何判断训练出了“最好”的模型?标准是什么

看评估指标,例如准确率、均方误差(MSE)和平均绝对误差(MAE)等,每个领域都有自己的评估指标。

怎么训练出最好的模型?超参数怎么设?需不需要人为去试?

  • 为设置超参数,例如batch_size、learning_rate、epoch等,还有损失函数。

        关于如何寻找最好的超参数,可以采用Grid Search(把所有参数值带进去试)之类的方法得到最后的超参数。

  • 机器来“自动优化”网络参数,这是靠优化器(Optimizer)的,根据损失函数的梯度,一步一步更新模型的参数,使得损失最小。

        如果 loss 不收敛,调小 learning rate/增加 epoch/检查是否用了正确的 loss 和数据归一化

        如果 loss 收敛但验证效果差,换 loss 权重组合/使用数据增强/加入正则项(如 dropout)

model.pth 文件到底是什么?为什么这么大?它里面包含什么

它是 PyTorch 保存的“模型权重”,里面一般包含:

内容 说明
网络的所有参数(weights) 每一层的权重张量,例如 Conv 的滤波器、BN 的系数等
有时候还有 optimizer 的状态 如动量、梯度缓存(用于继续训练)
通常以字典形式保存 torch.save({...}, 'model.pth')
  •  为什么 .pth 文件很大?

因为模型可能有 上百万个参数,每个都是 float32(4字节),例如 1000万参数 × 4B = 40MB,加上 BN、优化器、多个 checkpoint,就很大了(100MB~几百MB常见)。你可以用下面命令查看 .pth 包含的字段:

state_dict = torch.load('your_model.pth')
print(state_dict.keys())  # 查看有哪些字段

代码里面常看到的随机种子(seed)到底是干什么的?

机器学习里很多操作都有“随机性”,比如:随机初始化模型权重、数据增强(比如裁剪、翻转)Dataloader 里的 shuffle、dropout 也是随机关闭神经元等。

如果你不设种子,每次训练都不一样,调参就没法对比。

如果需要数据增强每次都不一样(比如生成新样本),就不用设置seed了。

你可能感兴趣的:(神经网络,人工智能,深度学习)