conv2d (): аргумент 'input' (позиция 1) должен быть тензором, а не str в функции l oop - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь написать функцию al oop для извлечения функций из моих данных и сохранения их в списке.

А вот мой код:

import pickle

output_features = []

with torch.no_grad():
    for (inputs, labels) in dataloaders.items():
        x=feature_extractor(inputs)
        output_features.append(x)
        output_features = torch.cat(output_features).numpy

pickle.dump(output_features, open("features.pkl", "w")) 

Но у меня ошибка.

conv2d(): argument 'input' (position 1) must be Tensor, not str

Затем я снова изменил его на

with torch.no_grad():
    for i, (inputs, labels) in enumerate(dataloaders['val']):
        x=feature_extractor(inputs)
        output_features.append(x)
        output_features = torch.cat(output_features).numpy

pickle.dump(output_features, open("features.pkl", "wb"))   

Затем я получил эту ошибку

'builtin_function_or_method' object has no attribute 'append'

Пожалуйста, кто-нибудь, объясните мне, почему я получил эту ошибку и как получить функции от каждого входа с его меткой и сохранить их в массиве. Спасибо

1 Ответ

0 голосов
/ 15 февраля 2020

Для первого вопроса, это действительно зависит от того, как данные сохраняются в загрузчике данных. Но согласно соглашению, я предполагаю, что он содержит кортежи (входной тензор, метка), к которым можно просто получить доступ for (inputs, labels) in dataloader:. Перечисление не является обязательным, если только вы не хотите вести подсчет каждой итерации.

Что касается второй ошибки, это потому, что вы случайно написали output_features = torch.cat(output_features).numpy, который вызывает встроенный метод вместо применяя его к выходному тензору. Вы можете исправить это до output_features = torch.cat(output_features).numpy(), и у вас должно получиться нормально работать с выходными функциями!

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