There is a bug in CosineEmbeddingLoss in pytorch 0.3.0, i checked and see this problem is solved in newer versions but i cannot switch to it right not.
In the following code i get an error:
import torch.nn as nn
import torch
from torch.autograd import Variable
import torch.nn.functional as F


input1 = Variable(torch.rand(1,3,10,10)).cuda()
input2 = Variable(torch.rand(1,3,10,10)).cuda()
net  = nn.Conv2d(3,3, 1).cuda()
input1 = net(input1)

y = Variable(torch.ones(input1.size(0),1,input1.size(2),input1.size(3))).cuda()

loss = torch.nn.CosineEmbeddingLoss()
output = loss(input1, input2, y)
print(output)
output.backward()

RuntimeError: The expanded size of the tensor (10) must match the existing size (100) at non-singleton dimension 2. at /opt/conda/conda-bld/pytorch_1512387374934/work/torch/lib/THC/generic/THCTensor.c:323

so im trying to compute the similarity loss in another way.
does the following loss function make any sense?

input1 = Variable(torch.rand(1,3,10,10)).cuda()
input2 = Variable(torch.rand(1,3,10,10)).cuda()
net  = nn.Conv2d(3,3, 1).cuda()
input1 = net(input1)

y_L1 = Variable(torch.ones(input1.size(2),input1.size(3))).cuda()

Cosine_Similarity = F.cosine_similarity(input1, input2)
loss = nn.L1Loss()
output = loss(Cosine_Similarity, y_L1)


print(output)
output.backward()