nn.CrossEntropyLoss()
简洁的注意事项:input维度要求是2D tensor, 形状 (N,C) C 是类别的数量
target维度1D tensor,形状(N) N是mini-batch的大小,0 <= targets[i] <= C-1
class torch.nn.CrossEntropyLoss(weight=None, size_average=True)[source]
此标准将LogSoftMax和NLLLoss集成到一个类中。
当训练一个多类分类器的时候,这个方法是十分有用的。
weight(tensor): 1-D tensor,n个元素,分别代表n类的权重,如果你的训练样本很不均衡的话,是非常有用的。默认值为None。
调用时参数:
input : 包含每个类的得分,2-D tensor,shape为 batch*n
target: 大小为 n 的 1—D tensor,包含类别的索引(0到 n-1)。
Loss可以表述为以下形式:
loss(x,class)=−logexp(x[class])∑jexp(x[j])) =−x[class]+log(∑jexp(x[j]))
当weight参数被指定的时候,loss的计算公式变为:
loss(x,class)=weights[class]∗(−x[class]+log(∑jexp(x[j])))
计算出的loss对mini-batch的大小取了平均。
形状(shape):
Input: (N,C) C 是类别的数量
Target: (N) N是mini-batch的大小,0 <= targets[i] <= C-1
torch.div(tensor1, tensor2)
注意事项: tensor1 tensor2的维度必须相同,对应项 相除
数据集读入后最好shuffle一下,否则train loss 可能为输出为nan值
举个栗子:
from sklearn.utils import shuffle
df = pd.read_csv(..)
df = shuffle(df, random_state=0)