动手学深度学习2.6概率-笔记&练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。

本节教材地址:2.6. 概率 — 动手学深度学习 2.0.0 documentation (d2l.ai)

本节开源代码:...>d2l-zh>pytorch>chapter_preliminaries>probability.ipynb


概率

简单地说,机器学习就是做出预测。

根据病人的临床病史,我们可能想预测他们在下一年心脏病发作的概率。 在飞机喷气发动机的异常检测中,我们想要评估一组发动机读数为正常运行情况的概率有多大。 在强化学习中,我们希望智能体(agent)能在一个环境中智能地行动。 这意味着我们需要考虑在每种可行的行为下获得高奖励的概率。 当我们建立推荐系统时,我们也需要考虑概率。 例如,假设我们为一家大型在线书店工作,我们可能希望估计某些用户购买特定图书的概率。 为此,我们需要使用概率学。 有完整的课程、专业、论文、职业、甚至院系,都致力于概率学的工作。 所以很自然地,我们在这部分的目标不是教授整个科目。 相反,我们希望教给读者基础的概率知识,使读者能够开始构建第一个深度学习模型, 以便读者可以开始自己探索它。

现在让我们更认真地考虑第一个例子:根据照片区分猫和狗。 这听起来可能很简单,但对于机器却可能是一个艰巨的挑战。 首先,问题的难度可能取决于图像的分辨率。

不同分辨率的图像 (10 × 10, 20 × 20, 40 × 40, 80 × 80, 和 160 × 160 pixels)

如上图所示,虽然人类很容易以 160×160 像素的分辨率识别猫和狗, 但它在 40×40 像素上变得具有挑战性,而且在 10×10 像素下几乎是不可能的。 换句话说,我们在很远的距离(从而降低分辨率)区分猫和狗的能力可能会变为猜测。 概率给了我们一种正式的途径来说明我们的确定性水平。 如果我们完全肯定图像是一只猫,我们说标签 y 是"猫"的概率,表示为 P(y= "猫" ) 等于 1 。 如果我们没有证据表明 y= “猫”或 y=“狗”,那么我们可以说这两种可能性是相等的, 即P(y= "猫" ) =P(y= "狗" )=0.5 。 如果我们不十分确定图像描绘的是一只猫,我们可以将概率赋值为 0.5< P(y= "猫" ) <1 。

现在考虑第二个例子:给出一些天气监测数据,我们想预测明天北京下雨的概率。 如果是夏天,下雨的概率是0.5。

在这两种情况下,我们都不确定结果,但这两种情况之间有一个关键区别。 在第一种情况中,图像实际上是狗或猫二选一。 在第二种情况下,结果实际上是一个随机的事件。 因此,概率是一种灵活的语言,用于说明我们的确定程度,并且它可以有效地应用于广泛的领域中。

基本概率论

假设我们掷骰子,想知道看到1的几率有多大,而不是看到另一个数字。 如果骰子是公平的,那么所有六个结果 1,…,6 都有相同的可能发生, 因此我们可以说 1 发生的概率为 \frac{1}{6}

然而现实生活中,对于我们从工厂收到的真实骰子,我们需要检查它是否有瑕疵。 检查骰子的唯一方法是多次投掷并记录结果。 对于每个骰子,我们将观察到 1,…,6 中的一个值。 对于每个值,一种自然的方法是将它出现的次数除以投掷的总次数, 即此事件(event)概率的估计值。 大数定律(law of large numbers)告诉我们: 随着投掷次数的增加,这个估计值会越来越接近真实的潜在概率。 让我们用代码试一试!

首先,我们导入必要的软件包。

%matplotlib inline
import torch
from torch.distributions import multinomial
from d2l import torch as d2l

在统计学中,我们把从概率分布中抽取样本的过程称为抽样(sampling)。 笼统来说,可以把分布(distribution)看作对事件的概率分配, 稍后我们将给出的更正式定义。 将概率分配给一些离散选择的分布称为多项分布(multinomial distribution)。

为了抽取一个样本,即掷骰子,我们只需传入一个概率向量。 输出是另一个相同长度的向量:它在索引 i 处的值是采样结果中 i 出现的次数。

