xinmeng_wit 发表于 2024-9-7 18:22

《动手学深度学习(PyTorch版)》1、预备知识

本帖最后由 xinmeng_wit 于 2024-9-7 18:22 编辑

<p><strong><span style="font-size:22px;">一、书籍简介</span></strong></p>

<p>《动手学深度学习(PyTorch版)》这是一本深度学习领域教父级别的书籍,这也是第一版的重磅升级版本,选用了经典的PyTorch深度学习框架。</p>

<p>同时,本书也作为了几十所高校教材用书,可见这本书在学术界的地位,几乎是泰斗级的存在。</p>

<p>以下为不完整截图:</p>

<div style="text-align: left;"></div>

<p>本书共有15个章节,可以分为3个部分。</p>

<p>第一部分包含预备知识和基础知识。(第1~4章)</p>

<p>第二部分主要讨论现代深度学习技术。(第5~10章)</p>

<p>第三部分讨论可伸缩性、效率和应用程序。(第11~15章)</p>

<p>大纲目录如下:</p>

<div style="text-align: left;"></div>

<div style="text-align: left;">&nbsp;</div>

<div style="text-align: left;">由目录可以看出来,本书直接以感知机和神经网络作为开篇,并没有介绍传统的机器学习方法,其实,这正是深度学习和机器学习的区别。</div>

<div style="text-align: left;">深度学习着重复杂的神经网络,而机器学习着重传统的机器学习算法。</div>

<div style="text-align: left;">&nbsp;</div>

<p><strong><span style="font-size:22px;">二、引言部分</span></strong></p>

<p>本书的第一章为引言部分,主要是简单描述机器学习的相关概念:</p>

<p><strong><span style="font-size:18px;">1、机器学习的关键组件</span></strong></p>

<ul>
        <li>数据</li>
        <li>模型</li>
        <li>目标函数</li>
        <li>优化算法</li>
</ul>

<p><strong><span style="font-size:18px;">2、机器学习的分类</span></strong></p>

<ul>
        <li>监督学习</li>
        <li>无监督学习</li>
        <li>与环境互动</li>
        <li>强化学习</li>
</ul>

<p><strong><span style="font-size:18px;">3、深度学习的发展</span></strong></p>

<p><strong><span style="font-size:18px;">4、深度学习的成功案例</span></strong></p>

<p>&nbsp;</p>

<p>由于这一章节以抽象的描述为主,稍微过一遍即可,也就不再做过多的介绍了。</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:22px;">三、预备知识</span></strong></p>

<p>深度学习需要掌握一些基本的技能,所有机器学习方法都涉及从数据中提取信息。因此,这部分主要讲解的是数据处理的一些常用的实用技能,包括存储、操作和数据预处理。</p>

<p>主要分为如下几个部分:</p>

<ul>
        <li>数据操作</li>
        <li>数据预处理</li>
        <li>线性代数</li>
        <li>微积分</li>
        <li>自动微分</li>
        <li>概率</li>
</ul>

<p><strong><span style="font-size:18px;">1、数据操作</span></strong></p>

<p>数据操作主要介绍PyTorch中对张量的处理,下面直接来看一些例子。</p>

<ul>
        <li>张量</li>
</ul>

<p>张量定义:</p>

<pre>
<code class="language-python">import torch

x = torch.arange(12)

print(x)</code></pre>

<p>输出:</p>

<p>tensor([ 0, &nbsp;1, &nbsp;2, &nbsp;3, &nbsp;4, &nbsp;5, &nbsp;6, &nbsp;7, &nbsp;8, &nbsp;9, 10, 11])</p>

<p>&nbsp;</p>

<p>查看张量的形状:</p>

<pre>
<code class="language-python">print(x.shape)</code></pre>

<p>输出:</p>

<p>torch.Size()</p>

<p>&nbsp;</p>

<p>改变张量的形状:</p>

<pre>
<code class="language-python">X = x.reshape(3, 4)
print( X)</code></pre>

<p>输出:</p>

<p>tensor([[ 0, &nbsp;1, &nbsp;2, &nbsp;3],<br />
&nbsp; &nbsp; &nbsp; &nbsp; [ 4, &nbsp;5, &nbsp;6, &nbsp;7],<br />
&nbsp; &nbsp; &nbsp; &nbsp; [ 8, &nbsp;9, 10, 11]])</p>

