跟李沐学AI——动手学深度学习 PyTorch版——学习笔记pycharm版本(第四天——10、11、12、13、14)2023.3.1

2023-11-19

前言

这是沐神的第十节课。是讲多层感知机的,需要掌握牢固。以后会经常写的

代码讲解

跳过从零开始实现,直接进入简单代码的讲解

# 导入包
import torch
from torch import nn
from d2l import torch as d2l  # 这个包是沐神自己写的,里面的方法前面都有讲过

net = nn.Sequential(nn.Flatten(),  # 把图片展平,将输入数据展平,这里只保留第0维度
                    nn.Linear(784, 256),  # 第一层
                    nn.ReLU(),  # 激活
                    nn.Linear(256, 10))  # 第二层

def init_weights(m):  # 初始化参数
    if type(m) == nn.Linear:  # 如果是Liner则。。。。。(因为后面有的不是Liner)
        nn.init.normal_(m.weight, std=0.01)  # m.weight未初始化之前是0

net.apply(init_weights)   # 网络的每一层的权值都进行初始化

batch_size, lr, num_epochs = 256, 0.1, 10  # 一些超参数
loss = nn.CrossEntropyLoss(reduction='none') # 交叉熵损失函数
trainer = torch.optim.SGD(net.parameters(), lr=lr)  # 训练器,也就是优化器,选择随机梯度下降

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)  # 前面有讲过,是yeild小批量

d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)  # 开始训练
d2l.plt.show()  # 显示训练进程

在这里插入图片描述

第11课的内容

训练误差:模型在训练数据上的误差
泛化误差:模型在新数据上的误差

训练数据集:训练模型(比如平时做的习题)
验证数据集:验证模型好坏(比如平时的考试)
测试数据集:只用一次的数据集(比如高考)
K-则交叉验证:当数据集不大的时候使用
过拟合、欠拟合
在这里插入图片描述
数据复杂度:样本个数、每个样本的元素个数、时空结构、多样性

第12课的内容

正则化:限制w的权重,防止过拟拟合

第13课的内容

丢弃法:dropout

import torch
from torch import nn
from d2l import torch as d2l

def dropout_layer(X, dropout):
    assert 0 <= dropout <= 1  # assert:在不满足条件下,可以直接报错
    # 在本情况中,所有元素都被丢弃
    if dropout == 1:
        return torch.zeros_like(X)  # 像x的shape一样的都是0的元素
    # 在本情况中,所有元素都被保留
    if dropout == 0:
        return X
    mask = (torch.rand(X.shape) > dropout).float()
    return mask * X / (1.0 - dropout)  # 没有dropout的数据变大

num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784, 10, 256, 256

dropout1, dropout2 = 0.2, 0.5

class Net(nn.Module):
    def __init__(self, num_inputs, num_outputs, num_hiddens1, num_hiddens2,
                 is_training = True):
        super(Net, self).__init__()
        self.num_inputs = num_inputs
        self.training = is_training
        self.lin1 = nn.Linear(num_inputs, num_hiddens1)
        self.lin2 = nn.Linear(num_hiddens1, num_hiddens2)
        self.lin3 = nn.Linear(num_hiddens2, num_outputs)
        self.relu = nn.ReLU()

    def forward(self, X):
        H1 = self.relu(self.lin1(X.reshape((-1, self.num_inputs))))
        # 只有在训练模型时才使用dropout
        if self.training == True:
            # 在第一个全连接层之后添加一个dropout层
            H1 = dropout_layer(H1, dropout1)
        H2 = self.relu(self.lin2(H1))
        if self.training == True:
            # 在第二个全连接层之后添加一个dropout层
            H2 = dropout_layer(H2, dropout2)
        out = self.lin3(H2)
        return out


net = Net(num_inputs, num_outputs, num_hiddens1, num_hiddens2)