fair_probs = torch.ones([6]) / 6
multinomial.Multinomial(1, fair_probs).sample()

输出结果:

tensor([0., 0., 0., 1., 0., 0.])

在估计一个骰子的公平性时,我们希望从同一分布中生成多个样本。 如果用Python的for循环来完成这个任务,速度会慢得惊人。 因此我们使用深度学习框架的函数同时抽取多个样本,得到我们想要的任意形状的独立样本数组。

multinomial.Multinomial(10, fair_probs).sample()

输出结果:

tensor([1., 4., 1., 2., 0., 2.])

现在我们知道如何对骰子进行采样,我们可以模拟1000次投掷。 然后,我们可以统计1000次投掷后,每个数字被投中了多少次。 具体来说,我们计算相对频率,以作为真实概率的估计。

# 将结果存储为32位浮点数以进行除法
counts = multinomial.Multinomial(1000, fair_probs).sample()
counts / 1000  # 相对频率作为估计值

输出结果:

tensor([0.1890, 0.1470, 0.1560, 0.1610, 0.1610, 0.1860])

因为我们是从一个公平的骰子中生成的数据,我们知道每个结果都有真实的概率16, 大约是 0.167 ,所以上面输出的估计值看起来不错。

我们也可以看到这些概率如何随着时间的推移收敛到真实概率。 让我们进行500组实验,每组抽取10个样本。

counts = multinomial.Multinomial(10, fair_probs).sample((500,))
# size为(500, 6)
cum_counts = counts.cumsum(dim=0)
"""按列方向依次累加元素,后面一行的元素依次加上前一行的元素,获得截至某一组实验后,每个位置的总计数
    cum_counts的size为(500, 6)"""
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)
"""按行方向除以总样本数,得到每个位置的估计概率
    cum_counts.sum的size为(500, 1)
    estimates的size为(500, 6)"""

d2l.set_figsize((6, 4.5))
for i in range(6):
    d2l.plt.plot(estimates[:, i].numpy(), 
                 label=("P(die=" + str(i + 1) + ")"))
    # 绘制出每个位置500组实验的估计概率曲线
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();

每条实线对应于骰子的6个值中的一个,并给出骰子在每组实验后出现值的估计概率。 当我们通过更多的实验获得更多的数据时,这6条实体曲线向真实概率收敛。

概率论公理

在处理骰子掷出时,我们将集合 S= { 1,2,3,4,5,6 } 称为样本空间(sample space)结果空间(outcome space), 其中每个元素都是结果(outcome)事件(event)是一组给定样本空间的随机结果。 例如,“看到 5 ”({ 5 })和“看到奇数”({ 1,3,5 })都是掷出骰子的有效事件。 注意,如果一个随机实验的结果在 \mathcal{A} 中,则事件 \mathcal{A} 已经发生。 也就是说,如果投掷出3点,因为 3 ∈ { 1,3,5 },我们可以说,“看到奇数”的事件发生了。

概率(probability)可以被认为是将集合映射到真实值的函数。 在给定的样本空间 \mathcal{S} 中,事件 \mathcal{A} 的概率, 表示为 P(\mathcal{A}) ,满足以下属性:

  • 对于任意事件\mathcal{A},其概率从不会是负数,即 P(\mathcal{A}) ≥0 ;

  • 整个样本空间的概率为 1 ,即 P(\mathcal{S}) =1 ;

  • 对于互斥(mutually exclusive)事件(对于所有 i ≠ j 都有 \mathcal{A}_i\mathcal{A}_j=∅ )的任意一个可数序列 \mathcal{A}_1\mathcal{A}_2,… ,序列中任意一个事件发生的概率等于它们各自发生的概率之和,即 P(⋃i=1∞\mathcal{A}_i)=∑ i=1∞P(\mathcal{A}_i) 。

以上也是概率论的公理,由科尔莫戈罗夫于1933年提出。 有了这个公理系统,我们可以避免任何关于随机性的哲学争论; 相反,我们可以用数学语言严格地推理。 例如,假设事件 \mathcal{A}_1 为整个样本空间, 且当所有 i >1 时的 \mathcal{A}_i=∅ , 那么我们可以证明 P(∅)=0 ,即不可能发生事件的概率是 0 。

