Clasele de modele din 🤗 Transformatoare sunt concepute pentru a fi compatibile cu PyTorch nativ și TensorFlow 2 și pot fi folosite în mod aparent cu oricare dintre ele. În acest start rapid, vom arăta cum să reglați fin (sau să pregătiți de la zero) un model folosind instrumentele de instruire standard disponibile în ambele cadre. De asemenea, vă vom arăta cum să utilizați clasa noastră de antrenor () inclusă, care gestionează o mare parte din complexitatea instruirii pentru dvs.

orice model

Acest ghid presupune că sunteți deja familiarizat cu încărcarea și utilizarea modelelor noastre pentru deducere; în caz contrar, consultați rezumatul sarcinii. De asemenea, presupunem că sunteți familiarizați cu instruirea rețelelor neuronale profunde în PyTorch sau TF2 și vă concentrați în mod special pe nuanțele și instrumentele pentru modelele de antrenament din 🤗 Transformatoare.

  • Reglare fină în PyTorch nativ

  • Reglarea fină în TensorFlow nativ 2

  • Antrenor

  • Resurse aditionale

Reglare fină în PyTorch nativ¶

Clasele de modele din 🤗 Transformatoarele care nu încep cu TF sunt module PyTorch, ceea ce înseamnă că le puteți folosi la fel ca orice model din PyTorch atât pentru inferență, cât și pentru optimizare.

Să luăm în considerare sarcina obișnuită de a regla fin un model de limbă mascat precum BERT pe un set de date de clasificare a secvenței. Când instanțiem un model cu from_pretrained (), configurația modelului și greutățile pre-antrenate ale modelului specificat sunt utilizate pentru a inițializa modelul. Biblioteca include, de asemenea, o serie de straturi finale sau „capete” specifice sarcinilor ale căror greutăți sunt instanțiate aleatoriu atunci când nu sunt prezente în modelul pre-instruit specificat. De exemplu, instanțierea unui model cu BertForSequenceClassification.from_pretrained („bert-base-uncased”, num_labels = 2) va crea o instanță de model BERT cu greutăți codificatoare copiate din modelul bert-base-uncased și un cap de clasificare a secvenței inițializat aleatoriu în partea de sus a codificatorului cu o dimensiune de ieșire de 2. Modelele sunt inițializate în mod eval în mod implicit. Putem apela model.train () pentru al pune în modul tren.

Acest lucru este util, deoarece ne permite să folosim codificatorul BERT pre-instruit și să îl antrenăm cu ușurință pe orice set de date de clasificare a secvenței pe care îl alegem. Putem folosi orice optimizator PyTorch, dar biblioteca noastră oferă, de asemenea, optimizatorul AdamW () care implementează corecția de înclinare a gradientului, precum și descompunerea greutății.

Optimizatorul ne permite să aplicăm diferiți hiperpametri pentru grupuri de parametri specifici. De exemplu, putem aplica descompunerea greutății la toți parametrii, în afară de părtinire și termenii de normalizare a stratului:

Acum putem configura un simplu lot de antrenament fals folosind __call __ (). Aceasta returnează o instanță BatchEncoding () care pregătește tot ce ne-ar trebui să trecem la model.

Când numim un model de clasificare cu argumentul etichetelor, primul element returnat este pierderea Entropiei încrucișate între predicții și etichetele trecute. După ce am configurat deja optimizatorul nostru, putem face apoi o trecere înapoi și actualiza greutățile:

Alternativ, puteți obține doar logitele și puteți calcula singuri pierderea. Următorul este echivalent cu exemplul anterior:

Desigur, vă puteți antrena pe GPU apelând la ('cuda') pe model și intrări ca de obicei.

De asemenea, oferim câteva instrumente de planificare a ratei de învățare. Cu următoarele, putem configura un programator care se încălzește pentru num_warmup_steps și apoi se descompune liniar la 0 până la sfârșitul antrenamentului.

Apoi tot ce trebuie să facem este să apelați scheduler.step () după optimizer.step () .

Vă recomandăm cu tărie să folosiți Trainer (), discutat mai jos, care tratează în mod convenabil părțile mobile ale antrenamentului models Modele de transformatoare cu caracteristici precum precizia mixtă și înregistrarea ușoară a tensorului.

Înghețarea codificatorului¶

În unele cazuri, s-ar putea să fiți interesat să păstrați greutățile codificatorului pre-antrenat înghețat și să optimizați doar greutățile straturilor de cap. Pentru a face acest lucru, pur și simplu setați atributul require_grad la False pe parametrii codificatorului, care poate fi accesat cu submodulul base_model pe orice model specific activității din bibliotecă:

Reglare fină în TensorFlow nativ 2¶

Modelele pot fi, de asemenea, instruite nativ în TensorFlow 2. La fel ca în PyTorch, modelele TensorFlow pot fi instantiate cu from_pretrained () pentru a încărca greutățile codificatorului dintr-un model pretrainat.

Să folosim tensorflow_datasets pentru a încărca în setul de date MRPC din GLUE. Putem folosi glue_convert_examples_to_features () încorporat pentru a simboliza MRPC și a-l converti într-un obiect TensorFlow Dataset. Rețineți că tokenizer-urile sunt agnostice-cadru, deci nu este nevoie să preparați TF la numele de tokenizer pre-antrenat.

Modelul poate fi apoi compilat și instruit ca orice model Keras:

Cu interoperabilitatea strânsă dintre modelele TensorFlow și PyTorch, puteți chiar să salvați modelul și apoi să-l reîncărcați ca model PyTorch (sau invers):

Antrenor¶

De asemenea, oferim o interfață simplă, dar completă de formare și evaluare prin Trainer () și TFTrainer (). Puteți antrena, regla fin și evalua orice model ers Transformers cu o gamă largă de opțiuni de antrenament și cu caracteristici încorporate, cum ar fi înregistrarea, acumularea de gradient și precizia mixtă.

Acum, pur și simplu sunați trainer.train () pentru a antrena și trainer.evaluate () pentru a evalua. Puteți utiliza și propriul dvs. modul, dar primul argument returnat dinainte trebuie să fie pierderea pe care doriți să o optimizați.

Trainer () folosește o funcție implicită încorporată pentru a strânge loturile și a le pregăti pentru a fi introduse în model. Dacă este necesar, puteți utiliza, de asemenea, argumentul data_collator pentru a trece propria funcție de colector care preia datele în formatul furnizat de setul de date și returnează un lot gata să fie introdus în model. Rețineți că TFTrainer () se așteaptă ca seturile de date transmise să fie obiecte de seturi de date de la tensorflow_datasets .

Pentru a calcula valori suplimentare în plus față de pierderi, puteți să vă definiți și funcția compute_metrics și să o transmiteți instructorului.

În cele din urmă, puteți vizualiza rezultatele, inclusiv toate valorile calculate, lansând tensorboard în directorul dvs. de logging_dir specificat.

Resurse aditionale¶

O demonstrație ușoară de colab care folosește Trainer pentru clasificarea sentimentelor IMDb.

Examples Exemple de transformatoare, inclusiv scripturi pentru instruire și reglare fină pe GLUE, SQuAD și alte câteva sarcini.

Cum să instruiești un model de limbă, un caiet detaliat de colab care folosește Trainer pentru a instrui un model de limbă mascat de la zero în Esperanto.

🤗 Notebook-uri Transformers care conțin zeci de exemple de notebook-uri din comunitate pentru instruire și utilizare 🤗 Transformers pentru o varietate de sarcini.