Прогнозирование для предварительно подготовленной модели по рукописному тексту(изображениям)-Pytorch

#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.