随机变量

在我们掷骰子的随机实验中,我们引入了随机变量(random variable)的概念。 随机变量几乎可以是任何数量,并且它可以在随机实验的一组可能性中取一个值。 考虑一个随机变量 X ,其值在掷骰子的样本空间 S ={ 1,2,3,4,5,6 }中。 我们可以将事件“看到一个 5 ”表示为{ X=5 }或 X=5 , 其概率表示为 P( { X=5 } ) 或 P(X=5) 。 通过 P(X=a) ,我们区分了随机变量XX可以采取的值(例如 a )。 然而,这可能会导致繁琐的表示。 为了简化符号,一方面,我们可以将P(X)表示为随机变量X上的分布(distribution): 分布告诉我们X获得某一值的概率。 另一方面,我们可以简单用P(a)表示随机变量取值a的概率。 由于概率论中的事件是来自样本空间的一组结果,因此我们可以为随机变量指定值的可取范围。 例如, P(1≤X≤3) 表示事件{ 1≤X≤3 }, 即{ X=1,2,or,3 }的概率。 等价地,P(1≤X≤3)表示随机变量X从{ 1,2,3 }中取值的概率。

请注意,离散(discrete)随机变量(如骰子的每一面) 和连续(continuous)随机变量(如人的体重和身高)之间存在微妙的区别。 现实生活中,测量两个人是否具有完全相同的身高没有太大意义。 如果我们进行足够精确的测量,最终会发现这个星球上没有两个人具有完全相同的身高。 在这种情况下,询问某人的身高是否落入给定的区间,比如是否在1.79米和1.81米之间更有意义。 在这些情况下,我们将这个看到某个数值的可能性量化为密度(density)。 高度恰好为1.80米的概率为0,但密度不是0。 在任何两个不同高度之间的区间,我们都有非零的概率。 在本节的其余部分中,我们将考虑离散空间中的概率。 连续随机变量的概率可以参考深度学习数学附录中随机变量 的一节。

处理多个随机变量

很多时候,我们会考虑多个随机变量。 比如,我们可能需要对疾病和症状之间的关系进行建模。 给定一个疾病和一个症状,比如“流感”和“咳嗽”,以某个概率存在或不存在于某个患者身上。 我们需要估计这些概率以及概率之间的关系,以便我们可以运用我们的推断来实现更好的医疗服务。

再举一个更复杂的例子:图像包含数百万像素,因此有数百万个随机变量。 在许多情况下,图像会附带一个标签(label),标识图像中的对象。 我们也可以将标签视为一个随机变量。 我们甚至可以将所有元数据视为随机变量,例如位置、时间、光圈、焦距、ISO、对焦距离和相机类型。 所有这些都是联合发生的随机变量。 当我们处理多个随机变量时,会有若干个变量是我们感兴趣的。

联合概率

第一个被称为联合概率(joint probability) P(A=a,B=b) 。 给定任意值 ab ,联合概率可以回答: A=aB=b同时满足的概率是多少? 请注意,对于任何 ab 的取值, P(A = a, B=b) \leq P(A=a)。 这点是确定的,因为要同时发生A=aB=bA=a 就必须发生,B=b 也必须发生(反之亦然)。因此, A=aB=b  同时发生的可能性不大于A=a或是 B=b单独发生的可能性。

条件概率

联合概率的不等式带给我们一个有趣的比率: 0 \leq \frac{P(A=a, B=b)}{P(A=a)} \leq 1 。 我们称这个比率为条件概率(conditional probability), 并用P(B=b \mid A=a)表示它:它是 B=b 的概率,前提是 A=a 已发生。

贝叶斯定理

