Dropout抑制过拟合

import numpy as np
import torch
from torch import nn,optim
from torch.autograd import Variable
from torchvision import datasets,transforms
from torch.utils.data import DataLoader
# 训练集
train_data = datasets.MNIST(root="./", # 存放位置train = True, # 载入训练集transform=transforms.ToTensor(), # 把数据变成tensor类型download = True # 下载)
# 测试集
test_data = datasets.MNIST(root="./",train = False,transform=transforms.ToTensor(),download = True)
# 批次大小
batch_size = 64
# 装载训练集
train_loader = DataLoader(dataset=train_data,batch_size=batch_size,shuffle=True)
# 装载测试集
test_loader = DataLoader(dataset=test_data,batch_size=batch_size,shuffle=True)
for i,data in enumerate(train_loader):inputs,labels = dataprint(inputs.shape)print(labels.shape)break

# 定义网络结构
class Net(nn.Module):def __init__(self):super(Net,self).__init__()# 初始化self.layer1 = nn.Sequential(nn.Linear(784,500),nn.Dropout(p=0.5),nn.Tanh()) # 一个有序的容器,神经网络模块将按照在传入构造器的顺序依次被添加到计算图中执行,Dropout 抑制过拟合0.5丢去百分之50数据,激活函数Tanhself.layer2 = nn.Sequential(nn.Linear(500,300),nn.Dropout(p=0.5),nn.Tanh())self.layer3 = nn.Sequential(nn.Linear(300,10),nn.Softmax(dim=1))def forward(self,x):# torch.Size([64, 1, 28, 28]) -> (64,784)x = x.view(x.size()[0],-1) # 4维变2维 (在全连接层做计算只能2维)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)return x
# 定义模型
model = Net()
# 定义代价函数
mse_loss = nn.CrossEntropyLoss()# 交叉熵
# 定义优化器
optimizer = optim.SGD(model.parameters(),lr=0.5)# 随机梯度下降
# 定义模型训练和测试的方法
def train():# 模型的训练状态model.train()for i,data in enumerate(train_loader):# 获得一个批次的数据和标签inputs,labels = data# 获得模型预测结果(64,10)out = model(inputs)# 交叉熵代价函数out(batch,C:类别的数量),labels(batch)loss = mse_loss(out,labels)# 梯度清零optimizer.zero_grad()# 计算梯度loss.backward()# 修改权值optimizer.step()def test():# 模型的测试状态model.eval()correct = 0 # 测试集准确率for i,data in enumerate(test_loader):# 获得一个批次的数据和标签inputs,labels = data# 获得模型预测结果(64,10)out = model(inputs)# 获得最大值,以及最大值所在的位置_,predicted = torch.max(out,1)# 预测正确的数量correct += (predicted==labels).sum()print("Test acc:{0}".format(correct.item()/len(test_data)))correct = 0for i,data in enumerate(train_loader): # 训练集准确率# 获得一个批次的数据和标签inputs,labels = data# 获得模型预测结果(64,10)out = model(inputs)# 获得最大值,以及最大值所在的位置_,predicted = torch.max(out,1)# 预测正确的数量correct += (predicted==labels).sum()print("Train acc:{0}".format(correct.item()/len(train_data)))
# 训练
for epoch in range(11):print("epoch:",epoch)train()test()

正则化

import numpy as np
import torch
from torch import nn,optim
from torch.autograd import Variable
from torchvision import datasets,transforms
from torch.utils.data import DataLoader
# 训练集
train_data = datasets.MNIST(root="./", # 存放位置train = True, # 载入训练集transform=transforms.ToTensor(), # 把数据变成tensor类型download = True # 下载)
# 测试集
test_data = datasets.MNIST(root="./",train = False,transform=transforms.ToTensor(),download = True)
# 批次大小
batch_size = 64
# 装载训练集
train_loader = DataLoader(dataset=train_data,batch_size=batch_size,shuffle=True)
# 装载测试集
test_loader = DataLoader(dataset=test_data,batch_size=batch_size,shuffle=True)
for i,data in enumerate(train_loader):inputs,labels = dataprint(inputs.shape)print(labels.shape)break

# 定义网络结构
class Net(nn.Module):def __init__(self):super(Net,self).__init__()# 初始化self.layer1 = nn.Sequential(nn.Linear(784,500),nn.Dropout(p=0),nn.Tanh()) self.layer2 = nn.Sequential(nn.Linear(500,300),nn.Dropout(p=0),nn.Tanh())self.layer3 = nn.Sequential(nn.Linear(300,10),nn.Softmax(dim=1))def forward(self,x):# torch.Size([64, 1, 28, 28]) -> (64,784)x = x.view(x.size()[0],-1) # 4维变2维 (在全连接层做计算只能2维)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)return x
# 定义模型
model = Net()
# 定义代价函数
mse_loss = nn.CrossEntropyLoss()# 交叉熵
# 定义优化器,设置L2正则化
optimizer = optim.SGD(model.parameters(),lr=0.5,weight_decay=0.001)# 随机梯度下降
# 定义模型训练和测试的方法
def train():# 模型的训练状态model.train()for i,data in enumerate(train_loader):# 获得一个批次的数据和标签inputs,labels = data# 获得模型预测结果(64,10)out = model(inputs)# 交叉熵代价函数out(batch,C:类别的数量),labels(batch)loss = mse_loss(out,labels)# 梯度清零optimizer.zero_grad()# 计算梯度loss.backward()# 修改权值optimizer.step()def test():# 模型的测试状态model.eval()correct = 0 # 测试集准确率for i,data in enumerate(test_loader):# 获得一个批次的数据和标签inputs,labels = data# 获得模型预测结果(64,10)out = model(inputs)# 获得最大值,以及最大值所在的位置_,predicted = torch.max(out,1)# 预测正确的数量correct += (predicted==labels).sum()print("Test acc:{0}".format(correct.item()/len(test_data)))correct = 0for i,data in enumerate(train_loader): # 训练集准确率# 获得一个批次的数据和标签inputs,labels = data# 获得模型预测结果(64,10)out = model(inputs)# 获得最大值,以及最大值所在的位置_,predicted = torch.max(out,1)# 预测正确的数量correct += (predicted==labels).sum()print("Train acc:{0}".format(correct.item()/len(train_data)))
# 训练
for epoch in range(11):print("epoch:",epoch)train()test()

PyTorch基础-Dropout和正则化-05相关推荐

  1. pytorch实现Dropout与正则化防止过拟合

    numpy实现dropout与L1,L2正则化请参考我另一篇博客 https://blog.csdn.net/fanzonghao/article/details/81079757 pytorch使用 ...

  2. PyTorch学习笔记(四):PyTorch基础实战

    PyTorch实战:以FashionMNIST时装分类为例: 往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本 ...

  3. 《深度学习之pytorch实战计算机视觉》第6章 PyTorch基础(代码可跑通)

    上一篇文章<深度学习之pytorch实战计算机视觉>第5章 Python基础讲了Python基础.接下来看看第6章 PyTorch基础. 目录 6.1 PyTorch中的Tensor 6. ...

  4. 深入浅出Pytorch:02 PyTorch基础知识

    深入浅出Pytorch 02 PyTorch基础知识 内容属性:深度学习(实践)专题 航路开辟者:李嘉骐.牛志康.刘洋.陈安东 领航员:叶志雄 航海士:李嘉骐.牛志康.刘洋.陈安东 开源内容:http ...

  5. 第02章 PyTorch基础知识

    文章目录 第02章 Pytorch基础知识 2.1 张量 2.2 自动求导 2.3 并行计算简介 2.3.1 为什么要做并行计算 2.3.2 CUDA是个啥 2.3.3 做并行的方法 补充:通过股票数 ...

  6. 深度学习之Pytorch基础教程!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,Datawhale高校群成员,深圳大学 随着深度学习的发展 ...

  7. 【深度学习】深度学习之Pytorch基础教程!

    作者:李祖贤,Datawhale高校群成员,深圳大学 随着深度学习的发展,深度学习框架开始大量的出现.尤其是近两年,Google.Facebook.Microsoft等巨头都围绕深度学习重点投资了一系 ...

  8. 深度学习总结:用pytorch做dropout和Batch Normalization时需要注意的地方,用tensorflow做dropout和BN时需要注意的地方,

    用pytorch做dropout和BN时需要注意的地方 pytorch做dropout: 就是train的时候使用dropout,训练的时候不使用dropout, pytorch里面是通过net.ev ...

  9. PyTorch基础(part5)--交叉熵

    学习笔记,仅供参考,有错必纠 文章目录 原理 代码 初始设置 导包 载入数据 模型 原理 交叉熵(Cross-Entropy) Loss=−(t∗ln⁡y+(1−t)ln⁡(1−y))Loss =-( ...

最新文章

  1. AT串口抽象层的设计思路及代码实现
  2. Golang的导包和引用包的问题
  3. android 功能防抖,一款简单的消息防抖框架
  4. bootstrap文件不能被识别_树莓派安装openCV做图像识别
  5. 定位--position属性
  6. 如何填写微软2007MVP申请表格以及相关建议
  7. 【蓝桥杯真题】地宫取宝(搜索-记忆化搜索详解)
  8. cdr自动排版插件_CDR ymxkDoc插件 支持X72020到以后版本
  9. 远程登录出现 身份验证错误 要求的函数不受支持
  10. IE重置input file
  11. PLC状态机编程第一篇-状态机介绍
  12. 基于Qt的嵌入式监控系统
  13. java实现计算器_java实现计算器功能
  14. python个人简历-个人简历
  15. java 判断日期格式_java判断字符是否是日期格式
  16. 【python绘图】seaborn(sns)的主题风格
  17. Mysql主从切换自动_keepalived实现对mysql主从复制的主备自动切换
  18. Oracle EXPLAIN PLAN用法
  19. Qtum量子链发布QIP-6,通过预编译合约大幅降低开发成本
  20. pandas 之 pivot_table 与 pivot 的区别

热门文章

  1. Linux的unlink
  2. 古月居ros课件_【古月居】ROS2探索总结系列
  3. auto errored after 报错解决_css重点知识和bug解决方法
  4. tp5 上传文件乱码问题
  5. oracle redo删除,意外删除redo的恢复
  6. js压缩代码后怎么生成source map_??markdown生成导航? #x27;[toc]#x27;足矣
  7. c语言贪心算法背包问题_GGTalk 中的算法知识 01背包问题
  8. php设计分布图,MySQL分表实现上百万上千万记录分布存储的批量查询设计模式[图]_MySQL...
  9. 修身论文2000字_软考论文怎么写
  10. 【redis】使用 URI 配置 redis