Как получить вывод предпоследнего слоя текстовой модели fastai?

learn = text_classifier_learner(data_clas, AWD_LSTM, drop_mult=0.7)
learn.fit_one_cycle(1, 1e-2)

Я тренировал модель fastai, как указано выше. Я могу получить прогноз, как показано ниже

preds, targets = learn.get_preds()

Но вместо этого я хочу вложения предпоследнего слоя модели learn (эта практика распространена для моделей CNN). Не могли бы вы помочь мне, как это сделать?


person Ravikrn    schedule 03.05.2019    source источник
comment
Вы уверены, что вам нужен предпоследний слой классификатора, а не языковая модель?   -  person Renard Korzeniowski    schedule 11.05.2019


Ответы (1)


Я не уверен, что вам нужен классификатор, но в любом случае...

learn.model возвращает архитектуру модели. Тогда learn.model[0] будет энкодером learn.model[1] другой части модели.

Пример:

Чтобы получить доступ к первому линейному слою в SequentialEx (архитектура ниже), вы должны сделать это, используя следующую команду learn.model[0].layers[0].ff.layers[0]

SequentialRNN(
    (0): TransformerXL(
      (encoder): Embedding(60004, 410)
      (pos_enc): PositionalEncoding()
      (drop_emb): Dropout(p=0.03)
      (layers): ModuleList(
        (0): DecoderLayer(
          (mhra): MultiHeadRelativeAttention(
            (attention): Linear(in_features=410, out_features=1230, bias=False)
            (out): Linear(in_features=410, out_features=410, bias=False)
            (drop_att): Dropout(p=0.03)
            (drop_res): Dropout(p=0.03)
            (ln): LayerNorm(torch.Size([410]), eps=1e-05, elementwise_affine=True)
            (r_attn): Linear(in_features=410, out_features=410, bias=False)
          )
          (ff): SequentialEx(
            (layers): ModuleList(
              (0): Linear(in_features=410, out_features=2100, bias=True)
              (1): ReLU(inplace)
              (2): Dropout(p=0.03)
              (3): Linear(in_features=2100, out_features=410, bias=True)
              (4): Dropout(p=0.03)
              (5): MergeLayer()
              (6): LayerNorm(torch.Size([410]), eps=1e-05, elementwise_affine=True)
            )
          )
        )
person Renard Korzeniowski    schedule 14.05.2019