Softmax回归的从零实现


在这个函数中通过cross_entropy更新的参数是W,和b吗?
最后训练好的模型的参数是W和b吗?

是的,只有W和b定义的时候是requires_grad=True

我的理解是这里在更新前还是更新后计算指标并没有那么重要,因为每个batch对模型参数的更新都比较小,尤其是在大型数据集中。因此只要整体上展现出损失函数的趋势即可。

def predict_ch3(net, test_iter, n=6): #@save
“”“预测标签(定义见第3章)。”""
for X, y in test_iter:
break
hi,i don not understand why you ues break ?

这里我理解是[0,2]里面是编码里面1的index,[0,2]对应的就是[[1,0,0],[0,0,2]]。感觉可以类比稀疏矩阵的存储

  1. 在本节中,我们直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题?提示:尝试计算 \exp(50) 的大小。
    如果网络参数初始化不恰当,或者输入有数值较大的噪音,基于数学定义的softmax运算可能造成溢出(结果超过long类型的范围)

  2. 本节中的函数 cross_entropy 是根据交叉熵损失函数的定义实现的。这个实现可能有什么问题?提示:考虑对数的值域。
    y_hat中若某行最大的值也接近0的话,loss的值会超过long类型范围。

  3. 你可以想到什么解决方案来解决上述两个问题?
    设定一个阈值,使得loss处于long类型能表达得范围内。

  4. 返回概率最大的标签总是一个好主意吗?例如,医疗诊断场景下你会这样做吗?
    返回最大概率标签不总是个好主意。

  5. 假设我们希望使用softmax回归来基于某些特征预测下一个单词。词汇量大可能会带来哪些问题?
    词汇量大意味着class的类别很多,这容易带来两个问题。一是造成较大的计算压力(矩阵计算时间复杂度O(n^2)。 二是所有的单词所得概率容易很接近0,单词间概率差别不大,很难判断应该输出哪个结果。

evaluate_accuracy(net, test_iter)

这一句我运行后有报错…但我check了前面的函数都没有问题,请问有人有什么思路吗?另外请问这里的net和test_iter是什么啊?不是没有定义这两个变量吗


RuntimeError Traceback (most recent call last)
in
----> 1 evaluate_accuracy(net, test_iter)

in evaluate_accuracy(net, data_iter)
4 metric = Accumulator(2)
5 for X, y in data_iter:
----> 6 metric.add(accuracy(net(X), y), y.numel())
7 return metric[0] / metric[1]

in net(X)
1 def net(X):
----> 2 return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) + b)

RuntimeError: shape ‘[-1, 784]’ is invalid for input of size 131072

image
训练的时候使用d2l.Animator只出现类似 <Figure size 350x250 with 1 Axes>提示,并且只输出了最后结果图片,没有出现动画效果,应该怎么解决呢?

程序运行不了,哪位大神帮助看一下。我完全照搬这节课里面的代码,但是图画不出来: