记录学习《手动学习深度学习》这本书的笔记(一)

news/2024/11/30 7:40:42/

这几天在看同学推荐的这本书,看到了大概百来页,感觉受益匪浅,很多老师上课没讲到的东西在书里都有详细介绍。

平时上课做机器学习的作业实验基本都是调用模型直接套,没有去关注具体的方法,这本书都帮我巩固了很多知识点,也让我学到了不少新东西。

目前刚看完多层感知机那一章,包括前一章的线性神经网络和前前一章的预备知识都有太多我想做笔记的知识点,现在补回来,之后每看一节都会记录笔记

第2章:预备知识

2.5 自动微分

这里学到了一个从没见过的东西:反向传播计算梯度,原理是在计算函数的过程中跟踪计算是哪些数据通过哪些操作组合起来产生输出,然后自动微分系统就能反向传播计算梯度。

from mxnet import autograd, np, npxnpx.set_np()x = np.arange(4.0)
# x = [0., 1., 2., 3.]# 通过调用attach_grad来为一个张量的梯度分配内存
x.attach_grad()
# 在计算关于x的梯度后,将能够通过'grad'属性访问它,它的值被初始化为0
# 这里可以输出x.grad,这时为[0., 0., 0., 0.]y = 2 * np.dot(x, x) # 把y当成关于x的函数y.backward()
# 这里输出x.grad,为[ 0.,  4.,  8., 12.]

在后面经常会用上,可以很方便的计算函数在某个点的梯度,有助于优化模型

2.6 概率

这里重温了概率论,条件分布和联合分布计算相关内容。

第三章:线性神经网络

3.2 线性回归的从零开始实现

这里首次用到了前面的梯度函数,基本流程:

①循环轮次(epoch)

②开始随机遍历数据集,计算损失函数

③反向传播计算梯度

④更新参数

⑤计算训练集损失

⑥输出轮次和训练集损失

for epoch in range(num_epochs):for X, y in data_iter(batch_size, features, labels):l = loss(net(X, w, b), y)  # X和y的小批量损失# 计算l关于[w,b]的梯度l.backward()sgd([w, b], lr, batch_size)  # 使用参数的梯度更新参数train_l = loss(net(features, w, b), labels)print(f'epoch {epoch + 1}, loss {float(train_l.mean()):f}')

3.3 线性回归的简洁实现

这里学习到了一个函数,nn.Sequential和nn.Linear,都是定义模型的函数,Sequential里面可以传入多个Linear(线性模型)和ReLU(激活函数),比如

model = nn.Sequential(nn.Linear(in_features=input_size, out_features=hidden_size),nn.ReLU(),nn.Linear(in_features=hidden_size, out_features=output_size)
)

这个实例中模型首先通过一个线性层,再通过一个激活函数,再通过一个线性层。

3.4 softmax回归

这里学到了使用softmax函数的分类模型,以及它的损失和损失函数的梯度怎么求,这里要注意区分计算预测正确的函数的梯度和预测错误的函数的梯度。

第四章:多层感知机

4.1 多层感知机

这里学习了三个激活函数,ReLU、sigmoid、tanh函数。在机器学习课上老师只讲sigmoid函数,结果书里说sigmoid早就落伍了,用的最多的是ReLU函数。

4.5 权重衰减

权重衰减的做法是将权重增加到损失函数中,因为要保证权重向量较小。

4.6 暂退法

暂退法的做法是在训练时丢弃部分神经元的输出,这样可以避免模型太过依赖某一个神经元,所以在训练过程中我们随机扔掉一部分神经元输出,使模型不会过分依赖某一个神经元。


http://www.ppmy.cn/news/1551137.html

相关文章

深度学习之Mask-R-CNN

1.1 Mask-RCNN 的网络结构示意图 其中黑色部分为原来的Faster-RCNN,红色部分为在Faster网络上的修改:    1)将ROI Pooling层替换成了ROIAlign;    2)添加并列的FCN层(Mask层);  …

彻底理解quadtree四叉树、Octree八叉树 —— 点云的空间划分的标准做法

1.参考文章: (1)https://www.zhihu.com/question/25111128 这里面的第一个回答,有一幅图: 只要理解的四叉树的构建,对于八叉树的构建原理类比方法完全一样:对于二维平面内的随机分布的这些点&…

百度在下一盘大棋

这两天世界互联网大会在乌镇又召开了。 我看到一条新闻,今年世界互联网大会乌镇峰会发布“2024 年度中国互联网企业创新发展十大典型案例”,百度文心智能体平台入选。 这个智能体平台我最近也有所关注,接下来我就来讲讲它。 百度在下一盘大棋…

【Oracle11g SQL详解】GROUP BY 和 HAVING 子句:分组与过滤

GROUP BY 和 HAVING 子句:分组与过滤 在 Oracle 11g 中,GROUP BY 子句用于根据一个或多个列对查询结果进行分组,而 HAVING 子句用于对分组后的结果进行过滤。这两者常结合聚合函数使用,用以实现复杂的数据统计和分析。本文将系统…

android 新增一个系统服务

android如何新增一个系统服务呢? 两个方案,一个是新增一个systemserver下的binder服务,一个是新增一个native的独立进程服务 这里选的是第一种,但坐下来感觉第二种更简单一些 因为systemserver要遵循的规则特别多 先是在startOthe…

【Python-Open3D学习笔记】004Mesh生成方法

PointCloud的TriangleMesh生成方法 本文使用csv文件作为点云数据(csv —> DataFrame —> PointCloud) 文章目录 PointCloud的TriangleMesh生成方法0. 数据展示1. Poisson表面重建2. Alpha Shapes3. 检测边界4. 小结 0. 数据展示 数据可视化方法…

heapq模块常用方法

heapq.heapify(x) import heapq# heapq.heapify(x)将列表x转换为堆 # 在堆数据结构中,最小元素总是位于根节点(索引为 0) # 这个操作是在原列表上进行的,会改变列表的顺序 my_list [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] heapq.hea…

【智能摄像头带电源控制的系统实现远程监控的过程】

以下是一个详细的实现方案: 一、系统概述 智能摄像头带电源控制的远程监控系统,以智能摄像头为核心,集成电源管理、网络通信、远程控制等功能,通过互联网或局域网实现远程监控和管理。 二、关键组件与技术 1. **智能摄像头**&…