num_epochs, lr, batch_size = 10, 0.5, 256
loss = nn.CrossEntropyLoss(reduction='none')
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
trainer = torch.optim.SGD(net.parameters(), lr=lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
d2l.plt.show()

第14课的内容

数值稳定性
将每层的输出和梯度都看做随机变量,让他们的均值和方差保持一致

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跟李沐学AI——动手学深度学习 PyTorch版——学习笔记pycharm版本(第四天——10、11、12、13、14)2023.3.1 的相关文章

随机推荐

  • 小白学协程笔记2-c语言实现协程-2021-2-10

    文章目录 前言 一 c语言中协程切换方式 二 使用setjmp 和 longjmp实现协程切换 1 setjmp和longjmp函数简介 2 协程实现 三 使用switch case实现协程切换 1 switch case小技巧 2 协程实
  • SQL题目练习---三表联查

    一 数据库中有三张如下所示的表 学生表 教师表 成绩表 查出橘右京老师的学生所有分数 按照成绩倒序排列 分析 1 本质是一个三表联查问题 SQL语句为 select from A inner join 表B on 表A 列1 表B 列2 i
  • 【小程序】封装弹出框+选择器组件:选择器选择

    效果 用的库 usingComponents van popup vant weapp popup index van cell vant weapp cell index van cell group vant weapp cell gr
  • 算法训练营第六天(7.17)

    目录 unordered map LeeCode242 Valid Anagram 梦的开始 LeeCode1 Two Sum unordered set LeeCode349 Intersection of Two Arrays LeeC
  • $state, $stateParams 传递参数?

    附图 state方法 go reload get state属性 current params state事件 stateChangeError stateChangeStart stateChangeSuccess stateNotFou
  • App\led\led.h(6): warning: #1295-D: Deprecated declaration LED_Init - give arg types

    如图所示操作即可 如图所示操作即可 如图所示操作即可
  • 【机器学习】十大算法之一 “朴素贝叶斯”

    作者主页 爱笑的男孩 的博客 CSDN博客 深度学习 活动 python领域博主爱笑的男孩 擅长深度学习 活动 python 等方面的知识 爱笑的男孩 关注算法 python 计算机视觉 图像处理 深度学习 pytorch 神经网络 ope
  • Ubuntu openKylin 安装open VMware tool 工具

    修改source添加 cat etc apt sources list deb http archive build openkylin top openkylin yangtze main cross pty deb http archi
  • Oracle19c配置OGG进行单用户数据同步测试

    目录 19c单实例配置GoldenGate 并进行用户数据同步测试 一 数据库操作 1 开启数据库附加日志 2 开启数据库归档模式 3 开启goldengate同步 4 创建goldengate管理用户 5 集成捕获所需权限授权 6 创建测
  • java判断指定路径文件夹是否存在,若不存在则创建新的文件夹,存在则删除

    isFile 判断是否 是文件 也许可能是文件或者目录 exists 判断是否存在 可能不存在 两个不一样的概念 isDirectory 是检查一个对象是否是文件夹 返回值是boolean类型的 如果是则返回true 否则返回false 调
  • DGA域名可以是色情网站域名

    恶意域名指传播蠕虫 病毒和特洛伊木马或是进行诈骗 色情内容传播等不法行为的网站域名 恶意域名指传播蠕虫 病毒和特洛伊木马或是进行诈骗 色情内容传播等不法行为的网站域名 本文面临能够的挑战 就是恶意网站经营者所使用的各种技术 近年来 FFSN
  • git lfs原理和使用

    如果我们用git管理的项目中出现了一些大文件 同时若其数量比较多 而且更新又比较频繁 那么当首次clone该项目时 就会不可避免地将这些大文件的当前版本和历史所有版本的文件都下载下来 虽然你很可能用不到这些历史文件 但是却不得不为它们所占用
  • 一般数据库服务器物理机配置,ironic部署物理机

    原标题 ironic部署物理机 ironic是openstack的帐篷项目之一 主要用来部署和管理裸机 提供统一接口 方便nova同时管理裸机和虚机 ironic的概念架构图如图1所示 本文以tecs3 0为例 介绍ironic部署裸机的流
  • border之border-style用法

    border style border style 属性用于设置元素所有边框的样式 或者单独地为各边设置边框样式 border style兼容性很好 基本所有浏览器都兼容 border style拥有一下属性值 值 描述 none 定义无边
  • 【RuoYi-Vue-Plus】问题笔记 02 - Knife4j

    文章目录 前言 问题一 文档页面空白 问题二 文档参数无法显示 问题原因 解决方案 前言 今天遇到一个很 sao 不 得 常 一 见 匹 的问题 所以必须要把这部血泪史记录一下 注 因为是开发中的项目 所以适当打码 不影响问题描述 首先描述
  • STM32入门——uKeil5 MDK 的使用(基于固件库)

    文章目录 1 Keil uVision5 MDK 是什么 2 建立一个标准库函数工程 2 1 前期准备 2 2 建立工程 2 3 建立组文件夹 2 4 添加文件 2 4 配置 魔术棒 选项卡 2 5 建立 main 函数 1 Keil uV
  • scala 学习笔记

    Scala Scala 和 java 关系 语言特点 Scala是一门以Java虚拟机 JVM 为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言 静态语言需要提前编译的如 Java c c 等 动态语言如 js Sc
  • 吴昊品游戏核心算法 Round 10 —— 吴昊教你下围棋(利用递归来解决吃子的问题)...

    如图所示 此即为日本动漫棋魂中的千年佐为 也就是SAI 众所周知 围棋的规则相比于中国象棋 国际象棋等等都简单许多 真是因为更简单的规则 才诞生 了更复杂的逻辑 目前的围棋AI还很不行 最NB的应该是日本人做出的后又经过众多中国的围棋爱好者
  • STM32使用HAL库,整体结构和函数原理介绍

    按照杨桃电子的说法 学习编程程序就是学习使用外设 然后需要在icode文件夹中创建对应的 c和 h文件 分三步来操作 1 学会编写板级驱动程序 2 学会在板级驱动程序中调用HAL库中的功能函数 3 学会在main 主函数中调用板级驱动程序
  • 跟李沐学AI——动手学深度学习 PyTorch版——学习笔记pycharm版本(第四天——10、11、12、13、14)2023.3.1

    前言 这是沐神的第十节课 是讲多层感知机的 需要掌握牢固 以后会经常写的 代码讲解 跳过从零开始实现 直接进入简单代码的讲解 导入包 import torch from torch import nn from d2l import tor