动手学习深度学习——读书笔记(1)

动手学习深度学习——读书笔记(1)

线性回归,Softmax,多层感知机,文本预处理,语言模型,循环神经网络基础等部分知识点总结

一直都有拜读《动手学习深度学习》的欲望,无奈总是心里说想要,身体又很诚实。最近由于全民战“疫”,只能天天宅在家里,为了不荒废学习报名参加了Datawhale联合博禹教育,上交大,和鲸科技和亚马逊AWS打造的“动手学习深度学习”的AI公益训练营。借此机会,好好的读读《动手学习深度学习》这本书。同时,本次公开课选用pytorch来讲解《动手学习深度学习》中的知识点,也借此好好学学pytorch框架,充实一下自己的机器学习和深度学习武器库。

本读书笔记的目的主要是记录学习过程中掌握的一些新的知识点和编程技巧,第一部分的学习中,主要的收获包括两点:1.torch.gather函数的使用; 2.使用torch的tensor.backward()函数计算梯度时,backward函数只能作用在标量值,在之前的pytorch学习中并未注意这个细节。由于在实际应用中,一般不需要自己实现交叉熵损失函数,都是使用pytorch自带的类来实现交叉熵损失,所以很少会用到gather函数。以下是torch.gather函数的具体的使用方法:

y_pred=torch.tensor([[0.1,0.2,0.3], [0.2,0.3,0.5], [0.3,0.35,0.35]])
y_true=torch.tensor([1,0,1])
y_pred.gather(1,y_true.view(-1, 1))

上述代码的输出为:

tensor([[0.2000],
        [0.2000],
        [0.3500]])

gather函数的详细参数列表可以参考pytorch的官方文档,其参数最重要的主要就是前两个,第一个参数表示索引的维度,第二个参数是一个索引值列表。在我们的例子中,y_true中存放的是索引值,y_pred是要进行索引的张量,我们索引的维度是"1",也就是按列索引。所以y_pred.gather(1,y_true.view(-1, 1)) 的输出结果为y_pred中第一行元素 [0.1,0.2,0.3] 中的第2个元素0.2(对应y_true中的第一个元素"1"),y_pred第二行元素 [0.2,0.3,0.5] 中的第1个元素0.2(对应y_true中的第二个元素"0"),y_pred第三行元素 [0.3, 0.35, 0.35]中的第2个元素0.35(对应y_true中的第3个元素"1")。

gather函数使用中的坑:第二个参数也必须是张量(也即是本例中的 y_true);y_pred和y_true必须有相同的秩,在本例中y_pred为3行3列(秩为2),所以y_true必须被转换为3行1列(秩为2,也即y_true.view(-1, 1))。

你可能感兴趣的:(pytorch那些事)