Saya memiliki model pra-terlatih yang saya muat seperti:

from transformers import BertForSequenceClassification, AdamW, BertConfig, BertModel
model = BertForSequenceClassification.from_pretrained(
    "bert-base-uncased", # Use the 12-layer BERT model, with an uncased vocab.
    num_labels = 2, # The number of output labels--2 for binary classification.
                    # You can increase this for multi-class tasks.   
    output_attentions = False, # Whether the model returns attentions weights.
    output_hidden_states = False, # Whether the model returns all hidden-states.
)

Saya ingin membuat model baru dengan arsitektur yang sama, dan bobot awal acak, kecuali untuk lapisan penyematan:

==== Embedding Layer ====

bert.embeddings.word_embeddings.weight                  (30522, 768)
bert.embeddings.position_embeddings.weight                (512, 768)
bert.embeddings.token_type_embeddings.weight                (2, 768)
bert.embeddings.LayerNorm.weight                              (768,)
bert.embeddings.LayerNorm.bias                                (768,)

Sepertinya saya bisa melakukan ini untuk membuat model baru dengan arsitektur yang sama, tetapi kemudian semua bobotnya acak:

configuration   = model.config
untrained_model = BertForSequenceClassification(configuration)

Jadi, bagaimana cara menyalin bobot lapisan penyematan model ke untrained_model yang baru?

1
Russell Richie 25 Mei 2021, 16:41

1 menjawab

Jawaban Terbaik