RuntimeError: ожидаемый объект типа torch.FloatTensor, но обнаружен тип torch.cuda.DoubleTensor для аргумента № 2 'вес'

Я пытаюсь переучить модель, но, к сожалению, последние 2 дня продолжаю получать ту же ошибку.

Не могли бы вы немного помочь с этим?

Начальная работа:

%matplotlib inline
%config InlineBackend.figure_format = 'retina'

import matplotlib.pyplot as plt
import numpy as np
import time

import torch
from torch import nn
from torch import optim
import torch.nn.functional as F
from torch.autograd import Variable
from torchvision import datasets, transforms
import torchvision.models as models
from collections import OrderedDict

Наборы данных:

data_dir = 'flowers'
train_dir = data_dir + '/train'

data_dir = 'flowers'

train_transforms = transforms.Compose([transforms.Resize(224),
                                       transforms.RandomResizedCrop(224),
                                       transforms.RandomRotation(45),
                                       transforms.RandomHorizontalFlip(),
                                       transforms.ToTensor(),
                                       transforms.Normalize([0.485, 0.456, 0.406], 
                                                            [0.229, 0.224, 0.225])])


train_data = datasets.ImageFolder(train_dir, transform=train_transforms)

trainloader = torch.utils.data.DataLoader(train_data, batch_size=32, shuffle=True)

import json

with open('cat_to_name.json', 'r') as f:
    cat_to_name = json.load(f)

Пытался использовать предварительно обученную модель и обучить только классификатор:

# Load a pretrained model
model = models.vgg16(pretrained=True)

# Keep the parameters the same
for param in model.parameters():
    param.requires_grad = False


# and final output 102, since tht we have 102 flowers. 
classifier = nn.Sequential(OrderedDict([            
                          ('fc1', nn.Linear(25088, 4096)), 
                          ('relu', nn.ReLU()),
                          ('fc3', nn.Linear(4096, 102)),
                          ('output', nn.LogSoftmax(dim=1))
                          ]))

# Replace model's old classifier with the new classifier
model.classifier = classifier

# Calculate the loss
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.classifier.parameters(), lr=0.001)

model.to('cuda')

epochs = 1
print_every = 40
steps = 0

for e in range(epochs):
    running_loss = 0
    model.train()
   # model = model.double()
    for images, labels in iter(trainloader):
        steps += 1

        images.resize_(32, 3, 224, 224)          

        inputs = Variable(images.to('cuda'))
        targets = Variable(labels.to('cuda'))

        optimizer.zero_grad()

        # Forward and backward passes
        output = model.forward(images)
        loss = criterion(output, labels)
        loss.backward()
        optimizer.step()

        #running_loss += loss.data[0]
        running_loss += loss.item()

        if steps % print_every == 0:
            print("Epoch: {}/{}... ".format(e+1, epochs),
                  "Loss: {:.4f}".format(running_loss/print_every))

Сообщение об ошибке:

RuntimeError: Expected object of type torch.FloatTensor but found type torch.cuda.DoubleTensor for argument #2 weight

можете ли вы дать больше информации о трассировке?

Ryan 28.06.2018 12:56

Я добавил весь код. Это помогает?

Christos C. Becker 28.06.2018 13:09

Нет, на какой строке разбивается код?

Ryan 28.06.2018 13:09

можете ли вы специально назначить `model = model.to'cuda`

Ryan 28.06.2018 13:16

Я попробую это сейчас.

Christos C. Becker 28.06.2018 13:19

Теперь я получил эту ошибку: AssertionError: в вашей системе не обнаружен драйвер NVIDIA. Убедитесь, что у вас есть графический процессор NVIDIA и установлен драйвер из раздела «Использовать только центральный процессор»? Есть ли другое решение?

Christos C. Becker 28.06.2018 13:22

удалите все ваши команды to.cuda'

Ryan 28.06.2018 13:24

Я заменил: input = Variable (images.to ('cuda')) target = Variable (labels.to ('cuda')) на: inputs = Variable (images) target = Variable (labels) Я запустил сценарий, но все же я не получили никакого результата.

Christos C. Becker 28.06.2018 13:27

к сожалению, я получил начальное сообщение об ошибке. # Прямой и обратный проходы ---> 60 output = model.forward (images)

Christos C. Becker 28.06.2018 13:43

У вас такая же ошибка RuntimeError: Expected object of type torch.FloatTensor but found type torch.cuda.DoubleTensor for argument #2 'weight'?

Ryan 28.06.2018 13:50

почему вы используете model.to('cuda') вместо model.cuda()?

Shai 28.06.2018 15:34

Спасибо за поддержку, ребята. Я использовал model.cuda (), но получил следующую ошибку: RuntimeError: ожидаемый объект типа torch.FloatTensor, но обнаружил тип torch.cuda.FloatTensor для аргумента № 2 «вес».

Christos C. Becker 29.06.2018 08:59

Эй, у меня похожая проблема, вы смогли это исправить?

Rohan Singh 27.07.2018 20:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
13
2 527
2

Ответы 2

  1. Если вы хотите работать с графическим процессором в pyTorch, вы должны убедиться, что оба, рабочий поток (это ваша модель) и данные переданы на устройство cuda.

  2. Под этим (1) я подразумеваю, что все весь рабочий процесс, включая pre-trained model, criterion, classifier и inputs, должны быть назначены устройству cuda.

  3. Если (2) просто не гарантируется model.cuda(), может потребоваться сделать это вручную для всех объектов в порядке чтобы гарантировать, что как внутренние веса, так и входные данные имеют тип cuda float.

Надеюсь, поможет.


you should have passed inputs to the feed forward network but you have passed images to the network


# Forward and backward passes
output = model.forward(inputs)

Другие вопросы по теме