【深度学习】日常笔记5

[a + float(b) for a, b in zip([0.0, 0.0], (1.0, 2))]
# zip() 函数会将输入的多个序列按位置打包成元组,因此最终得到的是一个迭代器,其中的每个元素都是以第 i 列为基准的元组
# zip()的结果不准确的说是:(0.0, 1.0) (0.0, 2)
#
然后新的结果列表中的每个元素都是通过计算 a + float(b)
#
在第一个元组 (0.0, 1.0) 中,a 0.0b 1.0,所以 a+float(b) 的结果是 1.0。在第二个元组 (0.0, 2) 中,a 0.0b 2,所以 a+float(b) 的结果是 2.0。因此,最终得到的列表是 [1.0, 2.0]

notebook输出为:[1.0, 2.0]

# 使PyTorch内置的优化器和损失函数
updater.zero_grad() # 将优化器对象中的梯度清零, 避免上个batch的梯度对此batch梯度产生影响
l.mean().backward() # 自动计算损失函数关于模型参数的梯度,并将梯度存储在 PyTorch 的张量(Tensor)中
updater.step() # 利用计算得到的梯度来更新模型参数, 以达到减小损失函数值的目的

Lambda函数是一种匿名函数,它可以在Python中快速定义一个简单的函数。Lambda函数可以看作是一种临时性的函数,用于需要进行一些简单操作的场合,而不需要定义一个完整的函数。

Lambda函数被称为“匿名函数”,是因为它们没有被赋予一个特定的名称。相反,它们只是以关键字“lambda”开始,并紧随其后的是参数列表和表达式。由于它们没有明确的名称,所以也被称为匿名函数。

Python中,Lambda函数的一般语法形式为:

lambda arguments: expression

其中,arguments是参数列表,可以有多个参数,用逗号隔开;expression是一个表达式,用于定义Lambda函数的计算逻辑。

assert train_loss < 0.5, train_loss

assert是Python中的一个关键字,用于断言某个条件是否为真。当条件为假时,会抛出AssertionError异常,并打印出指定的错误信息。在这里,assert的作用是判断训练损失(train_loss)是否小于0.5,如果不满足条件就会抛出异常并打印出train_loss的值。这个语句通常用于调试程序,可以让开发者快速发现代码中的问题,并帮助其进行修复。

p125习题

1. 本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题?提⽰:尝试计算exp(50)的⼤⼩。

答:直接使用数学定义实现的softmax函数可能会存在数值稳定性问题,特别是当输入的数值较大时。在计算exp(x) 由于指数函数增长速度非常快,当 x 的值较大时,exp(x) 的值会变得非常大,超出计算机可以表示的最大范围,从而导致溢出错误(overflow)或不精确的结果。例如,计算 exp(50) 的大小为 5.18471×10215.18471×10^21,这个值已经超出了常见的浮点数表示范围。

为了避免这样的数值稳定性问题,在实际应用中,通常会采用一些数值稳定的技巧来实现softmax函数,例如将输入向量中的每个元素减去向量中的最大值,或者使用一些近似方法等。这些技巧可以有效地解决数值稳定性问题,并提高softmax函数的计算效率和准确性。

2. 本节中的函数cross_entropy是根据交叉熵损失函数的定义实现的。它可能有什么问题?提⽰:考虑对数的定义域。

答:交叉熵损失函数的定义涉及到对数运算,对数运算的定义域为正实数。因此,如果在模型训练过程中,出现预测概率为0的情况,即模型完全错误地预测了某个样本的类别,那么使用交叉熵损失函数就会遇到问题,因为在对数运算中,0是无意义的,对数值为0的情况没有定义,这会导致计算出错。

为了解决这个问题,通常需要在实际应用中对交叉熵损失函数进行一些修改,例如增加一个微小的修正项(特判),使得当预测概率为0时,对数运算可以正常计算而不会出现错误。或者采用其他的损失函数,如平方误差损失函数等。

4 . 返回概率最⼤的分类标签总是最优解吗?例如,医疗诊断场景下可以这样做吗?

答:当我们在进行分类时,通常会选择具有最高概率的类别标签作为预测结果。这是因为在许多场景中,该方法往往能够达到良好的性能。例如,在图像分类任务中,如果给定一张照片,我们可以使用一个深度学习模型来预测图片的内容,这样就可以得到一个最可能的类别标签。然而,在某些关键应用场景下,如医学诊断,我们不能仅依赖于最大概率进行分类。

假设我们正在处理一个医学诊断问题,其中模型需要确定某个病人是否患有某种疾病。在这种情况下,最大概率不一定始终是正确答案。由于误诊可能导致严重后果,例如延迟治疗或错误治疗,因此我们需要谨慎对待这种情况。我们需要考虑其他因素,例如患者的年龄、病史、症状等,以及该疾病可能带来的后果等。这些因素结合起来,可以帮助我们做出更加准确、可靠的决策。

因此,尽管最大概率在许多情况下是有效的,但在关键应用场景下,我们需要考虑更多的因素,并采用可靠的方法来进行分类。因为如果将一个病人误诊为健康人,则可能会延迟病人的治疗,导致病情恶化,这样的损失是很大的。

5. 假设我们使⽤softmax回归来预测下⼀个单词,可选取的单词数⽬过多可能会带来哪些问题?

答:在使用 softmax 回归来预测下一个单词时,可选取的单词数目过多可能会带来以下问题:

计算复杂度高:softmax 回归需要计算所有可能的类别标签的概率值,在类别数目很大时,计算量将变得非常庞大,导致训练和预测时间大大增加。

参数过多:如果可选取的单词数目较多,那么模型的参数也会相应地增加。这将使得模型的训练更加困难,并且会导致过拟合的情况出现。

稀疏性问题:在实际应用中,许多单词不太可能成为下一个单词,因此它们对应的权重将会是零。这将导致模型的稀疏性问题,影响模型的泛化能力和效果。

数据稀疏性:如果可选取的单词数目较多,那么每个单词在训练数据中出现的次数可能会变得非常少,从而使得训练数据变得稀疏。这将导致模型的表现不如期望。

因此,在实际应用中,我们通常会限制可选取的单词数目,以克服上述问题。例如,在自然语言处理中,我们可以使用截断词表的方法,只保留出现频率最高的单词。这样可以减少计算复杂度、模型参数和数据稀疏性等问题,并提高模型的泛化能力和效果。

猜你喜欢

转载自blog.csdn.net/qq_45732909/article/details/131362145