- 博客(23)
- 收藏
- 关注
原创 4.4 PyTorch中的可视化工具
4.4 可视化工具Tensorflow有TensorBoard可视化工具,它可以记录训练数据、评估数据、网络结构、图像等,并且可以在wab上面展示,对于观察神经网络训练的过程非常有帮助。PyTorch中也有这样的工具———tensorboardX。4.4.1 tensorboardX简介tensorboardX供能很强大,支持scalar、image、figure、histogram、audio、text、graph、onnx_graph、embedding、pr_curve 和 videosumma
2021-01-17 16:20:34 825 3
原创 4.2 utils.data简介
4.2 utils.data简介utils.data中我们常用的就是Dataset和DataLoder两个类。torch.utils.data.Dataset是一个抽象类,自定义数据集需要继承它,并要实现两个方法,一个是__getitem__,一个是___len__,前者通过给定索引获取数据和标签,后者提供数据的大小(size)。__getitem__一次只能获取一个数据,所以需要通过torch.utils.data.DataLoder来定义一个新的迭代器,实现batch读取。我们来定义一个简单的数据集,
2021-01-14 17:26:34 1510
原创 4.1 PyTorch中的数据处理工具箱概述
4.1 PyTorch中的数据处理工具箱概述PyTorch涉及数据处理(数据装载、数据预处理、数据增强等)主要工具包相互关系如图所示:图左边是的torch.utils.data工具包,它包括以下四个类:1)Dataset:是一个抽象类,其他数据集必须要继承这个类,并且覆写其中的两个方法(getitem, len)。2)DataLoder:定义一个新的迭代器,它能批量读取(batch),打乱数据(shuffle)并提供并行加速等功能。3)random_split:把数据集随机拆分为给定长度的非重叠
2021-01-13 19:55:37 242
原创 3.6 动态修改学习率参数
3.6 动态修改学习率参数修改参数可以通过修改参数optimizer.params_groups或新建optimizer。新建optimizer比较简单,optimizer十分轻量级,所以开销很小。但是新的优化器会初始化动量等信息,这对使用带动量的优化器(如:SGD)可能会造成收敛的震荡。所以直接使用修改参数optimizer.params_groups。optimizer.params_groups:长度1的list,optimizer.params_groups[0]:长度6的字典,包括权重参数、学
2021-01-12 19:20:49 336 1
原创 3.5 PyTorch中的优化器
3.5 PyTorch中的优化器PyTorch常用的优化方法都封装在torch.optim里面,它的设计很灵活,可以扩展为自定义的优化方法。所有的优化方法都继承了基类optim.Optimizer.最常用的优化算法就是梯度下降法及其各种变种,这类优化算法通过使用参数的梯度值更新数值。结合前面的例子,我们来说明一下使用优化器的一般步骤:1、建立优化器实例导入optim模块,实例化SGD优化器,这里使用带动量参数momentum(该值一般在(0,1)之间),是SGD的改良版,一般比不带动量的效果好。#
2021-01-12 16:38:15 324
原创 3.4 神经网络工具箱nn
3.4 神经网络工具箱nn前面我们使用过Autograd和Tensor实现过机器学习。但对于大型网络,Autograd太过于底层和繁杂。所以我们使用nn工具箱。在nn工具箱里有两个重要模块:nn.Module,nn.functional3.4.1 nn.Modulenn.Module是nn的一个核心数据结构,它可以是网络的某个层,也可以是包含多层的神经网络。最常见的做法是继承nn.Module类,生成自己的网络层,前面中就通过定义Net类就采用这种激活方法(class Net(nn.Module))。
2021-01-12 16:00:38 346
原创 3.3 构建神经网络小结
3.3 如何构建神经网络前面我们使用nn工具箱,搭建了一个神经网络。虽然有很多步,但关键就是选择网络层,构建网络,然后选择损失和优化器。下面我们大体上说一下。3.3.1 构建网络层前面我们采用了torch.nn.Sequential()来构建网络,使用起来很方便,但这种方法每层的编码默认的是数字,不易区分。那如何对每个层定义一个名称?我们可以采用Sequentional的一种改进方法,在Sequentional上,通过add_module()添加每一层,并且为每一层增加一个名字。此外,还可以通过字典
2021-01-12 11:01:17 225
原创 3.2 PyTorch实现手写数字识别
3.2 PyTorch实现手写数字识别使用PyTorch构建神经网络的主要工具和相互关系如图所示:从图上可知,构建网络层可以基于Module类或函数(nn.functional)。nn中的大多数层(Layer)在functional中都有之对应的函数。nn.functional中函数的Layer与nn.Module中的Layer的主要区别是后者继承了Module类,会自动提取可学习的参数。而nn.functional更像是纯函数。两者功能相同,且性能也没有很大区别,那么如何选择呢?像卷积层、全连接层
2021-01-10 20:41:39 285
原创 3.1 神经网络核心组件
第三章 PyTorch神经网络工具箱3.1 神经网络核心组件神经网络核心组件包括:1)层:神经网络的基本结构,将输入张量转换为输出张量2)模型:层构成的网络3)损失函数:参数学习的目标函数,通过最小化损失函数来学习各种参数4)优化器:如何使损失函数最小,这就涉及到优化器当然这些核心组件不是独立的,它们之间,以及它们与神经网络其他组件之间有密切的关系。它们的关系如图所示:多个层链接在一起构成一个模型或网络,输入数据通过这个模型转换为预测值,然后损失函数把预测值与真实值进行比较,得到损失值,该
2021-01-07 16:27:33 410
原创 2.8 使用Tensorflow实现简单机器学习
2.8 使用Tensorflow实现简单机器学习前面我们介绍了使用Numpy和PyTorch实现简单的回归分析任务,这次我们使用Tensorflow来实现相同的任务。我们使用TensorFlow1.0版本的,使用静态图。代码如下:
2021-01-06 19:45:30 665
原创 2.7 使用PyTorch实现简单机器学习
2. 7 使用PyTorch实现简单机器学习本篇我们将使用PyTorch的一个自动求导的包——Antograd,利用这个包及对应的Tensor,利用自动反向求导传播来求梯度,无需手工计算梯度。以下是代码实现:
2021-01-06 16:18:25 969
原创 2.6 使用Numpy实现简单机器学习
2.6 使用Numpy实现简单机器学习我们用原始的Numpy实现有关回归的一个机器学习任务,不用PyTorch和Tensorflow中的包或类。首先,给出一个数组x,然后基于表达式y=3x^2+2,加上一些噪音数据到达另一组数据y。然后,构建一个简单的机器学习模型,学习表达式y=wx^2+b的两个参数w、b。利用数组x,y的数据为训练数据。最后,采用梯度下降法,通过多次迭代,学习到w、b的值。以下为具体代码:# 1、导入需要的库import numpy as npfrom matplotli
2021-01-05 21:03:26 300
原创 2.5.4 PyTorch中的非标量反向传播
2.5.4 pytorch中的非标量反向传播在PyTorch中有个简单的规定,不让张量对张量求导,只允许标量对张量求导。因此,目标量对一个非标量调用backward(),则需要传入一个gradient参数。传入这个参数就是为了把张量对张量的求导转换为标量对张量的求导。假设目标值loss=(y1,y2,y3…,ym),传入的参数为 v=(v1,v2,v3…,vm),那么就可以把对loss的求导,转换为对loss*vT标量的求导。即把原来loss对x求导的雅克比矩阵乘以张量v的转置,便可得到我们需要的梯度矩
2021-01-05 15:47:25 2875 3
原创 2.5.3 PyTorch中的标量反向传播
2.5.3 pytorch中的标量反向传播假设x,w,b都是标量,z=wx+b,对标量z调用backward()方法,按照前面所说,我们无需对backward()传入参数。下面我们用代码来实现自动求导的主要步骤:
2021-01-04 16:08:17 482
原创 深入理解AlexNet
Alexnet总结最近在看深度学习的论文,看完之后想总结一下,加深一下理解和记忆,有什么不对的地方,请多包涵。那今天给大家带来的是很经典的一篇文章 :《ImageNet Classification with Deep Convolutional Neural Networks》。摘要先大体上说一下摘要:Alexnet有6000万参数和650000个神经元,包含5个卷积层和3个全连接层,最后是一个1000维的softmax。为了训练的更快,使用了非饱和神经元(Relu),并对卷积操作进行了非常有效的
2021-01-03 16:29:23 1866
原创 2.4 Numpy与Tensor
2.4 Numpy与TensorTensor是零维、一维、二维及多维的数组。它与Numpy相似,二者可以共享内存,且之间的转换非常方便和高效。不过它们也有不同之处,最大的区别在于Numpy会把ndarry放在CPU中进行加速运算,而由Torch产生的Tensor会放在GPU中进行加速运算(假设当前环境有GPU)。2.4.1Tensor概述对Tensor的操作很多,从接口的角度来划分,可以分为两类:1)torch.function,如torch.sum,torch.add等;2)tensor.fun
2020-12-30 17:06:58 538
原创 1.7 Numpy的广播机制
1.7 Numpy的广播机制Numpy的ufunc中要求输入的数组shape是一致的,当数组的shape不相等时,则会使用广播机制。不过运用广播机制需要满足一定的的规则,否则将会出错。规则如下:1)让所有输入数组都像其中shape最长的数组看齐,不足的部分则通过在前面加1补齐;2)输出数组的shaoe是输入数组shape的各个轴上的最大值;3)如果输入数组的某个轴和输出数组的对应轴的长度相同或者某个轴的长度为1时,这个数组能被用来计算,否则出错;4)当输入数组的某个轴的长度为1时,沿着此轴运算时都
2020-12-27 19:47:40 226
原创 1.5 批量处理&&1.6 通用函数
1.5 批量处理在深度学习中,由于数据比较大,通常需要用到批处理。如何把大数据拆分成多个批次呢?可采用如下步骤:1)得到数据集2)随机打乱数据3)定义批大小4)批处理数据集# 生成10000个形状为2×3的矩阵# randn为生成标准正态的随机数# 这时一个三维矩阵,第1个维度为样本数,后两个是数据形状data_train = np.random.randn(10000, 2, 3)print(data_train.shape)# 打乱这10000条数据np.random.shuff
2020-12-27 10:56:11 141
原创 1.3 Numpy的算术运算&&1.4 数组形状改变
1.3 Numpy的算术运算有两种常用的运算,一种是对应元素相乘,又称为逐元乘法,运算符为np.multiply()或者*;另一种是点积或內积,运算符为np.dot().1.3.1 对应元素相乘是指两个矩阵中对应元素相乘,输出与输入矩阵或数组的维度是一致的。...
2020-12-25 16:09:37 195
原创 1.2 ndarray 数组获取元素
1、Numpy基础1.2 ndarray 数组获取元素对于一维数组,其实跟列表的切片很类似nd1 = np.random.random([10])print(nd1)# 获取指定位置的元素,利用切片,获取第3个元素# 对于一维数组print(nd1[2])# 截取一段数据,比如截取第2个到第5个元素# [1:5]取头不取尾print(nd1[1:5])# 截取固定间隔数据# [1:9:2] 同样取头不取尾# [初始:终止:步长]print(nd1[1:9:2])# 倒序取数p
2020-12-24 10:59:39 3409
原创 第一章 Numpy基础
基于PyTorch的python深度学习第一章 Numpy基础Numpy(Numerical Python)提供了两种基本的对象:ndarray(N-dimensional Array Object)和ufunc(Universal Function Object)。ndarry是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。Numpy的主要特点:1、ndarray,快速节省空间的多维数组,提供数组化的算术能力和高级的传播功能2、使用标准数学函数对整个数组的数据进行快速运算
2020-12-23 20:29:06 215
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人