Tensorflow Pytork中tf.nn.softmax\u cross\u entropy\u与logits的等价物是什么?

Tensorflow Pytork中tf.nn.softmax\u cross\u entropy\u与logits的等价物是什么?,tensorflow,deep-learning,pytorch,Tensorflow,Deep Learning,Pytorch,我试图用pytorch复制一个用tensorflow编写的代码。我在tensorflow中遇到了一个损失函数,softmax\u cross\u entropy\u和_logits。我在pytorch中寻找它的等价物,我发现torch.nn.multi-labelsoftmarginloss,虽然我不太确定它是正确的函数。而且我不知道当我使用这个损失函数和网络末端的无relu层时,如何测量我的模型的准确性这是我的代码: # GRADED FUNCTION: compute_cost def

我试图用pytorch复制一个用tensorflow编写的代码。我在tensorflow中遇到了一个损失函数,softmax\u cross\u entropy\u和_logits。我在pytorch中寻找它的等价物,我发现torch.nn.multi-labelsoftmarginloss,虽然我不太确定它是正确的函数。而且我不知道当我使用这个损失函数和网络末端的无relu层时,如何测量我的模型的准确性这是我的代码:


# GRADED FUNCTION: compute_cost 

def compute_cost(Z3, Y):

    loss = torch.nn.MultiLabelSoftMarginLoss()    
    return loss(Z3,Y)


def model(net,X_train, y_train, X_test, y_test, learning_rate = 0.009,
          num_epochs = 100, minibatch_size = 64, print_cost = True):

    optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
    optimizer.zero_grad()

    total_train_acc=0

    for epoch in range(num_epochs):
        for i, data in enumerate(train_loader, 0):
            running_loss = 0.0

            inputs, labels = data

            inputs, labels = Variable(inputs), Variable(labels)

            Z3 = net(inputs)

            # Cost function
            cost = compute_cost(Z3, labels)

            # Backpropagation: Define the optimizer. 
            # Use an AdamOptimizer that minimizes the cost.

            cost.backward()
            optimizer.step()             

            running_loss += cost.item()

            # Measuring the accuracy of minibatch
            acc = (labels==Z3).sum()
            total_train_acc += acc.item()
            #Print every 10th batch of an epoch
            if epoch%1 == 0:
            print("Cost after epoch {} : 
            {:.3f}".format(epoch,running_loss/len(train_loader)))
使用。它结合了softmax和交叉熵。从文件:

此条件将nn.LogSoftmax()和nn.NLLLoss()组合在一个类中

例如:

#定义损失函数
损耗=焊炬的横向熵(折减量=平均值)
#训练期间
对于(x,y)列装载机:
模型列车()
y_pred=model(x)#您的输入`torch.FloatTensor`
损耗值=损耗值(y\u pred,y)
打印(丢失值项目())#打印numpy值
optimizer.zero_grad()
损失值向后()
optimizer.step()
确保
x
y
的类型正确。通常转换如下:
loss\u fn(y\u pred.type(torch.FloatTensor)、y.type(torch.LongTensor))

要测量精度,可以定义自定义函数:

def计算精度(y\u pred,y):
如果列表(y_pred.size())!=列表(y.size()):
raise VALUERROR('输入具有不同的形状',
列表(y_pred.size()),“和”,列表(y.size())
结果=[1如果y1==y2,则y1为0,zip中的y2(y_pred,y)]
返回和(结果)/长度(结果)
并像这样使用两者:

model.train()
y_pred=模型(x)
损耗值=损耗值(y型前置型(火炬.浮子张量),y型(火炬.长传感器))
_,y_pred=torch.max(y_pred,1)
精度=计算精度(y\u pred,y)
打印(损失值项目())#打印损失值
打印(精度值)#打印精度值
#更新步骤e.t.c
如果您的输入数据是一个热编码数据,您可以在使用
loss\fn
之前将其转换为常规编码:

\,目标=y.max(尺寸=1)
y_pred=模型(x)
损失值=损失值(y\U pred,目标)

tnx对于我们的anwer,CrossEntropyLoss有一个问题,它不接受一个热编码标签。我可以将它与一个热编码一起使用吗?是的,我会在一分钟后将其附加到答案中。