#python-3.x #pytorch #encoder-decoder
Вопрос:
У меня возникла проблема с прогнозированием с использованием предварительно обученной модели, которая содержит кодер и декодер для распознавания рукописного текста. Что я сделал, так это следующее:
checkpoint = torch.load("Model/SPAN/SPAN-PT-RA_rimes.pt",map_location=torch.device('cpu')) encoder_state_dict = checkpoint['encoder_state_dict'] decoder_state_dict = checkpoint['decoder_state_dict'] img = torch.LongTensor(img).unsqueeze(1).to(torch.device('cpu')) global_pred = decoder_state_dict(encoder_state_dict(img))
Это приводит к следующей ошибке:
TypeError: 'collections.OrderedDict' object is not callable
Я был бы очень признателен вам за помощь! ^_^
Ответ №1:
encoder_state_dict
и decoder_state_dict
это не модели факела, а набор (словарь) тензоров, которые включают предварительно обученные параметры загруженной контрольной точки.
Подача входных данных (например, входного изображения, которое вы преобразовали) в такую коллекцию тензоров не имеет смысла. Фактически, вы должны использовать эти индикаторы состояния (т. Е. набор предварительно обученных тензоров), чтобы загрузить их в параметры вашего объекта модели, который сопоставлен с сетью. Увидимся torch.nn.Module
в классе.
Комментарии:
1. Я сделал следующее:
encoder=FCN_Encoder() encoder.load_state_dict(SPAN['encoder_state_dict']) encoder.eval() decoder=Decoder() decoder.load_state_dict(SPAN['decoder_state_dict']) decoder.eval() features = encoder(image) output = decoder(features) output
и на выходе я получил тензор. Если я правильно понял, это мой прогнозируемый результат, но он должен быть преобразован в абзац (прогноз), и именно здесь я застрял. Если у вас есть идея по этому поводу, пожалуйста, помогите мне.2. Я бы предположил, что вы пытаетесь создать абзац для каждого изображения (например, подписи к изображению?). Если это так и если декодер делает свое дело, то выходные данные декодера должны содержать идентификаторы, каждый из которых сопоставлен со словарем. Вы можете полностью преобразовать эти идентификаторы в строки vocab. Хотя
decoder
класс сейчас очень абстрактен, поскольку вы не предоставили для него код, это общепринятый подход в рамках enc-dec.