使用条件概率的定义,我们可以得出统计学中最有用的方程之一: Bayes定理(Bayes' theorem)。 根据乘法法则(multiplication rule )可得到 P(A, B) = P(B \mid A) P(A)。 根据对称性,可得到 P(A, B) = P(A \mid B) P(B) 。 假设 P(B)>0 ,求解其中一个条件变量,我们得到

P(A \mid B) = \frac{P(B \mid A) P(A)}{P(B)}.

请注意,这里我们使用紧凑的表示法: 其中 P(A, B) 是一个联合分布(joint distribution)P(A \mid B) 是一个条件分布(conditional distribution)。 这种分布可以在给定值 A = a, B=b上进行求值。

边际化

为了能进行事件概率求和,我们需要求和法则(sum rule), 即 B 的概率相当于计算 A 的所有可能选择,并将所有选择的联合概率聚合在一起:

P(B) = \sum_{A} P(A, B),

这也称为边际化(marginalization)。 边际化结果的概率或分布称为边际概率(marginal probability) 或边际分布(marginal distribution)。

独立性

另一个有用属性是依赖(dependence)与独立(independence)。 如果两个随机变量 AB 是独立的,意味着事件 A 的发生跟 B 事件的发生无关。 在这种情况下,统计学家通常将这一点表述为 AB 。 根据贝叶斯定理,马上就能同样得到 P(A \mid B) = P(A) 。 在所有其他情况下,我们称� 和 � 依赖。 比如,两次连续抛出一个骰子的事件是相互独立的。 相比之下,灯开关的位置和房间的亮度并不是(因为可能存在灯泡坏掉、电源故障,或者开关故障)。

由于 P(A \mid B) = \frac{P(A, B)}{P(B)} = P(A) 等价于 P(A, B) = P(A)P(B), 因此两个随机变量是独立的,当且仅当两个随机变量的联合分布是其各自分布的乘积。 同样地,给定另一个随机变量 C 时,两个随机变量 AB 是条件独立的(conditionally independent), 当且仅当 P(A, B \mid C) = P(A \mid C)P(B \mid C)。 这个情况表示为 A \perp B \mid C

应用

我们实战演练一下! 假设一个医生对患者进行艾滋病病毒(HIV)测试。 这个测试是相当准确的,如果患者健康但测试显示他患病,这个概率只有1%; 如果患者真正感染HIV,它永远不会检测不出。 我们使用 D_1 来表示诊断结果(如果阳性,则为 1 ,如果阴性,则为 0 ), H 来表示感染艾滋病病毒的状态(如果阳性,则为1,如果阴性,则为0)。 在下表中列出了这样的条件概率。

条件概率为 P(D_1 \mid H):

注意,每列的加和都是1(但每行的加和不是),因为条件概率需要总和为1,就像概率一样。 让我们计算如果测试出来呈阳性,患者感染HIV的概率,即 P(H = 1 \mid D_1 = 1)。 显然,这将取决于疾病有多常见,因为它会影响错误警报的数量。 假设人口总体是相当健康的,例如, P(H=1) = 0.0015。 为了应用贝叶斯定理,我们需要运用边际化和乘法法则来确定

\begin{aligned} &P(D_1 = 1) \\ =& P(D_1=1, H=0) + P(D_1=1, H=1) \\ =& P(D_1=1 \mid H=0) P(H=0) + P(D_1=1 \mid H=1) P(H=1) \\ =& 1 × 0.0015 +0.01 × 0.9985 \\ =& 0.011485. \end{aligned}

因此,我们得到

\begin{aligned} &P(H = 1 \mid D_1 = 1)\\ =& \frac{P(D_1=1 \mid H=1) P(H=1)}{P(D_1=1)} \\ =& \frac{1 × 0.0015}{0.011485} \\ =& 0.1306 \end{aligned}.

换句话说,尽管使用了非常准确的测试,患者实际上患有艾滋病的几率只有13.06%。 正如我们所看到的,概率可能是违反直觉的。

患者在收到这样可怕的消息后应该怎么办? 很可能,患者会要求医生进行另一次测试来确定病情。 第二个测试具有不同的特性,它不如第一个测试那么精确, 如下表所示。

条件概率为 P(D_2 \mid H):

不幸的是,第二次测试也显示阳性。让我们通过假设条件独立性来计算出应用Bayes定理的必要概率:

\begin{aligned} &P(D_1 = 1, D_2 = 1 \mid H = 0) \\ =& P(D_1 = 1 \mid H = 0) P(D_2 = 1 \mid H = 0) \\ =& 0.01 × 0.03 \\ =& 0.0003, \end{aligned}

\begin{aligned} &P(D_1 = 1, D_2 = 1 \mid H = 1) \\ =& P(D_1 = 1 \mid H = 1) P(D_2 = 1 \mid H = 1) \\ =& 1 × 0.98 \\ =& 0.98. \end{aligned}

现在我们可以应用边际化和乘法规则:

\begin{aligned} &P(D_1 = 1, D_2 = 1) \\ =& P(D_1 = 1, D_2 = 1, H = 0) + P(D_1 = 1, D_2 = 1, H = 1) \\ =& P(D_1 = 1, D_2 = 1 \mid H = 0)P(H=0) + P(D_1 = 1, D_2 = 1 \mid H = 1)P(H=1)\\ =& 0.0003 × 0.9985 + 0.98 × 0.0015 \\ =& 0.00176955. \end{aligned}

最后,鉴于存在两次阳性检测,患者患有艾滋病的概率为

\begin{aligned} &P(H = 1 \mid D_1 = 1, D_2 = 1)\\ =& \frac{P(D_1 = 1, D_2 = 1 \mid H=1) P(H=1)}{P(D_1 = 1, D_2 = 1)} \\ =& \frac{0.98 × 0.0015}{0.00176955} \\ =& 0.8307. \end{aligned}

也就是说,第二次测试使我们能够对患病的情况获得更高的信心。 尽管第二次检验比第一次检验的准确性要低得多,但它仍然显著提高我们的预测概率。

期望和方差

为了概括概率分布的关键特征,我们需要一些测量方法。 一个随机变量 X期望(expectation,或平均值(average))表示为

E[X] = \sum_{x} x P(X = x).

当函数 f(x) 的输入是从分布 P 中抽取的随机变量时,f(x) 的期望值为

E_{x \sim P}[f(x)] = \sum_x f(x) P(x).

在许多情况下,我们希望衡量随机变量X与其期望值的偏置。这可以通过方差来量化

\mathrm{Var}[X] = E\left[(X - E[X])^2\right] = E[X^2] - E[X]^2.

方差的平方根被称为标准差(standard deviation)。 随机变量函数的方差衡量的是:当从该随机变量分布中采样不同值X时, 函数值偏离该函数的期望的程度:

\mathrm{Var}[f(x)] = E\left[\left(f(x) - E[f(x)]\right)^2\right].

小结

  • 我们可以从概率分布中采样。

  • 我们可以使用联合分布、条件分布、Bayes定理、边缘化和独立性假设来分析多个随机变量。

  • 期望和方差为概率分布的关键特征的概括提供了实用的度量形式。

练习

1. 进行 m=500 组实验,每组抽取 n=10 个样本。改变 mn ,观察和分析实验结果。

解: 

固定m不变,n增大时,收敛速度变大,越快收敛至真实概率,反之亦然;

固定n不变,m增大时,结果越接近真实概率,反之亦然。

counts = multinomial.Multinomial(10, fair_probs).sample((500,))
cum_counts = counts.cumsum(dim=0)
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)

