簡體   English   中英

Python - AttributeError:'numpy.ndarray'對象沒有屬性'to'

[英]Python - AttributeError: 'numpy.ndarray' object has no attribute 'to'

我現在有如下更新的代碼:

    # Hyperparameters
random_seed = 123
learning_rate = 0.01
num_epochs = 10
batch_size = 128

device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")

對於范圍內的紀元(num_epochs):模型= resnet34.train()對於batch_idx,枚舉(train_generator)中的(特征,目標):

    features = features.to(device)
    targets = targets.to(device)
        
    ### FORWARD AND BACK PROP
    logits = model(features)
    cost = torch.nn.functional.cross_entropy(logits, targets)
    optimizer.zero_grad()
    
    cost.backward()
    
    ### UPDATE MODEL PARAMETERS
    optimizer.step()
    
    ### LOGGING
    if not batch_idx % 50:
        print ('Epoch: %03d/%03d | Batch %03d/%03d | Cost: %.4f' 
               %(epoch+1, num_epochs, batch_idx, 
                 len(datagen)//batch_size, cost))

model = model.eval() # eval mode to prevent upd. batchnorm params during inference
with torch.set_grad_enabled(False): # save memory during inference
    print('Epoch: %03d/%03d training accuracy: %.2f%%' % (
          epoch+1, num_epochs, 
          compute_accuracy(model, train_generator)))

當只有一張圖片時,代碼運行良好。 但是,當我添加另一個或更多圖像時,我得到以下信息:

features = features.to(device)
targets = targets.to(device)
AttributeError: 'numpy.ndarray' object has no attribute 'to'

為了清楚起見,很高興看到您的train_generator代碼,但它似乎不是火炬DataLoader 在這種情況下,您可能應該手動將數組轉換為張量。 有幾種方法可以做到這一點:

  • torch.from_numpy(numpy_array) - 用於 numpy 數組;
  • torch.as_tensor(list) - 用於常見列表和元組;
  • torch.tensor(array)也應該有效,但上述方法將盡可能避免復制數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM