所以我想对一些(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)
所以我希望它开始训练(当然不会因为标签错误而学习任何东西),提前致谢!
我是 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) 我有这个训练循环
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) 我使用 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)