Pytorch学习笔记学习笔记——过拟合、欠拟合及其解决方案过拟合、欠拟合及其解决方案
过拟合、欠拟合及其解决方案过拟合、欠拟合及其解决方案
1、预备知识、预备知识
1.1 模型选择模型选择
验证数据集:测试集不可用于模型参数的调试,所以需要从训练数据集中分离出一部分数据作为验证数据集用来调参
1.2 K折交叉验证折交叉验证
目前来说深度学习研究的普遍情况是数据量不够庞大,而我们要把模型数据分成训练集、验证集,这样就会导致训练数据更加
少,K折交叉验证可以解决这个问题。算法思想大概是,将训练数据集均分成K个不同子集,第 i 次选取 K[ i ] 作为验证集,其
余的 K-1 个数据作为训练集,这样我们就有了K组数据,最后将K次训练误差和验证误差取平均得到模型的训练误差和验证误
差
2、过拟合和欠拟合、过拟合和欠拟合
2.1 概念概念
过拟合:训练集上的误差小于测试集上的误差
欠拟合:模型无法得到较低的训练误差
影响过拟合和欠拟合的两个因素:模型复杂度和训练数据集大小
2.2 影响因素影响因素
A、模型复杂度、模型复杂度
我们在深度学习模型中是需要寻找一个函数来拟合y,如下所示
Wk是模型的权重,b是偏差,这里意味着K越大,函数模型越复杂,而在训练集固定的情况下,模型复杂度和误差之间有如下
关系
也就是说,模型过于简单容易导致欠拟合(不能很好地表达训练数据),模型过于复杂容易导致过拟合(对训练数据表达得过
好)
B、训练数据集大小、训练数据集大小
训练数据集中样本数过少容易导致过拟合,所以我们要根据训练集的大小合理地构建我们的深度学习模型网络
2.3 多项式函数拟合实验多项式函数拟合实验
%matplotlib inline
import torch
import numpy as np
import sys
sys.path.append("/home/kesci/input")
import d2lzh1981 as d2l
初始化模型参数
# 预设三元函数参数
n_train, n_test, true_w, true_b = 100, 100, [1.2, -3.4, 5.6], 5
# 随机生成特征值
features = torch.randn((n_train + n_test, 1))
# torch.cat 拼接函数
# torch.pow幂指数函数