Ошибка типа: невозможно преобразовать тензор CUDA в numpy. Используйте Tensor.cpu (), чтобы сначала скопировать тензор в память хоста. - PullRequest
0 голосов
/ 04 апреля 2020

Я запускаю модель в Google Colab. Когда я воспроизводю код, я хочу запустить один из фрагментов кода, чтобы получить результаты эксперимента. И я получаю некоторую ошибку. Вот код:

cluster_args = {
    'cluster_layers' : {1:400, 3:240},
    'conv_feature_size' : 1,
    'reshape_exists' : False,
    'features' : 'both',
    'channel_reduction' : 'fro',
    'use_bias' : False,
    'linkage_method' : 'ward',
    'distance_metric' : 'euclidean',
    'cluster_criterion' : 'hierarchical_trunc',
    'distance_threshold' : 1.60,
    'merge_criterion' : 'max_l2_norm',    
    'verbose' : False
}

path = args.checkpoint_path[:-4] + '_small_cup.pth' 
model_modifier = cluster_model(ann,cluster_args)
compressed_model = model_modifier.cluster_model()
compressed_model.cuda()

val_loss_no_retrain, val_accuracy_no_retrain = test(args, compressed_model, device, test_loader,verbose=False)

args.lr = 0.1
args.epochs = 30
optimizer = optim.SGD(compressed_model.parameters(),lr=args.lr,momentum=args.momentum,weight_decay=args.weight_decay,nesterov=False)

best_val_accuracy_retrain = 0

if not os.path.isfile(path):    
    for epoch in range(1, args.epochs+1):
        adjust_learning_rate(args,optimizer,epoch)
        train(args, compressed_model, device, train_loader, optimizer, epoch)
        val_loss_retrain, val_accuracy_retrain = test(args, compressed_model, device, test_loader)

        if val_accuracy_retrain > best_val_accuracy_retrain:  
            torch.save(compressed_model, path, pickle_protocol=4)            
            best_val_accuracy_retrain = val_accuracy_retrain   
else:
    compressed_model = torch.load(path)
    val_loss_retrain, val_accuracy_retrain = test(args, compressed_model, device, test_loader, verbose=False)
    best_val_accuracy_retrain = val_accuracy_retrain

print('Accuracy post pruning : {} (without retraining), {} (with retraining)'.format(val_accuracy_no_retrain,best_val_accuracy_retrain))

Я получаю эту ошибку при запуске этой ячейки:

TypeError                                 Traceback (most recent call last)
<ipython-input-17-c3d69464b0c0> in <module>()
     16 path = args.checkpoint_path[:-4] + '_small_cup.pth'
     17 model_modifier = cluster_model(ann,cluster_args)
---> 18 compressed_model = model_modifier.cluster_model()
     19 compressed_model.cuda()
     20 

5 frames
/usr/local/lib/python3.6/dist-packages/torch/tensor.py in __array__(self, dtype)
    484     def __array__(self, dtype=None):
    485         if dtype is None:
--> 486             return self.numpy()
    487         else:
    488             return self.numpy().astype(dtype, copy=False)

TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

** Я пытаюсь изменить **

compressed_model = model_modifier.cluster_model()

до

compressed_model = model_modifier.cluster_model().data().cpu().numpy()

но все равно появляется та же ошибка

Как мне решить эту проблему?

[введите описание ссылки здесь] [1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...