Как получить предпоследний выходной слой текстовой модели fastai? - PullRequest
0 голосов
/ 03 мая 2019
learn = text_classifier_learner(data_clas, AWD_LSTM, drop_mult=0.7)
learn.fit_one_cycle(1, 1e-2)

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

preds, targets = learn.get_preds()

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

1 Ответ

0 голосов
/ 14 мая 2019

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

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