<p>&nbsp;</p>

<p>还有很多其它的方法可以很方便的定义张量和对张量进行变换。</p>

<p>pytorch还支持很多的运算符,比如常用的有加减乘除,乘方等等。</p>

<p>例如:</p>

<pre>
<code class="language-python">x = torch.tensor()
y = torch.tensor()
x + y, x - y, x * y, x / y, x ** y# **运算符是求幂运算</code></pre>

<p>输出:</p>

<p>tensor([ 3., &nbsp;4., &nbsp;6., 10.]) tensor([-1., &nbsp;0., &nbsp;2., &nbsp;6.]) tensor([ 2., &nbsp;4., &nbsp;8., 16.]) tensor() tensor([ 1., &nbsp;4., 16., 64.])</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:18px;">2、线性代数</span></strong></p>

<p>标量由只有一个元素的张量表示。 下面的代码将实例化两个标量,并执行一些熟悉的算术运算,即加法、乘法、除法和指数。</p>

<pre>
<code class="language-python">x = torch.tensor(3.0)
y = torch.tensor(2.0)

print(x + y, x * y, x / y, x**y)</code></pre>

<p>输出:</p>

<p>tensor(5.) tensor(6.) tensor(1.5000) tensor(9.)</p>

<p>&nbsp;</p>

<p>向量可以被视为标量值组成的列表。 这些标量值被称为向量的<em>元素</em>(element)或<em>分量</em>(component)。 当向量表示数据集中的样本时,它们的值具有一定的现实意义。</p>

<p>人们通过一维张量表示向量。一般来说,张量可以具有任意长度,取决于机器的内存限制。</p>

<p>我们可以使用下标来引用向量的任一元素,例如可以通过xi来引用第i个元素。</p>

<pre>
<code class="language-python">import torch

x = torch.arange(4)

print(x)</code></pre>

<p>输出:</p>

<p>tensor(3)</p>

<p>&nbsp;</p>

<p>向量的长度:</p>

<pre>
<code class="language-python">len(x)</code></pre>

<p>输出:</p>

<pre>
4</pre>

<p>正如向量将标量从零阶推广到一阶,矩阵将向量从一阶推广到二阶。 矩阵,我们通常用粗体、大写字母来表示 (例如,X、Y和Z), 在代码中表示为具有两个轴的张量。</p>

<pre>
<code class="language-python">A = torch.arange(20).reshape(5, 4)
A</code></pre>

<p>输出:</p>

<pre>
tensor([[ 0,1,2,3],
      [ 4,5,6,7],
      [ 8,9, 10, 11],
      ,
      ])</pre>

<p>作为方阵的一种特殊类型,<em>对称矩阵</em>(symmetric matrix)A等于其转置:A=A⊤。 这里定义一个对称矩阵B:</p>

<pre>
<code class="language-python">B = torch.tensor([, , ])
B</code></pre>

<p>输出:</p>

<pre>
tensor([,
      ,
      ])</pre>

<p>就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。 张量(本小节中的&ldquo;张量&rdquo;指代数对象)是描述具有任意数量轴的n维数组的通用方法。</p>

<p>&nbsp;</p>

<p>多维张量:</p>

<pre>
<code class="language-python">X = torch.arange(24).reshape(2, 3, 4)
X</code></pre>

<p>输出:</p>

<pre>
tensor([[[ 0,1,2,3],
         [ 4,5,6,7],
         [ 8,9, 10, 11]],

      [,
         ,
         ]])</pre>

<p>我们可以对任意张量进行的一个有用的操作是计算其元素的和。 数学表示法使用&sum;符号表示求和。</p>

<pre>
<code class="language-python">x = torch.arange(4, dtype=torch.float32)
x, x.sum()</code></pre>

<p>输出:</p>

<pre>
(tensor(), tensor(6.))</pre>

<p>点积:</p>

<pre>
<code class="language-python">y = torch.ones(4, dtype = torch.float32)
x, y, torch.dot(x, y)</code></pre>

<p>输出:</p>

<pre>
(tensor(), tensor(), tensor(6.))</pre>

