《动手学习深度学习》笔记之模型复杂度与训练集大小

本文探讨了深度学习中模型复杂度和训练集大小对过拟合和欠拟合的影响。过小的训练集可能导致过拟合,而模型参数过多则增加过拟合风险。通过多项式函数拟合实验展示了不同复杂度模型的表现。解决过拟合的方法包括L2范数惩罚项和丢弃法(dropout),两者都能有效正则化模型,减少过拟合现象。
摘要由CSDN通过智能技术生成

二、模型复杂度与训练集大小

模型训练经常出现两类现象:过拟合(训练误差远小于泛化误差)和欠拟合(训练误差较高),导致这两类现象的两个重要因素是:模型复杂度和训练集大小机器学习模型应关注降低泛化误差

1. 训练集大小

如果训练集过小,特别是比模型参数数量(按元素计)更小时,过拟合更容易发生。另外,泛化误差不会随训练集的增大而增大,所以我们通常希望训练集大一些。

2. 模型复杂度

如果模型参数过多(少),则模型的复杂度会较高(低),从而导致过拟合(欠拟合)。模型复杂度对过拟合和欠拟合的影响,如下图所示:
在这里插入图片描述

3.编程实验(多项式函数拟合实验)

3.1 模型复杂度

设数据集中输入特征向量为X,输出目标值为y,且Xy满足下面数学函数关系:
y = 2 X 3 + 3 X 2 − 12 X + 1 + ϵ , 其 中 噪 音 ϵ ∼ N ( 0 , 1 ) y = 2X^3+3X^2-12X+1+\epsilon,其中噪音 \epsilon \sim N(0,1) y=2X3+3X212X+1+ϵ,ϵN(0,1)
过拟合模型:
y = w 0 ∗ X 5 + w 1 ∗ X 4 + w 2 ∗ x 3 + w 3 ∗ x 2 + w 4 ∗ x + b y = w0 * X^5 + w1 * X^4 + w2 * x^3 + w3 * x^2 + w4 * x + b y=w0X5+w1X4+w2x3+w3x2+w4x+b
正常模型:
y = w 0 ∗ X 3 + w 1 ∗ X 2 + w 2 ∗ x + b y = w0 * X^3 + w1 * X^2 + w2 * x + b y=w0X3+w1X2+w2x+b
欠拟合模型:
y = w 0 ∗ x + b y = w0 * x + b y=w0x+b
代码实现:

# -*- coding: utf-8 -*-
"""
Created on Wed Feb 12 10:51:57 2020
@author: chengang
"""
import numpy as np
import matplotlib.pyplot as plt
import torch

np.random.seed(53)
batch_size = 10
lr = 0.01
num_epochs = 300
sample_num = 1000
train_num = 700

def GenerateDataset(X, y):
    train_dataset = torch.utils.data.TensorDataset(X[:train_num], y[:train_num])
    train_dataset = torch.utils.data.DataLoader(train_dataset, batch_size = batch_size, shuffle = True)
    X_test, y_test = X[train_num:], y[train_num:]
    return train_dataset, X_test, y_test

# overfitting model
def net1(x, w, b):
    return w[0] * x**5 + w[1] * x**4 + w[2] * x**3 + w[3] * x**2 + w[4] * x + b

# normal model 
def net2(x, w, b):
    return w[0] * x**3 + w[1] * x**2 + w[2] * x + b

# underfitting model
def net3(x, w, b):
    return w[0] * x + w[1] + b

if __name__ == '__main__':
    X_data = torch.from_numpy(np.random.randn(sample_num, 1).astype(np.float32))
    y_data = 2 * torch.pow(X_data, 3) + 3 * torch.pow(X_data, 2) - 12 * X_data + 1 + torch.randn(X_data.shape)
    train_dataset, X_test, y_test = GenerateDataset(X_data, y_data)
    
    # parameters for overfitting model, normal model, underfitting model
    w1 = torch.randn(5, requires_grad 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值