小编The*_*fer的帖子

pytorch:“不支持多目标”错误消息

所以我想对一些(3, 50, 50)图片进行分类。首先,我从没有数据加载器或批处理的文件中加载了数据集,它起作用了。现在,在添加了这两件事之后,我得到了那个错误:

RuntimeError: multi-target not supported at /pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu:15
Run Code Online (Sandbox Code Playgroud)

我在互联网上找到了很多答案,主要是使用,target.squeeze(1)但对我不起作用。我的目标批次如下所示:

tensor([[1, 0],
        [1, 0],
        [1, 0],
        [1, 0],
        [1, 0],
        [1, 0],
        [1, 0],
        [1, 0]], device='cuda:0')
Run Code Online (Sandbox Code Playgroud)

应该没问题吧?

这里是完整的代码(请注意,我只创建了模型的结构,之后我将在其上应用完整且正确的数据集,因为我还没有完整的数据,只有 32 张图片且没有标签,这就是为什么我添加torch.tensor([1, 0])为所有标签的占位符):

RuntimeError: multi-target not supported at /pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu:15
Run Code Online (Sandbox Code Playgroud)

所以我希望它开始训练(当然不会因为标签错误而学习任何东西),提前致谢!

python machine-learning pytorch tensor

15
推荐指数
1
解决办法
2万
查看次数

如何解决这个问题(Pytorch RuntimeError:需要 1D 目标张量,不支持多目标)

我是 pytorch 和深度学习的新手

我的数据集 53502 x 58,

我的代码有问题

model = nn.Sequential(
    nn.Linear(58,64),
    nn.ReLU(),
    nn.Linear(64,32),
    nn.ReLU(),
    nn.Linear(32,16),
    nn.ReLU(),
    nn.Linear(16,2),
    nn.LogSoftmax(1)
)

criterion = nn.NLLLoss()
optimizer = optim.AdamW(model.parameters(), lr = 0.0001)
Run Code Online (Sandbox Code Playgroud)
epoch = 500
train_cost, test_cost = [], []
for i in range(epoch):
    model.train()
    cost = 0
    for feature, target in trainloader:
        output = model(feature)          #feedforward
        loss = criterion(output, target) #loss
        loss.backward()                  #backprop
        
        optimizer.step()                 #update weight
        optimizer.zero_grad()            #zero grad
        
        cost += loss.item() * feature.shape[0]
    train_cost.append(cost / len(train_set))    
    
    with torch.no_grad():
        model.eval()
        cost = …
Run Code Online (Sandbox Code Playgroud)

python deep-learning pytorch

4
推荐指数
1
解决办法
7440
查看次数

批量输入显示 3d,但得到 2d、2d 张量

我有这个训练循环

def train(dataloader, model, loss_fn, optimizer):
    size = len(dataloader.dataset)
    model.train()
    for batch, (X, y) in enumerate(dataloader):
        X, y = torch.stack(X).to(device), torch.stack(y).to(device)

        # Compute prediction error
        pred = model(X)
        loss = loss_fn(pred, y)

        # Backpropagation
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if batch % 100 == 0:
            loss, current = loss.item(), batch * len(X)
            print(f"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]")
Run Code Online (Sandbox Code Playgroud)

和这个lstm:

import torch
import torch.nn as nn
import pandas as pd
import numpy as np
class BELT_LSTM(nn.Module):

    def __init__(self, input_size, hidden_size, num_layers):
        super (BELT_LSTM, self).__init__()
        self.hidden_size = …
Run Code Online (Sandbox Code Playgroud)

pytorch tensor

3
推荐指数
1
解决办法
6215
查看次数

Huggingface BERT 模型的预训练层是否已冻结?

我使用 Huggingface 中的以下分类模型:

model = AutoModelForSequenceClassification.from_pretrained("dbmdz/bert-base-german-cased", num_labels=2).to(device)
Run Code Online (Sandbox Code Playgroud)

据我了解,这会在预训练模型的末尾添加一个密集层,该模型有 2 个输出节点。但是之前的所有预训练层都被冻结了吗?或者微调时它们也会更新吗?我在文档中找不到有关该信息的信息...

那么我还需要做这样的事情吗?:

for param in model.bert.parameters():
    param.requires_grad = False
Run Code Online (Sandbox Code Playgroud)

nlp pytorch bert-language-model huggingface-transformers

3
推荐指数
1
解决办法
1579
查看次数