[torch]criterion/maskzero

require 'nn'
require 'rnn'

maxzero = 1
if maxzero == 1 then
        y_ = torch.Tensor{{1,5,2},{0,5,2},{0,0,0}}
        y = torch.Tensor{{2,3,1},{0,5,4},{0,0,0}}
        y = torch.Tensor{{2,3,1},{0,5,4},{1,1,1}}
else
        y_ = torch.Tensor{{1,5,2},{0,5,2}}
        y = torch.Tensor{{2,3,1},{0,5,4}}
end
print(y_,y)

c1 = nn.MSECriterion()
c2 = nn.MaskZeroCriterion(nn.MSECriterion(),1)
o1 = c1:forward(y_,y)
o2 = c2:forward(y_,y)
print(o1,o2)

c3 = nn.DistKLDivCriterion()
c4 = nn.MaskZeroCriterion(nn.DistKLDivCriterion(),1)
o3 = c3:forward(y_,y)
o4 = c4:forward(y_,y)
print(o3,o4)

if maxzero == 1 then
        y_ =  torch.Tensor{{-1.20397280433,-2.30258509299,-0.51082562376},{-2.30258509299,-0.22314355131,-2.30258509299},{0,0,0}} --{log0.3,log0.1,log0.6},{log0.1,log0.8,log0.1}
        y =  torch.Tensor{3,2,3}
else
        y_ =  torch.Tensor{{-1.20397280433,-2.30258509299,-0.51082562376},{-2.30258509299,-0.22314355131,-2.30258509299}}
        y = torch.Tensor{3,2}
end
c5 = nn.ClassNLLCriterion()
c6 = nn.MaskZeroCriterion(nn.ClassNLLCriterion(),1)
o5 = c5:forward(y_,y)
o6 = c6:forward(y_,y)
print(o5,o6)

你可能感兴趣的:(torch)