环境配置 - 本地安装 # 以下操作处于conda环境下 conda env list # 查看建立过的环境 conda env remove d2l-zh # 如果发现建立过名为d2l-zh的环境可以删掉重建 conda create -n d2l-zh python=3.8 # 建立名字为d2l-zh的环境 conda activate d2l-zh # 激活刚刚创建的环境 # 下载需要的包 (下载比较慢可以加上国内源 -i https://pypi.douban.com/simple) pip i
深度学习简介 定义以及与机器学习的关系 深度学习是指机器学习中的一类函数,能够逐级表示越来越抽象的概念或模式,他们的形式通常为多层神经网络,近年来,已逐渐成为处理图像、文本预料和声音信号等复杂高纬度数据的主要方法 ,属于机器学习的一类,外在特点是端到端的训练; 机器学习研究如何使计算机利用经验提高性能,属于人工智能领域的分支,也是实现人工智能的一种手段; 神经网络核心原则 交替使用现行和非线性处理单元,常被称为 “层”; 使用链式法则(即反向传播)来更新网络参数; 深度学习发展的原因 优秀的容量控制方法,如丢弃法使大型网络的训练不再受制于过拟合(大型神经玩两个学会记忆大部分训练数据的行为); 注意力机制解决了 深度学习基础 这一章节中,主要有以下相关知识点: 线性回归 详情请参见深度学习之线性回归; Softmax回归 详情请参见深度学习之Softmax; 多层感知机 详情请参见多层感知机
name转换为numpy数组并存储到name1中 name1 = torch.from_numpy(name) 将name转换为Tensor数组并存储到name1中 自动求梯度(autograd) 动手学习深度学习 ,2.3 2020.1.28,好久没学习,今天开始学习。 深度学习过程中,常需要对函数进行求梯度,PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播。
对于离散值预测问题,我们可以使用诸如softmax回归这样的分类模型。softmax回归模型有多个输出单元。本章以softmax回归模型为例,介绍神经网络中的分类模型。
线性回归是单层神经网络,设计的概念和技术适用于大多数深度学习模型;因此,我们以线性回归为例,学习深度学习模型的基本要素和表示方法。 线性回归模型的房屋价格预测表达式为 (2)损失函数 深度学习过程中需要衡量价格预测值与真实值之间的误差。通常会选取一个非负数作为误差,且数值越小表示误差越小。一个常用的选择是平方函数。 随机选取一组初始值 多次迭代,使每一次迭代的值都更小一点 迭代过程: 假定这一个小批量有B个数,学习率为\eta。(这两个是人为设定的超参数) 每次迭代对三个参数进行分别计算。 首先是对损失函数进行求导 然后求小批量对应的损失函数的导数的平均值,最后乘以学习率,得到减小量 根据减小量得到迭代后的w1、w2、b 模型预测 确定训练完成后,将模型参数再优化算法停止时的值分别记作 神经网络图 深度学习中,我们使用神经网络图直观地表现模型结构。 该图使用神经网络图表示本届中介绍的线性回归网络,倒数隐去了权重和偏差。 输入个数也叫做特征数或特征向量维度。
., 0.])} 1.2 读写模型 优化器和具有可学习参数的层的参数名称和参数被存储在state_dict。 下面以实例调用state_dict来显示模型参数和名称。
实现线性回归 这一节不牵扯深度学习框架,仅使用Tensor和autograd库来训练线性回归模型。 在每次迭代中: 读取小批量随机样本 调用反向函数.backward计算样本的梯度(小批量随机梯度) 调用sgd函数迭代模型参数,然后将参数的梯度清零 #当前程序迭代周期数设置为3;学习率设置为0.03lr 输出每一个学习周期得到的损失值。 好像是对数据本身进行操作 #当前程序迭代周期数设置为3;学习率设置为0.03lr = 0.03num_epochs = 3net = linreg #换名loss = squared_loss #换名
def sgd(params,lr,batch_size): #lr:学习率,params:权重参数和偏差参数 for param in params: param.data 1.8训练模型 在训练模型时,迭代周期数num_epochs和学习率lr都是可以调节的超参数,通过调节超参数的值可以获得分类更准确的模型。 y.shape[0] #通过shape[0]获取y的零维度(列)的元素数量 return right_sum/n def sgd(params,lr,batch_size): #lr:学习率
Data.DataLoader包含多个参数 参数 功能 dataset Dataset类型,从其中加载数据 batch_size int类型,每个批量加载多少个数 shuffle bool类型,每个学习周期都打乱顺序 0.03;net.parameters()导入模型的参数 print(optimizer) #输出优化算法的各项参数 扩展内容: #为不同网络设置不同学习率 optimizer = optim.SGD( net.subnet1.parameters()}, #不设置lr,默认使用最外层的 {'params':net.subnet2.parameters(),lr=0.01} ],lr = 0.03) #调整学习率 for param_group in optimizer.param_groups: param_group['lr']*=0.1 #学习率调整为之前的0.1倍 训练模型 num_epochs #定义优化算法(同样的小批量随机梯度下降算法) optimizer = optim.SGD(net.parameters(),lr = 0.03) #训练过程 num_epochs = 3 #学习周期
点击【拇指笔记】,关注我的公众号。 ---- 1.1 获取和读取数据 这一部分依然使用之前的Fashion-MNIST数据集。 def sgd(params,lr,batch_size): #lr:学习率,params:权重参数和偏差参数 for param in params: param.data 通过shape[0]获取y的零维度(列)的元素数量 return right_sum/n 1.8 训练模型 在训练模型时,迭代周期数num_epochs、隐藏层神经单元数num_hiddens和学习率 且运行时间有所加长(5个学习周期运行了80秒)。 ? 1.9.1 单线程与多线程 单线程:运行了80s。 ? 四线程:运行了41s。 ?
多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。如图所示的隐藏层一共有5个隐藏单元。由于输入层不涉及计算,因此这个多层感知机的层数为2。如图所示的多层感知机中的隐藏层和输出层都是全连接层。
神经网络中存在着全连接层、卷积层、池化层和循环层等各种各样的层。虽然PyTorch提供了大量常用的层,但有时还是需要我们自定义层。本篇文章介绍如何使用Module类来自定义层。
False,num_workers=0) #参数 #dataset:Dataset类型,从其中加载数据 #batch_size:int类型,每个批量加载多少个数 #shuffle:bool类型,每个学习周期都打乱顺序 定义学习率为0.1。 y.shape[0] #通过shape[0]获取y的零维度(列)的元素数量 return right_sum/n 1.6 训练模型 num_epochs = 5 #一共进行五个学习周期 nn.CrossEntropyLoss() #优化函数 optimizer = torch.optim.SGD(net.parameters(),lr=0.01) num_epochs = 5 #一共进行五个学习周期
本文链接:https://blog.csdn.net/github_39655029/article/details/89151587 作为深度学习的基础,我们常会频繁对数据进行操作,以下则是介绍如何对内存中的数据进行常用操作的相关代码
点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 机器之心报道 markdown笔记与原课程视频一一对应,Jupyter代码均有详细中文注释,这份学习笔记值得收藏。 亚马逊资深首席科学家李沐博士的「动手学深度学习」中文系列课程,这门课从3月持续到8月,超过28000人参与了直播,课程回放在 B 站的播放量达到了上百万次。 cid=175509 这门课程基于李沐等人编写的《动手学深度学习》第二版。 《动手学深度学习》既有开源项目,也有纸质书,它覆盖了90年代至今重要的模型,特别是每一章都是一个Jupyter记事本,提供了所有模型的完整实现,并在真实数据上运行从而获得直观体验。 「动手学深度学习」中文系列课程,并共同整理了这份学习资料。
正向传播与反向传播 在训练深度学习模型时,正向传播和反向传播之间相互依赖。一方面正向传播的计算可能依赖于模型参数的当前值而这些模型参数是在反向传播的梯度计算后通过优化算法迭代的。
点击【拇指笔记】,关注我的公众号。 ---- 本篇文章全部代码可以在后台回复"MLP_PY"获取。 1.使用PyTorch实现多层感知机 导入需要的库。 通过shape[0]获取y的零维度(列)的元素数量 return right_sum/n 1.5 训练模型 在训练模型时,迭代周期数num_epochs、隐藏层神经单元数num_hiddens和学习率 test_iter,loss,num_epochs,batch_size,optimizer,net_accurary)print('%.3f'% (time()-start),'s') 1.6 训练结果 五个学习周期
点击【拇指笔记】,关注我的公众号。 本篇文章完整代码可以在后台回复"fit"获得 1.多项式函数拟合实验 本节以多项式函数为例,来演示模型复杂度和训练集大小对欠拟合和过拟合的影响。 train_labels).item()) test_ls.append(loss(net(test_features), test_labels).item()) #记录每一个学习周期的损失值
本文记录了自己在阅读《动手学深度学习》时的一些思考,仅用来作为作者本人的学习笔记,不存在商业用途。到目前为止,我们只讨论了具有一个单向隐藏层的循环神经网络。 下图展示了一个具有L 个隐藏层的深度循环神经网络,每个隐状态都连续地传递到当前层的下一个时间步和下一层的当前时间步。 {xh}^{(l)} + \mathbf{H}_{t-1}^{(l)} \mathbf{W}_{hh}^{(l)} + \mathbf{b}_h^{(l)}) 中的隐状态进行计算, 可以很容易地得到深度门控循环神经网络或深度长短期记忆神经网络 有许多不同风格的深度循环神经网络, 如长短期记忆网络、门控循环单元、或经典循环神经网络。 这些模型在深度学习框架的高级API中都有涵盖。 总体而言,深度循环神经网络需要大量的调参(如学习率和修剪) 来确保合适的收敛,模型的初始化也需要谨慎。
net = Conv(kernel_size = (1,2)) step =20#训练周期 lr = 0.01#学习率 for i in range(step): Y_hat = net(X) l .3f' % (i + 1, l.item())) print("weight:",net.weight.data) print("bias:",net.bias.data) 各个学习周期的损失为