RuntimeError: «измерение вне диапазона (ожидается, что оно находится в диапазоне [-1, 0], но получено 1)» - PullRequest
0 голосов
/ 24 октября 2019

Я надеюсь, что все в порядке со всеми вами. Я новичок в PyTorch, и я наткнулся на онлайн-код, где он имел следующий код:

cuda = True if torch.cuda.is_available() else False
num_class = opt.num_class
num_repeats = opt.num_repeats
total=0
correct=0
acc=[]
acc1=[]
model = SHMnet(num_class)
# model = AlexNet1D(num_class)
learning_rate = opt.lr
print(model)
loss = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate,betas=(opt.b1,opt.b2))
if cuda:
    model=model.cuda()
    loss=loss.cuda()
FloatTensor = torch.cuda.FloatTensor if cuda else torch.FloatTensor
LongTensor = torch.cuda.LongTensor if cuda else torch.LongTensor

traindataset = []
for label in range(num_class):
    epdataset = epDataset(label,num_repeats)
    traindataset = ConcatDataset([traindataset,epdataset])

testdataset =[]
for label in range(num_class):
    eptdataset = eptDataset(label,6)
    testdataset = ConcatDataset([testdataset,eptdataset])
dataloader = DataLoader(traindataset, batch_size=opt.batch_size)
viddataloader = DataLoader(testdataset,batch_size = opt.batch_size)
loss_r=[]
start = time.time()

for epoch in range(opt.n_epochs):
    print('Epoch: %d' % epoch)
    total = 0
    correct = 0
    total1 = 0
    correct1 = 0
    for i, (sdata, label) in enumerate(dataloader):
        batch_size = sdata.shape[0]
        sdata = Variable(sdata.type(FloatTensor))
       noise=Variable(torch.from_numpy(np.random.normal(1, 0.2, sdata.shape))).type(FloatTensor)
        x = torch.mul(sdata,noise).view(sdata.size(0), 1, sdata.size(1))
        print(x)
        print(x.size())
        label = Variable (label.type(LongTensor))
        print(label)
        optimizer.zero_grad()
        output = model(x)
        print(output)
        print(output.size())
        loss1 = loss(input=output, target=label)
        loss1.backward()
        optimizer.step()
        _, predicted = torch.max(model(x).data, 1)
        temp = (predicted == label).sum()
        correct += temp
        total += batch_size
        print(i, loss1.item())
        loss_r.append(loss1.item())
    print('Accuracy of training data is: %d %%' % (100 * correct / total))
    acc.append(100 * correct / total)

Мне удалось найти набор данных, но я получил следующую ошибку при запуске кода:

RuntimeError: “dimension out of range (expected to be in range of [-1, 0], but got 1)”

Итак, я не понимаю эту ошибку. В чем может быть причина и как ее решить?

Размер пакета равен 60, а количество классов составляет 6

Редактировать 1

Выходные данные и переменные метки:

Labels:  tensor([0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
Labels Size/Shape:  torch.Size([12])
torch.Size([12, 512, 2])
Output:  tensor([0.0288, 0.0125, 0.0104, 0.0222, 0.0106, 0.0121],  grad_fn=<AddBackward0>)
Output Size/Shape:  torch.Size([6])

Редактировать 2

Мне удалось изменить размер пакета на 6, однако выходной результат ипеременные метки:

Input Size/Shape:  torch.Size([6, 1, 2192])
Labels:  tensor([0, 1, 2, 3, 4, 5])
Labels Size/Shape:  torch.Size([6])
torch.Size([6, 512, 2])
Output:  tensor([ 0.0228, -0.0088,  0.0047,  0.0224,  0.0146,  0.0357], grad_fn=<AddBackward0>)
Output Size/Shape:  torch.Size([6])

Но я получаю ту же ошибку, и размер пакета равен 6, а количество классов равно 6. Спасибо

...