MINIST-sys.exit()-Normalize()-log_softmax()-F.nll_loss(output, target)-enumerate-torch.max()keepdim

1.

相当于设置断点,来调试,让程序终止在这里,他的上面可以写自己的测试代码。

2.

这里第一点疑问就是为什么括号里面有逗号。有疑问的话先思考这最核心一个括号加一个数字,那就在终端打印一下(打印一个括号里面没有逗号的,再打印一下括号里面有逗号的),看一下类型,如果有差别,就是逗号的作用了。调试一下。

可以看出(521)是int,(521,,)就是元组了。

第二点这两个数字的来源和含义。含义是标准化,左边是均值,右边是标准差。数字减去均值除以标准差。

https://blog.csdn.net/zjc910997316/article/details/93465763

https://jianzhuwang.blog.csdn.net/article/details/104272600

https://blog.csdn.net/bublebee/article/details/88993467?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs#commentBox

3.

log_softmax

softmax的结果上再多做一次log运算,这个log就是数值上的log。不要害怕。

https://blog.csdn.net/hao5335156/article/details/80607732

softmax 和为1:

 逐列和为1即一行和为1,因为是行向量,所以一行是一个样本的输出。

4.

F.nll_loss(output, target)

5.

enumerate

疑问 训练集中

但是测试集中是

为什么测试集中没有enumerate?训练集有。正确思路是查看enumerate的用法。

https://www.cnblogs.com/xiaoboge/p/9404000.html

enumerate是枚举,会返回索引,在需要索引时返回它,训练集需要,测试集不需要,所以测试集没有,如果测试集加上会出现错误,因为data返回接收的是索引值,因此是Int类型,本来应该返回的是张量类型。

打印一下data看看它是啥,看它是0确实是索引值。自然之后都不能继续了。

由此可以把代码改成下面图片这样子就没问题了,因为可以找一个接受索引。不过test用不到,不如直接不用enumerate()函数了。

在pycharm测试一下enumerate用法:

6. torch,max中的keppdim用法,保持输入维度,不然降维。 还是二维向量。

https://blog.csdn.net/zylooooooooong/article/details/112576268

猜你喜欢

转载自blog.csdn.net/weixin_42133481/article/details/114286930