07 2021 档案
摘要:一、层 1、单一输出神经网络 接受一些输入 生成相应标量输出 具有一组相关参数(这些参数可以更新以优化某些感兴趣的目标函数) 2、多个输出神经网络(利用矢量化算法来描述) 接受一组输入 生成相应的输出 由一组可调整参数描述 3、对于多层感知机而言,整个模型接受原始输入(特征),生成输出(预测),并包
阅读全文
摘要:一、前言 1、在神经网络中,我们通常需要随机初始化模型的参数。我们可以这样理解 2、假设在一个多层感知机中,输出层只有一个元素(简化处理)。如果将每个隐藏单元的参数都初始化为相同的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传递中,每个隐藏单元的参数梯度值相
阅读全文
摘要:转载:https://zhuanlan.zhihu.com/p/25631496 1、梯度爆炸(gradient exploding)问题:参数更新过大,破坏了模型的稳定收敛 2、梯度消失(gradient vanishing)问题:参数更新过小,在每次更新时几乎不会移动,导致模型不能学习 3、梯度
阅读全文
摘要:一、前言 正向传播(forward propagation/forward pass)指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。 二、步骤 1、为了简单起见,我们假设输入样本是 𝐱∈ℝ𝑑x∈Rd,并且我们的隐藏层不包括偏置项。这里的中间变量是: 2、其中𝐖(1)∈ℝℎ×
阅读全文
摘要:一、从零开始实现 1、实现 dropout_layer 函数,该函数以dropout的概率丢弃张量输入X中的元素,重新缩放剩余部分:将剩余部分除以1.0-dropout import torch from torch import nn from d2l import torch as d2l #
阅读全文
摘要:一、前言 在深度学习里面,除了用权重衰退来应对过拟合外,还用丢弃法(dropout)来应对过拟合 二、概念 在现代神经网络中,我们所指的丢弃法,通常是对输入层或者隐含层进行的操作: 1、以丢失概率P随机丢掉该层的部分隐藏单元 2、丢带的隐藏单元会被清零 3、没有丢掉的隐藏单元会除以1-p做拉伸 三、
阅读全文
摘要:def train_concise(wd): net = nn.Sequential(nn.Linear(num_inputs, 1)) for param in net.parameters(): param.data.normal_() loss = nn.MSELoss() num_epoch
阅读全文
摘要:一、生成数据集 #权重衰退是最广泛使用的正则化的技术之一 %matplotlib inline import torch from torch import nn from d2l import torch as d2l #𝜖 where 𝜖∼(0,0.012):表示噪音,是一个均值为0,方差
阅读全文
摘要:一、前言 1、怎么控制一个模型的容量 模型比较小(参数比较少) 每个参数选择的值比较小 2、正则化就是用来限制参数值的取值范围来控制模型容量 二、正则化 1、正则化的目的:防止过拟合 2、正则化其实可以理解为规则化。相当于一个限制,就是说可以给训练的目标函数加上一些规则(限制),让他们不要自我膨胀
阅读全文
摘要:一、前言 将模型在训练数据上拟合得比在潜在分布中更接近的现象称为过拟合(overfitting),用于对抗过拟合的技术称为正则化(regularization)。 二、训练误差与泛化误差 1、训练误差(training error):我们的模型在训练数据集上计算得到的误差。、 2、泛化误差(gene
阅读全文
摘要:2.1经验误差与过拟合 错误率(error rate) 分类错误的样本数目占样本总数的比例 精度(accuracy) 分类正确的样本数目占样本总数的比例;精度=1-错误率 误差(error) 学习器实际预测输出与样本的真实输出之间的差异 训练误差(training error)/经验误差(empir
阅读全文
摘要:1.1引言 机器学习所研究的主要内容 关于在计算机上从数据中产生“模型”(学习器)的算法,即“学习算法” 机器学习是研究关于“学习算法”的学问 1.2基本术语 学得模型前 数据集(data set) 一组记录的集合 示例(instance)/样本(sample) 数据集中每条关于一个事件或对象的描述
阅读全文
摘要:一、前言 1、和softmax实现一样,唯一的区别是我们模型含有两个全连接层 2、直接通过高级API更简洁实现多层感知机 3、对于相同的分类问题,多层感知机的实现和softmax回归的实现完全相同,只是多层感知机的实现增加了带有激活函数的隐藏层 二、模型 1、第一层是隐藏层,包含256个隐藏单元,并
阅读全文
摘要:一、前言 使用Fashion-MNIST图像分类数据集 import torch from torch import nn from d2l import torch as d2l #批量大小等于256 batch_size = 256 train_iter, test_iter = d2l.loa
阅读全文
摘要:一、前言 1、多层感知机在输出层和输入层之间增加了一个或全连接的隐藏层,并通过激活函数转换隐藏层的输出。 2、常用的激活函数包括ReLU函数、sigmoid函数和tanh函数 二、隐藏层(hidden layer) 1、多层感知机在单层神经网络的基础上引入了一到多个隐藏层。隐藏层位于输入层到输出层之
阅读全文
摘要:一、前言 1、通过深度学习框架的高级API能更方便地实现分类模型。 2、使用Fashion-MNIST数据集,并保持批量大小为256。 #通过pytorch中nn的模型来实现softmax回归 import torch from torch import nn from d2l import tor
阅读全文
摘要:一、创建数据集 从Fashion-MNIST数据集中引入创建数据,并设置数据迭代器的批量大小为256 import torch from IPython import display from d2l import torch as d2l #batch_size=256,表明随机读取256张图片
阅读全文
摘要:一、前言 1、前广泛使用的图像分类数据集之一是 MNIST 数据集,虽然它是很不错的基准数据集,但按今天的标准,即使是简单的模型也能达到95%以上的分类准确率,因此不适合区分强模型和弱模型。 2、为了提高难度,我们将在接下来的章节中讨论在2017年发布的性质相似但相对复杂的Fashion-MNIST
阅读全文
摘要:一、前言 1、softmax回归不是回归问题,而是分类问题 2、分类问题:对离散值的预测。 3、分类问题通常有多个输出,输出 i 预测为第 i 类的置信度 二、网络结构 1、为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出 2、在我们的例子中,由于我们有4个特征和3
阅读全文
摘要:前言: 简洁实现:使用深度学习开源框架达到目的 一、生成数据集 #线性回归的简洁实现就是使用pytorch内置的一些模块来实现 import numpy as np import torch from torch.utils import data #从torch.utils中导入关于data处理的
阅读全文
摘要:一、前言 我们将从零开始实现整个方法,包括数据流水线、模型、损失函数和小批量随机梯度下降优化器。虽然现代的深度学习框架几乎可以自动化地进行所有这些工作,但从零开始实现可以确保你真正知道自己在做什么。 例子中我们先用自己设置好的w和b去生成数据集,再用建立的模型去跑数据生成w和b。比较,熟悉流程。 二
阅读全文
摘要:一、回归 回归:是指一类为一个或多个自变量与因变量之间关系建模的方法,通常用来表示输入与输出的关系(连续值) 二、线性回归 自变量x与因变量 y 之间的关系是线性的,即y可以表示为 x 中元素的加权和,这里通常允许包含观测值的一些噪声 三、线性模型 式子中:w 称为权重;b为偏置 1、权重决定了每个
阅读全文
摘要:一、基本概率论——模拟骰子 1、导入必要包 # matplotlib inline jupyter常用于生成画布 %matplotlib inline import torch from torch.distributions import multinomial from d2l import t
阅读全文
摘要:一、点积 概念:相同位置的按元素乘积的和,可以通过dot()函数调用 y = torch.ones(4, dtype=torch.float32) print(y) print(x) # 点积:相同位置的按元素乘积的和 print(torch.dot(x, y)) # 可以通过执行元素乘法,然后进行
阅读全文
摘要:给定任何相同形状的任意两个张量,任何按元素二元运算的结果都将是相同形状的张量 A = torch.arange(20, dtype=torch.float32).reshape(5, 4) B = A.clone() # 通过分配新内存,将A的一个副本分配给B A, A + B #输出结果 (ten
阅读全文
摘要:一、标量:由一个元素的张量表示 1、标量变量由普通小写字母表示(例如:x y 和 z) 2、 R 表示所有(连续)实数 标量的空间 3、表达式 x∈R 是表示x是一个实值标量的正式形式 4、x,y∈{0,1} 来表明 x 和 y 是值只能为 0 或 1的数字 import torch x = tor
阅读全文
摘要:一、读取数据集 1、将数据集按行写入到csv文件中 import os # os.path.join():路径拼接函数,本例中会生成如下路径 ../data # os.makedirs():用来创建多层目录(多层就是深度),exist_ok=True是在目录已存在的情况下不报错,默认为False,目
阅读全文
摘要:print(type(X)) A = X.numpy() print(type(A)) B = torch.tensor(A) print(type(B)) print(id(X)) print(id(A)) print(id(B)) #输出结果 <class 'torch.Tensor'> <cl
阅读全文
摘要:一、 运行一些操作可能会导致为新的结果分配内存。例如,如果我们用 Y = X + Y,我们将取消引用 Y 指向的张量,而是指向新分配的内存处的张量。 开辟新的内存空间有如下问题: 1、在机器学习中,我们可能有数百兆的参数,并且在一秒内多次更新所有参数。通常情况下,我们希望原地执行这些更新。 2、我们
阅读全文
摘要:1、与python数组一样,张量中的元素可以通过索引访问 2、第一个元素的索引为0 3、可以指定范围以包含第一个元素和最后一个之前的元素 4、可以通过负索引根据元素到列表尾部的相对位置访问元素 即:我们可以用 [-1] 选择最后一个元素,可以用 [1:3] 选择第二个和第三个元素 print(X)
阅读全文
摘要:在之前运算中,都是在相同形状的两个张量上执行按元素操作。在某些情况下,我们仍然可以通过调用 广播机制 (broadcasting mechanism) 来执行按元素操作 1、通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状 2、对生成的数组执行按元素操作。 a = tor
阅读全文
摘要:一、张量 概念:张量表示一个数值组成的数组,这个数组可能有多个维度 具有一个轴的张量对应数学上的向量(vector) 具有两个轴的张量对应数学上的矩阵(matrix) 二、数据操作 1、使用arange创建一个行向量。创建的行向量包含从0开始的前12个整数,默认创建为浮点数。张量中的每个值都称为张量
阅读全文
摘要:监督学习(supervised learning):我们给算法一个数据集,其中包含了正确答案。 回归问题(regression problem):预测连续值输出 分类问题(classification problem):我们设法预测一个离散值的输出(0或者1),但是在实际例子中,也可能会有两个以上的
阅读全文
摘要:一、文件的类型 文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可以使用记事本程序打开 二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,比如:mp3音频文件 二、打开模式 r:以只读模式打开文件,文件的指针将会放在文件的开头 w:以只写模式打开文件
阅读全文
摘要:一、常见的字符编码格式 python的解释器使用的是Unicode(内存) .py文件在磁盘上使用UTF-8存储(外存) 二、文件的读写操作 file = open( filename [ , mode , encoding ] ) file:被创建的文件对象 open:创建文件对象的函数 file
阅读全文
摘要:一、第三方模块的安装 pip install 模块名 二、第三方模块的使用 import 模块名 import schedule import time def job(): print('哈哈————————') schedule.every(3).seconds.do(job) while Tr
阅读全文
摘要:sys:与python解释器及其环境操作相关的标准库 time:提供与时间相关的各种函数的标准库 os:提供了访问操作系统服务功能的标准库 calendar:提供与日期相关的各种函数的标准库 urllib:用于读取来自网上(服务器)的数据标准库 json:用于使用JSON序列化和反序列化对象 re:
阅读全文
摘要:一个Python程序中包含多个包,一个包中包含了多个模块 一、什么是包 包是一个分层次的目录结构,他将一组功能相近的模块组织在一个目录中 二、包的作用 代码规范 避免模块名称冲突 三、包与目录的区别 包含__init__.py文件的目录称为包 目录里通常不包含__init__.py文件 四、包的导入
阅读全文
摘要:一、什么叫做模块 模块的英文为Modules 一个模块中可以包含多个函数 在python中一个拓展名为.py的文件就是一个模块 二、使用模块的好处 方便其他程序和脚本的导入并使用 避免函数名和变量名冲突 提高代码的可维护性 提高代码的可重用性 三、自定义模块 1、创建模块 新建一个.py文件,名称尽
阅读全文
摘要:变量的赋值操作: 只是形成两个变量,实际上还是指向同一个对象 #变量的赋值操作 a=10 b=10 print(id(a)) #1775575198288 print(id(b)) #1775575198288 class CPU: pass class Disk: pass class Compu
阅读全文
摘要:一、特殊属性 __dict__:获得类对象或实例对象所绑定的所有属性和方法的字典 class A: pass class B: pass class C(A,B): def __init__(self,name,age): self.name=name self.age=age x=C('秦健峰',
阅读全文
摘要:一、封装:提高程序的安全性 将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离了复杂度。 class Car: def __init__(self,brand): self.brand=brand def st
阅读全文
摘要:python是动态语言,在创建对象之后,可以动态绑定属性和方法 stu1=Student('小秦同学在上学',20) stu2=Student('梅达',50) #一个Student类可以创建N多个Student类的实例对象,每个实例对象的属性值可以不同也可以相同 #每个实例对象都开辟了新的内存空间
阅读全文
摘要:一、类和对象 1、类:是多个类别事物组成的群体的统称。能够帮助我们快速理解和判断事物的性质 2、数据类型 不同的数据类型属于不同的类 使用内置函数查看数据类型 print(type(100)) #<class 'int'> print(type('abc')) #<class 'str'> 3、对象
阅读全文
摘要:python提供了异常处理机制,可以在异常出现时及时捕获,然后内部消化,让程序继续运行 1、可能抛出异常代码写在try语句块中 2、抛出的异常写在except中 3、多个except结构 捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后增加BaseException tr
阅读全文
摘要:一、什么是递归函数 如果在一个函数的函数体内调用了该函数本身,这个函数就被称为递归函数 二、递归的组成部分 递归调用和递归终止条件 三、递归的调用过程 每递归调用一次函数,都会在栈内存分配一个栈帧 每执行完一次函数,都会释放相应的空间 四、递归的优缺点 缺点:占用内存多,效率低下 优点:思路和代码简
阅读全文
摘要:一、函数的创建和调用 1、什么是函数 函数就是执行特定任务和完成特定功能的一段代码 2、函数创建格式 def sum(a,b): #a,b称为形式参数,简称形参,形参的位置是在函数的定义处 c=a+b return c result=sum(10,60) #10,60称为实际参数的值,简称实参,实参
阅读全文
摘要:一、什么是字符串 在python中字符串是基本数据类型,是一个不可变的字符序列 二、字符串的驻留机制 仅保留一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋值给新创建的变量
阅读全文
摘要:一、什么是集合 是python语言提供的一种内置的数据结构 与列表,字典一样是可变类型的序列 集合是没有value的字典 二、集合的创建方式 1、直接{ } 2、使用内置函数set() ''' 第一种创建方式——直接使用{} ''' demo={'秦健峰','梅达',98} print(demo)
阅读全文
摘要:一、元组 python内置的数据结构之一,是一个不可变序列 二、不可变序列与可变序列 不可变序列:字符串、元组 不可变序列:没有增、删、改的操作 可变序列:列表、字典 可变序列:可以对序列进行增、删改操作,对象地址不发生更改 ''' 可变序列:列表、字典 ''' lst=[10,20,45] pri
阅读全文
摘要:一、什么是字典 1、python内置的数据结构之一,与列表一样是一个可变序列 2、以键值对的方式存储数据,字典是一个无序的序列 3、字典示意图 4、字典的实现原理 字典的实现原理与查字典类似,查字典是先根据部首或拼音查找对应的页码,python中的字典是根据key值查找value所在的位置 二、字典
阅读全文
摘要:一、列表元素的增加操作 append():在列表的末尾添加一个元素 extend():在列表的末尾至少添加一个元素 insert():在列表的任意位置添加一个元素 切片:在列表的任意位置添加至少一个元素 #append():向列表的末尾添加一个元素 lst=[10,20,30] print('添加元
阅读全文
摘要:一、列表的创建 1、列表需要使用中括号 [] 和 , 元素之间使用英文的逗号进行分隔 2、列表的创建方式有两种 使用中括号 调用内置函数list() #列表的创建 #第一种方法:使用中括号 mylist=['hello','world',98] print(id(mylist)) print(typ
阅读全文
摘要:变量可以存储一个元素,而列表是一个“大容器”可以存储N多个元素,程序可以方便的对这些数据进行整体操作 列表相当于其他语言中的数组 列表内存示意图 #变量存储的是一个对象的引用 a=0 print(a,'的id块:',id(a)) #列表存储多个对象的引用 lst=['hello','world',9
阅读全文
摘要:一、python输出不换行 print(1) print(2) print(1,end='') print(2) print(1,end='\t') print(2) 运算结果: 1 2 12 1 2 二、循环嵌套 #打印三行四列的矩阵 for i in range(1,4): for j in r
阅读全文
摘要:else语句可以与if,while,for语句一起搭配使用 if:if条件表达式不成立时执行else while:循环结束后且没有碰到break时执行else for:循环结束后且没有碰到break时执行else #else在while中使用 a=0 while a<3: passward=inpu
阅读全文
摘要:一、break语句 用于结束循环语句,通常与分支结构if一起使用 #从键盘输入密码,最多输入三次,如果正确就结束循环。 ''' for i in range(3): password = int(input('请输入您的密码')) if password==888: break print('您还可
阅读全文
摘要:1、range函数的三种创建方式及作用 #第一种创建反式,只有一个参数 r=range(10) #r=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],默认从0开始,默认相差为1称为步长 print(r) #range(0, 10) print(list(r)) #用list查看rang
阅读全文
摘要:tip:对象的布尔值 python一切皆对象,所有对象都有一个布尔值 可以使用内置函数bool()获取对象的布尔值 #python对象的bool值 print('以下对象的bool值均为False') print(bool(False)) print(bool(0)) print(bool(0.0)
阅读全文
摘要:一、算术运算符 #标准运算发 print(1+2) #加法运算 print(2-1) #减法运算 print(2*3) #乘法运算 print(1/2) #除法运算 print(11/2) print(11//2)#整除运算 #取余运算符 print(11%2) #取余运算7 #幂运算 print(
阅读全文
摘要:一、str():将其他数据类型转为字符串 可以用引号转化 name='小秦同学在上学' age1=20 age2='20' print(name,type(name)) print(age1,type(age1)) print(age2,type(age2)) print('我叫'+name+'今年
阅读全文
摘要:一、变量定义 变量由三部分组成 标识:表示对象所存储的内存地址,使用内置函数id(obj)来获取 类型:表示的是对象的数据类型,使用内置函数type(obj)来获取 值:表示的是对象所存储的具体数据,使用print(obj)可以将值进行打印输出 name='小秦同学在上学'print(name) p
阅读全文
摘要:一、print()函数 功能:向目的地输出内容 输出的内容:数字、字符串、表达式 目的地:IDLE、控制台、文件 #输出数字 print(520) print(89.5) #输出字符串 print('adghdgagf') print("abdafb") #输出表达式 print(3+1) #将数据
阅读全文