torch.log_softmax与torch.nn.functional.log_softmax的区别(dropout,relu,crossentropy,log_softmax)

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 是函数,直接以输入作为参数。

你可能感兴趣的:(深度学习,pytorch,python)