Softmax回归的从零实现

如果使用pycharm的话,需要调用d2l.plt.show()来显示图像,但是默认主程序和显示图像的程序共用一个线程,如果调用d2l.plt.show()显示图像的话,主程序就会一直等待直到关闭图像窗口而不会继续运行训练函数。所以如果想实现图像随训练结果更新而更新的话需要自己创建多个线程,一个用来显示图像,一个用来跑训练函数。我认为如果不纠结实现图像实时更新的效果的话,可以在train_ch3函数的最后添加d2l.plt.show(),即显示最终绘制的图像,来观察效果即可(图像会在跑完10个epoch后才会出现,需要等待训练函数跑完)。

accuracy方法中的y_hat.argmax(axis=1),这个argmax方法没有axis参数和可变参数,应该改为y_hat.argmax(dim=1)。

只需要把add()方法末尾那两句改成

# 删除
display.display(self.fig)
display.clear_output(wait=True)

# 添加
plt.figure(self.fig)
plt.show()

这样每次调用add的时候都会显示这个时候的数据图。
调用了三次add方法,输出每次的图片。

本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题?

在 Python 中 float 类型基于 C 语言中的 double 类型。我们定义的softmax函数由于分母和分子中都存在指数函数,因此有可能计算过程中会产生过于巨大的数加和的情况,从而导致溢出和无法求解。

本节中的函数cross_entropy是根据交叉熵损失函数的定义实现的。它可能有什么问题?

交叉熵损失包含对概率的对数操作。如果输入接近 0 或 1,直接取对数会导致数值不稳定(趋向于负无穷或正无穷)。

请想一个解决方案来解决上述两个问题

softmax中可以在指数中减去最大数,这样能保证一般情况下不会有特别大的数字。交叉熵则是设定一个0-1的子区间,防止溢出。

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

不一定,因为模型本身训练效果就是不保证准确的,可以按照各自的最终数值概率选取一个标签。我认为医疗情境下不可以这么做,因为医疗情景需要排除大概率患病可能,因此输出概率前几的病症更符合实际需求。

假设我们使用softmax回归来预测下一个单词,可选取的单词数目过多可能会带来哪些问题?

不可避免的导致训练效果很差,因为概率总和为1,那么数目特别多就意味着很多单词几乎都是零概率,白白浪费了计算资源。

这个是说你这个jupyter notebook所在的文件夹的上一级文件夹里要有个data文件夹,然后数据会下载到那里,但是你没有权限在新建data文件夹或者操作这个文件夹,可以把…/data改成./data,也就是jupyter notebook所在的文件夹里直接建一个data文件夹

为什么我从d2l.torch导入不了 train_epoch_ch3以及一些其他已经saved的包
AttributeError: module ‘d2l.torch’ has no attribute ‘train_epoch_ch3’. Did you mean: ‘train_batch_ch13’?
我在d2l.torch文件离可以看到这些函数,但是却导入不了

我也遇到了一样的问题,请问你知道如何解决了吗