多层感知机的从零实现

好的,我用的jupyter 没法debug,不过很感谢你的解答

在使用3.6 的custom crossentropy function 时候 cost matrix 会出现大量nan, 猜测是梯度爆炸导致上溢,是不是relu + cross entrophy 所导致,但是pytorch.crossentrophy却很好的deal with nan

这个是什么问题

我觉得你检查一下你的参数初始化设置的时候是不是有问题。

我也是遇到这个问题,请问应该怎么解决呢?

我这是读取数据的进程太大的原因,把load_data_fashion_mnist函数从库里复制出来改改,把num_workers改成0或者1试试,我这样解决了,沐神的程序给的是4,可能会是我电脑不大行了 :smile:

我查阅资料发现可以修改loss函数的输出维度,把nn.CrossEntropyLoss()里的内容去掉,就可以啦

3 Likes

要用l.sum.backward,不影响求梯度

所以看不见是正确的吗,上面有的看得见是为什么啊

loss=nn.CrossEntropyLoss(reduction=‘none’)

不用卸载 pip install --upgrade d2l就好了 现在已经到了0.17.5了

你是对的,我之前学着去源代码里面改来改去总是搞不对,用你的这两行代码一下就搞定了 :smiley:

最后不是应该有个softmax的吗 ,请问这里是加了 还是没加


向各位请教一下这个问题应该如何解决。

第二个问题:应该是更改安装的d2l库中的torch.py文件吧
我的位置在C:\Users\microsate\AppData\Roaming\Python\Python39\site-packages\d2l

image
为啥我做了跟你一样的test4,增加了64个隐藏单元的第二个层,结果不一样呢?

num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784, 10, 256, 64

W1 = nn.Parameter(torch.randn(
    num_inputs, num_hiddens1, requires_grad=True) * 0.01)
b1 = nn.Parameter(torch.zeros(num_hiddens1, requires_grad=True))

W2 = nn.Parameter(torch.randn(
    num_hiddens1, num_hiddens2, requires_grad=True) * 0.01)
b2 = nn.Parameter(torch.zeros(num_hiddens2, requires_grad=True))

W3 = nn.Parameter(torch.randn(
    num_hiddens2, num_outputs, requires_grad=True) * 0.01)
b3 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))


params = [W1, b1, W2, b2, W3, b3]

看评论区,出这个问题DataLoader worker (pid(s) 27196, 9688, 1548, 28164) exited unexpectedly。用这个train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
test_iter.num_workers = 0
train_iter.num_workers = 0

出这个问题RuntimeError:grad。将loss = nn.CrossEntropyLoss() #书中loss = nn.CrossEntropyLoss(reduction=‘none’)

实测自己已经解决

You should set the param “reductoin” in CrossEntropy with “mean”