PyTorch 读书笔记(4)PyTorch深度神经网络及训练二

PyTorch 读书笔记(4)PyTorch深度神经网络及训练二

本次的读书笔记我们将介绍防止过拟合和网络参数初始化

首先是过拟合

一、过拟合

过拟合指的是一种由于太过精确地为模型匹配了特定的数据集,致使模型不能够很好地拟合其他数据或预测未来的观察结果的现象,在这种情况下模型可能没有学会数据集的数据特征。过拟合也将带来方差过大的问题。
在这里插入图片描述
过拟合有以下几种应对措施:
1.增加数据量
2.合理的数据切分
3.正则化方法
4.Dropout
5,提前结束训练

数据量这个很好理解,那么数据切分指的是将数据集进行切分为训练集、
验证集和测试集。传统的切分比例是:60:20:20,但在我们这个大数据时代,面对成百万上千万的数据,这么做显然是不合适的。
书中提出的解决方法是使用98%:1%:1%的比例来进行数据切分。98%以满足数据量样本足够大

正则化方法则是在损失函数上添加对训练参数的惩罚范数,一般使用L2范数进行约束,叫Ridge回归。
在这里插入图片描述
随后是引进Dropout层,随机丢弃一些神经元,减轻网络的过拟合现象。
请添加图片描述

二、网络参数初始化

针对某一层的权重进行初始化,这里选用torch.nn.Conv2d()函数来举例:
在这里插入图片描述

import torch
import torch.nn as nn
import matplotlib.pyplot as plt

conv1 = torch.nn.Conv2d(3,16,3)
torch.manual_seed(12)
torch.nn.init.normal(conv1.weight,mean=0,std=1)

plt.figure(figsize = (8,6))
plt.hist(conv1.weight.data.numpy().reshape((-1,1)),bins = 30)
plt.show()

得到的理想结果是:
请添加图片描述!](https://img-blog.csdnimg.cn/direct/b566494175994553be2897b24a212d41.jpeg)

但是我跑出来得到的是:

UserWarning: nn.init.normal is now deprecated in favor of nn.init.normal_.
  torch.nn.init.normal(conv1.weight,mean=0,std=1)

(汗)

然后接下来我们整一下权重的初始化方法
我们先对每个层的参数进行初始化,定义一个测试网络TestNet()网络类
在这里插入图片描述

import torch
import torch.nn as nn
class TestNet(nn.Module):
    def __init__(self):
        super(TestNet,self).__init__()
        self.conv1 = nn.Conv2d(3,16,3)
        self.hidden = nn.Sequential(
            nn.Linear(100,100),
            nn.ReLU(),
            nn.Linear(100,50),
            nn.ReLU(),
        )
        self.cla = nn.Linear(50,10)
def forward(self,x):
    x = self.conv1(x)
    x = x.view(x.shape[0],-1)
    x = self.hidden(x)
    output = self.cla(x)
    return output
testnet = TestNet()
print(testnet)

结果是:
TestNet(
(conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1))
(hidden): Sequential(
(0): Linear(in_features=100, out_features=100, bias=True)
(1): ReLU()
(2): Linear(in_features=100, out_features=50, bias=True)
(3): ReLU()
)
(cla): Linear(in_features=50, out_features=10, bias=True)
)

说明:
forward是前向传播路径
我们在上述的网络结构中一共有4个包含参数的层,分别是一个卷积层和一个全连接层

参考资料:
【1】《Pytorch深度学习入门与实战》
【2】AiCharm 深度学习相关概念:过拟合与欠拟合
https://blog.csdn.net/muye_IT/article/details/123627223?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171722991116800227473327%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=171722991116800227473327&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-123627223-null-null.142v100pc_search_result_base9&utm_term=%E8%BF%87%E6%8B%9F%E5%90%88&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值