nn.CrossEntropyLoss() 函数是 PyTorch 中用于计算交叉熵损失的函数。
其中 reduction 参数用于控制输出损失的形式。
当 reduction='none' 时,函数会输出一个形状为 (batch_size, num_classes) 的矩阵,表示每个样本的每个类别的损失。
当 reduction='sum' 时,函数会对矩阵求和,输出一个标量,表示所有样本的损失之和。
当 reduction='elementwise_mean' 时,函数会对矩阵求平均,输出一个标量,表示所有样本的平均损失。
在您的例子中,在使用 reduction='none' 时无法训练,是因为需要一个标量来表示整个训练集的损失,而不是一个矩阵。
而使用 reduction='sum' 时,会报错“AssertionError: 761.4056615234375”,可能是因为在某个时刻,损失值变得非常大,导致网络无法继续训练。
只有在使用 reduction='elementwise_mean' 时,将矩阵求平均,使得损失值保持在一个可接受的范围内,网络才能继续训练。
在选择 reduction 时,需要根据具体情况来决定使用哪种方式来计算损失,以保证网络能够正常训练。