d2l.set_figsize((6, 4.5))
for i in range(6):
    d2l.plt.plot(estimates[:, i].numpy(), 
                 label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.gca().set_ylim(0, 0.4, 0.05)
d2l.plt.legend();

counts = multinomial.Multinomial(100, fair_probs).sample((500,))
cum_counts = counts.cumsum(dim=0)
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)

d2l.set_figsize((6, 4.5))
for i in range(6):
    d2l.plt.plot(estimates[:, i].numpy(), 
                 label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.gca().set_ylim(0, 0.4, 0.05)
d2l.plt.legend();

counts = multinomial.Multinomial(10, fair_probs).sample((5000,))
cum_counts = counts.cumsum(dim=0)
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)

d2l.set_figsize((6, 4.5))
for i in range(6):
    d2l.plt.plot(estimates[:, i].numpy(), 
                 label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.gca().set_ylim(0, 0.4, 0.05)
d2l.plt.legend();

2. 给定两个概率为 P(A) 和 P(B) 的事件,计算 P(A\bigcup B)P(A\bigcap B ) 的上限和下限。(提示:使用友元图来展示这些情况。)

解:

max(P(A), P(B)) ≤ P(A∪B) ≤ P(A) + P(B) (概率的上限)

0 ≤P(A∩B) ≤ min(P(A), P(B)) (概率的上限)

import matplotlib.pyplot as plt
from matplotlib_venn import venn2, venn2_circles

def calculate_prob_bounds(prob_A, prob_B):
    prob_union_upper = min(prob_A + prob_B, 1.0)  # 计算并集概率的上限
    prob_union_lower = max(prob_A, prob_B)  # 计算并集概率的下限

    prob_intersection_upper = min(prob_A, prob_B)  # 计算交集概率的上限
    prob_intersection_lower = 0.0  # 计算交集概率的下限

    # 绘制友韦恩图
    venn2(subsets=(prob_A, prob_B, prob_intersection_upper), set_labels=('A', 'B'))

    # 添加圆环
    venn2_circles(subsets=(prob_A, prob_B, prob_intersection_upper))

    plt.title("Venn Diagram")
    plt.show()

    return (prob_union_upper, prob_union_lower), (prob_intersection_upper, prob_intersection_lower)

# 示例:P(A) = 0.6, P(B) = 0.4
prob_A = 0.6
prob_B = 0.4

union_bounds, intersection_bounds = calculate_prob_bounds(prob_A, prob_B)
print(" (A∪B) (Upper, Lower):", union_bounds)
print(" (A∩B) (Upper, Lower):", intersection_bounds)

(A∪B) (Upper, Lower): (1.0, 0.6)

(A∩B) (Upper, Lower): (0.4, 0.0)

3. 假设我们有一系列随机变量,例如 ABC ,其中B 只依赖于 A,而C只依赖于B,能简化联合概率 P(A, B, C) 吗?(提示:这是一个马尔可夫链。)

解:

C 只依赖于B,可知:P(C \mid A, B) = P(C \mid B)

故: P(A, B, C) = P(C \mid A, B)P(A, B) = P(C \mid B)P(B \mid A)P(A)

4. 在 应用中,第一个测试更准确。为什么不运行第一个测试两次,而是同时运行第一个和第二个测试?

解: 虽然第一个测试更准确,但进行两次结果相同。而第二个测试具有不同的特征,可以排除单一测试的系统性误差,增加测试结果的多样性,从而提供结果的可靠性和鲁棒性,使得最终结果更为可靠。

  • 39
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
动手深度学习是理解和掌握深度学习的重要途径之一。PyTorch作为一个开源的深度学习框架,具有易用性和灵活性,适合初者入门。下面我将介绍一些练习方法,帮助大家动手PyTorch。 首先,PyTorch的基础知识是必要的。可以通过阅读官方文档、教程和书籍等方式PyTorch的基本概念、操作和函数等知识点,了解它的使用方法和语法规则。 其次,可以通过实践来深入理解和掌握PyTorch。可以选择一些经典的深度学习模型,如卷积神经网络(CNN)、递归神经网络(RNN)等,利用PyTorch的功能实现这些模型。可以从模型的搭建、训练和评估等方面入手,逐步掌握PyTorch的使用方法和技巧。 此外,实践过程中可以使用一些已有的深度学习数据集,如MNIST手写数字数据集、CIFAR-10图像分类数据集等,用于模型的训练和测试。可以通过探索不同数据集的使用方法,了解数据预处理、批量处理和加载等操作。 同时,还可以PyTorch中的一些常用模块和函数,如优化器(Optimizer)、损失函数(Loss Function)等,了解它们的作用和使用方法,并在实践中尝试不同的组合和调节,优化模型的训练效果。 最后,还可以参与一些开源项目或者比赛,与其他开发者共同习和交流。可以从官方论坛、GitHub等平台获取一些有趣的项目,尝试运行和优化,加深对PyTorch的理解和运用能力。 总之,动手PyTorch的方式是最有效的方式之一。通过实践,可以深入理解深度学习的原理和PyTorch的使用方法,提升自己的编程能力和解决实际问题的能力。希望以上的建议对大家有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scdifsn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值