<p>现在我们知道如何计算点积,可以开始理解<em>矩阵-向量积</em>(matrix-vector product)。&nbsp;</p>

<pre>
<code class="language-python">A.shape, x.shape, torch.mv(A, x)</code></pre>

<p>输出:</p>

<pre>
(torch.Size(), torch.Size(), tensor([ 14.,38.,62.,86., 110.]))</pre>

<p>在掌握点积和矩阵-向量积的知识后, 那么<strong>矩阵-矩阵乘法</strong>(matrix-matrix multiplication)应该很简单。</p>

<pre>
<code class="language-python">B = torch.ones(4, 3)
torch.mm(A, B)</code></pre>

<p>输出:</p>

<pre>
tensor([[ 6.,6.,6.],
      ,
      ,
      ,
      ])</pre>

<p>&nbsp;</p>

<p>线性代数中最有用的一些运算符是<em>范数</em>(norm)。 非正式地说,向量的<em>范数</em>是表示一个向量有多大。 这里考虑的<em>大小</em>(size)概念不涉及维度,而是分量的大小。</p>

<p>深度学习中更经常地使用L2范数的平方,也会经常遇到L1范数,它表示为向量元素的绝对值之和</p>

<p>与L2范数相比,L1范数受异常值的影响较小。 为了计算L1范数,我们将绝对值函数和按元素求和组合起来。</p>

<p>&nbsp;</p>

<pre>
<code class="language-python">torch.abs(u).sum()</code></pre>

<p>输出:</p>

<pre>
tensor(7.)</pre>

<p><strong><span style="font-size:18px;">3、微积分</span></strong></p>

<p>这一节,主要有几个重点,导数,偏导数,梯度和链式法则。</p>

<p>导数,相信大家都很 熟悉了,导数其实就是变化率。</p>

<p>&nbsp;在深度学习中,函数通常依赖于许多变量。 因此,我们需要将微分的思想推广到<em>多元函数</em>(multivariate function)上。</p>

<p>在多元函数中,对其中某一个自变量的导数成为偏导数。</p>

<p>我们可以连结一个多元函数对其所有变量的偏导数,以得到该函数的<em>梯度</em>(gradient)向量。</p>

<p>链式法则:</p>

<div style="text-align: left;"></div>

<p><strong><span style="font-size:18px;">4、概率</span></strong></p>

<p>概率部分主要讲解了如下几个部分:</p>

<ul>
        <li>概率论公理</li>
        <li>随机变量</li>
        <li>处理多个随机变量</li>
        <li>联合概率</li>
        <li>条件概率</li>
        <li>贝叶斯定理</li>
        <li>边际化</li>
        <li>独立性</li>
</ul>

<p>以上都是数学中学习过的概率统计的知识,在后边用到的时候再回过头来详细研究</p>

<p>现在研究着实太抽象和枯燥。</p>

<p>&nbsp;</p>

<p>以上就是第二章预备知识的全部内容,相信有了这些数学基础,对后面的深度学习会有非常大的帮助。</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

hellokitty_bean 发表于 2024-9-7 19:28

<p>盯紧Wit,跟着Wit读一读。。。。。。。。。。。。。。。<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/loveliness.gif" width="48" /></p>

<p>&nbsp;</p>

xinmeng_wit 发表于 2024-9-8 18:35

hellokitty_bean 发表于 2024-9-7 19:28
盯紧Wit,跟着Wit读一读。。。。。。。。。。。。。。。

&nbsp;

<p>感谢关注</p>

hellokitty_bean 发表于 2024-9-8 18:56

xinmeng_wit 发表于 2024-9-8 18:35
感谢关注

<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/loveliness.gif" width="48" />ha.......................</p>

<p>希望不要有压力。。。。。。。。。。。。。</p>

xinmeng_wit 发表于 2024-9-12 21:22

hellokitty_bean 发表于 2024-9-8 18:56
ha.......................

希望不要有压力。。。。。。。。。。。。。

<p>亚历山大</p>

nmg 发表于 2024-9-14 16:53

xinmeng_wit 发表于 2024-9-12 21:22
亚历山大

<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/lol.gif" width="48" />有压力就有动力</p>
页: [1]
查看完整版本: 《动手学深度学习(PyTorch版)》1、预备知识