1. 交叉熵
根据pytorch的文档
根据而mxnet的文档
二者只是少了一个求和的结果。
但实际上二者做softmax的轴是不一样的
from torch import nn
import torch
from mxnet import nd
from mxnet.gluon import loss as gloss
import numpy as np
np.random.seed(0)
input_data = np.random.rand(3, 2, 2)
target_data = np.array([
[0, 1],
[1, 0],
[0, 0],
])
pytorch_loss = nn.CrossEntropyLoss(
reduction='none'
)
mxnet_loss = gloss.SoftmaxCrossEntropyLoss()
print('================pytorch==================')
input = torch.FloatTensor(input_data)
target = torch.FloatTensor(target_data).long()
######################## 注意这里 ##############################
output = pytorch_loss(input.permute(0, 2, 1), target)
print(output.mean(axis=1))
######################## 注意这里 ##############################
print('================mxnet==================')
input = nd.array(input_data)
target = nd.array(target_data)
output = mxnet_loss(input, target)
print(input.shape)
print(target.shape)
print(output)
2. L1loss
Mxnet的文档
pytorch的文档
from torch import nn
import torch
from mxnet import nd
from mxnet.gluon import loss as gloss
import numpy as np
np.random.seed(0)
input_data = np.random.rand(2, 3, 5)
target_data = np.array([[
[1, 0, 0.2, 0.9, 0.12],
[1, 0, 0.4, 0.1, 0.32],
[1, 0, 0.5, 0.3, 0.52]
], [
[1, 0, 0.2, 0.9, 0.12],
[1, 0, 0.4, 0.1, 0.32],
[1, 0, 0.5, 0.3, 0.52]
]
])
pytorch_loss = nn.L1Loss(
reduction='none'
)
mxnet_loss = gloss.L1Loss()
input = torch.FloatTensor(input_data)
target = torch.FloatTensor(target_data)
output = pytorch_loss(input, target)
######################## 注意这里 ##############################
print(output.mean(axis=2).mean(axis=1))
######################## 注意这里 ##############################
# print(output)
print('===============mxnet===================')
input = nd.array(input_data)
target = nd.array(target_data)
output = mxnet_loss(input, target)
print(input.shape)
print(target.shape)
print(output)