1、平时使用pytorch框架经常看到相同的方法。 torch.nn 和torch.nn.functional 都可以进行dropout,relu,crossentropy,log_softmax等操作。但是二者也存在区别,functional 中是直接用函数去操作要执行的tensor,而nn是先创建一个对象,用对象去操作要执行的tensor。
2、使用说明,以求解ce损失为例
import torch
x = torch.rand(2, 3)
y = torch.rand(2, 3)
# 使用torch.nn.functional.cross_entropy(),直接使用该函数,直接传入实参。
loss_ce1 = torch.nn.functional.cross_entropy(x, y)
# 使用torch.nn.CrossEntropyLoss(),实例化该类,再传入实参。
ce2 = torch.nn.CrossEntropyLoss()
loss_ce2 = ce2(x, y)
3、
nn.Softmax,nn.LogSoftmax, nn.CrossEntropyLoss() 是构建了相关的对象,获取最终的值需要对象去调用输入。
F.softmax, F.log_softmax,F.Cross_entropy 是函数,直接以输入作为参数。