Buckets:

rtrm's picture
download
raw
25.6 kB
import{s as Zt,o as Gt}from"../chunks/scheduler.505acc25.js";import{S as _t,i as Ct,e as n,s as i,c as p,h as Wt,a as s,d as a,b as o,f as Rt,g as d,j as r,k as at,l as It,m as l,n as c,t as m,o as u,p as f}from"../chunks/index.1238bded.js";import{C as Ht,H as it,E as Xt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.cccc31f8.js";import{Y as Et}from"../chunks/Youtube.2fb63721.js";import{C as M}from"../chunks/CodeBlock.1a76be37.js";import{D as Ft}from"../chunks/DocNotebookDropdown.446f7d35.js";import{F as Vt}from"../chunks/FrameworkSwitchCourse.23952889.js";function xt(lt){let b,re,y,pe,T,ce,$,me,g,ue,J,fe,w,Me,z,ot='🤗 Transformers fornisce una classe <code>Trainer</code> (addestratore) per aiutare con l’affinamento di uno qualsiasi dei modelli pre-addestrati nel dataset. Dopo tutto il lavoro di preprocessing nella sezione precedente, rimangono giusto gli ultimi passi per definire il <code>Trainer</code>. Probabilmente la parte più complicata sarà preparare l’ambiente per eseguire <code>Trainer.train()</code>, poiché sarà molto lento su una CPU. Se non avete una GPU a disposizione, potete avere accesso gratuitamente a GPU o TPU su <a href="https://colab.research.google.com/" rel="nofollow">Google Colab</a>.',be,j,nt="Gli esempi di codice qui sotto partono dal presupposto che gli esempi nella sezione precedente siano già stati eseguiti. Ecco un breve riassunto di cosa serve:",ye,k,Te,U,ve,R,st="Il primo passo per definire un <code>Trainer</code> è la definizione di una classe <code>TrainingArguments</code> che contenga tutti gli iperparametri che verranno usati dal <code>Trainer</code> per l’addestramento e la valutazione. L’unico parametro da fornire è la cartella dove verranno salvati il modello addestrato e i vari checkpoint. Per tutto il resto si possono lasciare i parametri di default, che dovrebbero funzionare bene per un affinamento di base.",he,Z,$e,v,rt='<p>💡 Se si vuole caricare automaticamente il modello all’Hub durante l’addestramento, basta passare <code>push_to_hub=True</code> come parametro nei <code>TrainingArguments</code>. Maggiori dettagli verranno forniti nel <a href="/course/chapter4/3">Capitolo 4</a>.</p>',ge,G,pt='Il secondo passo è definire il modello. Come nel <a href="/course/chapter2">capitolo precedente</a>, utilizzeremo la classe <code>AutoModelForSequenceClassification</code> con due label:',Je,_,we,C,dt='Diversamente dal <a href="/course/chapter2">Capitolo 2</a>, un avviso di avvertimento verrà visualizzato dopo aver istanziato questo modello pre-addestrato. Ciò avviene perché BERT non è stato pre-addestrato per classificare coppie di frasi, quindi la testa del modello pre-addestrato viene scartata e una nuova testa adeguata per il compito di classificazione di sequenze è stata inserita. Gli avvertimenti indicano che alcuni pesi non verranno usati (quelli corrispondenti alla testa scartata del modello pre-addestrato) e che altri pesi sono stati inizializzati con valori casuali (quelli per la nuova testa). L’avvertimento viene concluso con un’esortazione ad addestrare il modello, che è esattamente ciò che stiamo per fare.',ze,W,ct="Una volta ottenuto il modello, si può definire un <code>Trainer</code> passandogli tutti gli oggetti costruiti fino ad adesso — il <code>model</code>, i <code>training_args</code>, i dataset di addestramento e validazione, il <code>data_collator</code>, e il <code>tokenizer</code>:",je,I,ke,H,mt="Quando si passa l’argomento <code>tokenizer</code> come appena fatto, il <code>data_collator</code> usato di default dal <code>Trainer</code> sarà del tipo <code>DataCollatorWithPadding</code>, come definito precedentemente, quindi si potrebbe evitare di specificare l’argomento <code>data_collator=data_collator</code> in questa chiamata. Tuttavia era comunque importante mostrare questa parte del processing nella sezione 2!",Ue,X,ut="Per affinare il modello sul nostro dataset, bisogna solo chiamare il metodo <code>train()</code> del <code>Trainer</code>:",Re,E,Ze,F,ft="Questo farà partire l’affinamento (che richiederà un paio di minuti su una GPU) e produrrà un report della funzione obiettivo dell’addestramento ogni 500 passi. Tuttavia, non vi farà sapere quanto sia buona (o cattiva) la performance del modello. Ciò è dovuto al fatto che:",Ge,V,Mt="<li>Non è stato detto al <code>Trainer</code> di valutare il modello durante l’addestramento, settando <code>evaluation_strategy</code> o al valore <code>&quot;steps&quot;</code> (valuta il modello ogni <code>eval_steps</code>) oppure al valore <code>&quot;epoch&quot;</code> (valuta il modello alla fine di ogni epoca).</li> <li>Non è stato fornito al <code>Trainer</code> una funzione <code>compute_metrics()</code> per calcolare le metriche di valutazione (altrimenti la valutazione stamperebbe solo il valore della funzione obiettivo, che non è un valore molto intuitivo).</li>",_e,x,Ce,q,bt="Vediamo come si può costruire una funzione <code>compute_metrics()</code> utile e usarla per il prossimo addestramento. La funzione deve prendere come parametro un oggetto <code>EvalPrediction</code> (che è una named tuple avente un campo <code>predictions</code> – predizioni – e un campo <code>label_ids</code> – id delle etichette –) e restituirà un dizionario che associa stringhe a numeri floating point (le stringhe saranno i nomi delle metriche, i numeri i loro valori). Per ottenere delle predizioni, si può usare il comando <code>Trainer.predict()</code>:",We,Y,Ie,B,He,L,yt="Il risultato del metodo <code>predict()</code> è un’altra named tuple con tre campi: <code>predictions</code>, <code>label_ids</code>, e <code>metrics</code>. Il campo <code>metrics</code> conterrà solo il valore della funzione obiettivo sul dataset, in aggiunta ad alcune metriche legate al tempo (il tempo necessario per calcolare le predizioni, in totale e in media). Una volta completata la funzione <code>compute_metrics()</code> e passata al <code>Trainer</code>, quel campo conterrà anche le metriche restituite da <code>compute_metrics()</code>.",Xe,A,Tt='Come si può vedere, <code>predictions</code> è un array bi-dimensionale con dimensioni 408 x 2 (poiché 408 è il numero di elementi nel dataset). Questi sono i logit per ogni elemento del dataset passato a <code>predict()</code> (come già visto nel <a href="/course/chapter2">capitolo precedente</a>, tutti i modelli Transformer restituiscono logit). Per trasformarli in predizioni associabili alle etichette, bisogna prendere l’indice col valore massimo sul secondo asse:',Ee,Q,Fe,N,vt="Ora si possono paragonare i <code>preds</code> con le etichette. Per costruire la funzione <code>compute_metric()</code>, verranno utilizzate le metriche dalla libreria 🤗 Dataset. Si possono caricare le metriche associate con il dataset MRPC in maniera semplice, utilizzando la funzione <code>load_metric()</code>. L’oggetto restituito ha un metodo <code>compute()</code> (calcola) che possiamo usare per calcolare le metriche:",Ve,P,xe,S,qe,D,ht='L’esatto valore dei risultati potrebbe essere diverso nel vostro caso, a casa dell’inizializzazione casuale della testa del modello. In questo caso il nostro modello ha un’accuratezza del 85.78% sul set di validazione e un valore F1 di 89.97. Queste sono le due metriche utilizzate per valutare i risultati sul dataset MRPC per il benchmark GLUE. La tabella nell’<a href="https://arxiv.org/pdf/1810.04805.pdf" rel="nofollow">articolo su BERT</a> riportava un F1 di 88.9 per il modello base. Quello era il modello <code>uncased</code> (senza distinzione fra minuscole e maiuscole) mentre noi stiamo usando quello <code>cased</code>, il che spiega il risultato migliore.',Ye,O,$t="Mettendo tutto insieme si ottiene la funzione <code>compute_metrics()</code>:",Be,K,Le,ee,gt="Per vederla in azione e fare il report delle metriche alla fine di ogni epoca, ecco come si definisce un nuovo <code>Trainer</code> che includa questa funzione <code>compute_metrics()</code>:",Ae,te,Qe,ae,Jt="Da notare che bisogna creare un nuovo oggetto <code>TrainingArguments</code> con il valore di <code>evaluation_strategy</code> pari a <code>&quot;epoch&quot;</code> e un nuovo modello — altrimenti si continuerebbe l’addestramento del modello già addestrato. Per lanciare una nuova esecuzione dell’addestramento si usa:",Ne,le,Pe,ie,wt="Stavolta vi sarà il report della funzione obiettivo di validazione alla fine di ogni epoca, in aggiunta alla funzione obiettivo dell’addestramento. Di nuovo, i valori esatti di accuratezza/F1 ottenuti da voi potrebbero variare leggermente da quelli mostrati qui a causa dell’inizializzazione casuale della testa del modello, ma dovrebbero essere comparabili.",Se,oe,zt="Il <code>Trainer</code> funzionerà direttamente su svariate GPU e TPU e ha molte opzioni, tra cui addestramento in precisione mista (utilizzare <code>fp16 = True</code> negli argomenti). I dettagli delle opzioni verranno esplorati nel Capitolo 10.",De,ne,jt="Qui si conclude l’introduzione all’affinamento usando l’API del <code>Trainer</code>. Esempi per i compiti più comuni in NLP verranno forniti nel Capitolo 7, ma per ora vediamo come ottenere la stessa cosa usando puramente Pytorch.",Oe,h,kt="<p>✏️ <strong>Prova tu!</strong> Affinare un modello sul dataset GLUE SST-2 utilizzando il processing dei dati già fatto nella sezione 2.</p>",Ke,se,et,de,tt;return T=new Vt({props:{fw:lt[0]}}),$=new Ht({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),g=new it({props:{title:"Affinare il modello con la Trainer API",local:"affinare-il-modello-con-la-trainer-api",headingTag:"h1"}}),J=new Ft({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/it/chapter3/section3.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/it/chapter3/section3.ipynb"}]}}),w=new Et({props:{id:"nvBXf7s7vTI"}}),k=new M({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyUwQSUwQXJhd19kYXRhc2V0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQSUwQSUwQWRlZiUyMHRva2VuaXplX2Z1bmN0aW9uKGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVyKGV4YW1wbGUlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMjBleGFtcGxlJTVCJTIyc2VudGVuY2UyJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyh0b2tlbml6ZXIlM0R0b2tlbml6ZXIp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, DataCollatorWithPadding
raw_datasets = load_dataset(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>):
<span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">&quot;sentence1&quot;</span>], example[<span class="hljs-string">&quot;sentence2&quot;</span>], truncation=<span class="hljs-literal">True</span>)
tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),U=new it({props:{title:"Addestramento",local:"addestramento",headingTag:"h3"}}),Z=new M({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBdHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUyMnRlc3QtdHJhaW5lciUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments
training_args = TrainingArguments(<span class="hljs-string">&quot;test-trainer&quot;</span>)`,wrap:!1}}),_=new M({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)`,wrap:!1}}),I=new M({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMHRyYWluaW5nX2FyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZGF0YV9jb2xsYXRvciUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer
trainer = Trainer(
model,
training_args,
train_dataset=tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
eval_dataset=tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>],
data_collator=data_collator,
tokenizer=tokenizer,
)`,wrap:!1}}),E=new M({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),x=new it({props:{title:"Valutazione",local:"valutazione",headingTag:"h3"}}),Y=new M({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjB0cmFpbmVyLnByZWRpY3QodG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCklMEFwcmludChwcmVkaWN0aW9ucy5wcmVkaWN0aW9ucy5zaGFwZSUyQyUyMHByZWRpY3Rpb25zLmxhYmVsX2lkcy5zaGFwZSk=",highlighted:`predictions = trainer.predict(tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>])
<span class="hljs-built_in">print</span>(predictions.predictions.shape, predictions.label_ids.shape)`,wrap:!1}}),B=new M({props:{code:"KDQwOCUyQyUyMDIpJTIwKDQwOCUyQyk=",highlighted:'(<span class="hljs-number">408</span>, <span class="hljs-number">2</span>) (<span class="hljs-number">408</span>,)',wrap:!1}}),Q=new M({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBcHJlZHMlMjAlM0QlMjBucC5hcmdtYXgocHJlZGljdGlvbnMucHJlZGljdGlvbnMlMkMlMjBheGlzJTNELTEp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
preds = np.argmax(predictions.predictions, axis=-<span class="hljs-number">1</span>)`,wrap:!1}}),P=new M({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9tZXRyaWMlMEElMEFtZXRyaWMlMjAlM0QlMjBsb2FkX21ldHJpYyglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRHByZWRzJTJDJTIwcmVmZXJlbmNlcyUzRHByZWRpY3Rpb25zLmxhYmVsX2lkcyk=",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_metric
metric = load_metric(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
metric.compute(predictions=preds, references=predictions.label_ids)`,wrap:!1}}),S=new M({props:{code:"JTdCJ2FjY3VyYWN5JyUzQSUyMDAuODU3ODQzMTM3MjU0OTAxOSUyQyUyMCdmMSclM0ElMjAwLjg5OTY1Mzk3OTIzODc1NDIlN0Q=",highlighted:'{<span class="hljs-string">&#x27;accuracy&#x27;</span>: <span class="hljs-number">0.8578431372549019</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.8996539792387542</span>}',wrap:!1}}),K=new M({props:{code:"ZGVmJTIwY29tcHV0ZV9tZXRyaWNzKGV2YWxfcHJlZHMpJTNBJTBBJTIwJTIwJTIwJTIwbWV0cmljJTIwJTNEJTIwbG9hZF9tZXRyaWMoJTIyZ2x1ZSUyMiUyQyUyMCUyMm1ycGMlMjIpJTBBJTIwJTIwJTIwJTIwbG9naXRzJTJDJTIwbGFiZWxzJTIwJTNEJTIwZXZhbF9wcmVkcyUwQSUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwbnAuYXJnbWF4KGxvZ2l0cyUyQyUyMGF4aXMlM0QtMSklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRHByZWRpY3Rpb25zJTJDJTIwcmVmZXJlbmNlcyUzRGxhYmVscyk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">eval_preds</span>):
metric = load_metric(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
logits, labels = eval_preds
predictions = np.argmax(logits, axis=-<span class="hljs-number">1</span>)
<span class="hljs-keyword">return</span> metric.compute(predictions=predictions, references=labels)`,wrap:!1}}),te=new M({props:{code:"dHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUyMnRlc3QtdHJhaW5lciUyMiUyQyUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiklMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMiklMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMHRyYWluaW5nX2FyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZGF0YV9jb2xsYXRvciUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEElMjAlMjAlMjAlMjBjb21wdXRlX21ldHJpY3MlM0Rjb21wdXRlX21ldHJpY3MlMkMlMEEp",highlighted:`training_args = TrainingArguments(<span class="hljs-string">&quot;test-trainer&quot;</span>, evaluation_strategy=<span class="hljs-string">&quot;epoch&quot;</span>)
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)
trainer = Trainer(
model,
training_args,
train_dataset=tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
eval_dataset=tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>],
data_collator=data_collator,
tokenizer=tokenizer,
compute_metrics=compute_metrics,
)`,wrap:!1}}),le=new M({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:'trainer.trai<span class="hljs-meta">n</span>()',wrap:!1}}),se=new Xt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/it/chapter3/3.mdx"}}),{c(){b=n("meta"),re=i(),y=n("p"),pe=i(),p(T.$$.fragment),ce=i(),p($.$$.fragment),me=i(),p(g.$$.fragment),ue=i(),p(J.$$.fragment),fe=i(),p(w.$$.fragment),Me=i(),z=n("p"),z.innerHTML=ot,be=i(),j=n("p"),j.textContent=nt,ye=i(),p(k.$$.fragment),Te=i(),p(U.$$.fragment),ve=i(),R=n("p"),R.innerHTML=st,he=i(),p(Z.$$.fragment),$e=i(),v=n("blockquote"),v.innerHTML=rt,ge=i(),G=n("p"),G.innerHTML=pt,Je=i(),p(_.$$.fragment),we=i(),C=n("p"),C.innerHTML=dt,ze=i(),W=n("p"),W.innerHTML=ct,je=i(),p(I.$$.fragment),ke=i(),H=n("p"),H.innerHTML=mt,Ue=i(),X=n("p"),X.innerHTML=ut,Re=i(),p(E.$$.fragment),Ze=i(),F=n("p"),F.textContent=ft,Ge=i(),V=n("ol"),V.innerHTML=Mt,_e=i(),p(x.$$.fragment),Ce=i(),q=n("p"),q.innerHTML=bt,We=i(),p(Y.$$.fragment),Ie=i(),p(B.$$.fragment),He=i(),L=n("p"),L.innerHTML=yt,Xe=i(),A=n("p"),A.innerHTML=Tt,Ee=i(),p(Q.$$.fragment),Fe=i(),N=n("p"),N.innerHTML=vt,Ve=i(),p(P.$$.fragment),xe=i(),p(S.$$.fragment),qe=i(),D=n("p"),D.innerHTML=ht,Ye=i(),O=n("p"),O.innerHTML=$t,Be=i(),p(K.$$.fragment),Le=i(),ee=n("p"),ee.innerHTML=gt,Ae=i(),p(te.$$.fragment),Qe=i(),ae=n("p"),ae.innerHTML=Jt,Ne=i(),p(le.$$.fragment),Pe=i(),ie=n("p"),ie.textContent=wt,Se=i(),oe=n("p"),oe.innerHTML=zt,De=i(),ne=n("p"),ne.innerHTML=jt,Oe=i(),h=n("blockquote"),h.innerHTML=kt,Ke=i(),p(se.$$.fragment),et=i(),de=n("p"),this.h()},l(e){const t=Wt("svelte-u9bgzb",document.head);b=s(t,"META",{name:!0,content:!0}),t.forEach(a),re=o(e),y=s(e,"P",{}),Rt(y).forEach(a),pe=o(e),d(T.$$.fragment,e),ce=o(e),d($.$$.fragment,e),me=o(e),d(g.$$.fragment,e),ue=o(e),d(J.$$.fragment,e),fe=o(e),d(w.$$.fragment,e),Me=o(e),z=s(e,"P",{"data-svelte-h":!0}),r(z)!=="svelte-w466ks"&&(z.innerHTML=ot),be=o(e),j=s(e,"P",{"data-svelte-h":!0}),r(j)!=="svelte-11al6ht"&&(j.textContent=nt),ye=o(e),d(k.$$.fragment,e),Te=o(e),d(U.$$.fragment,e),ve=o(e),R=s(e,"P",{"data-svelte-h":!0}),r(R)!=="svelte-3oidne"&&(R.innerHTML=st),he=o(e),d(Z.$$.fragment,e),$e=o(e),v=s(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(v)!=="svelte-ndgp2e"&&(v.innerHTML=rt),ge=o(e),G=s(e,"P",{"data-svelte-h":!0}),r(G)!=="svelte-nsi4y1"&&(G.innerHTML=pt),Je=o(e),d(_.$$.fragment,e),we=o(e),C=s(e,"P",{"data-svelte-h":!0}),r(C)!=="svelte-1580ewa"&&(C.innerHTML=dt),ze=o(e),W=s(e,"P",{"data-svelte-h":!0}),r(W)!=="svelte-zpy7k9"&&(W.innerHTML=ct),je=o(e),d(I.$$.fragment,e),ke=o(e),H=s(e,"P",{"data-svelte-h":!0}),r(H)!=="svelte-gnh7rc"&&(H.innerHTML=mt),Ue=o(e),X=s(e,"P",{"data-svelte-h":!0}),r(X)!=="svelte-xznjnr"&&(X.innerHTML=ut),Re=o(e),d(E.$$.fragment,e),Ze=o(e),F=s(e,"P",{"data-svelte-h":!0}),r(F)!=="svelte-rtrulk"&&(F.textContent=ft),Ge=o(e),V=s(e,"OL",{"data-svelte-h":!0}),r(V)!=="svelte-pjo77w"&&(V.innerHTML=Mt),_e=o(e),d(x.$$.fragment,e),Ce=o(e),q=s(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-pup2lr"&&(q.innerHTML=bt),We=o(e),d(Y.$$.fragment,e),Ie=o(e),d(B.$$.fragment,e),He=o(e),L=s(e,"P",{"data-svelte-h":!0}),r(L)!=="svelte-mg62sf"&&(L.innerHTML=yt),Xe=o(e),A=s(e,"P",{"data-svelte-h":!0}),r(A)!=="svelte-bv1sad"&&(A.innerHTML=Tt),Ee=o(e),d(Q.$$.fragment,e),Fe=o(e),N=s(e,"P",{"data-svelte-h":!0}),r(N)!=="svelte-19co3eg"&&(N.innerHTML=vt),Ve=o(e),d(P.$$.fragment,e),xe=o(e),d(S.$$.fragment,e),qe=o(e),D=s(e,"P",{"data-svelte-h":!0}),r(D)!=="svelte-xgb3dx"&&(D.innerHTML=ht),Ye=o(e),O=s(e,"P",{"data-svelte-h":!0}),r(O)!=="svelte-10eff0k"&&(O.innerHTML=$t),Be=o(e),d(K.$$.fragment,e),Le=o(e),ee=s(e,"P",{"data-svelte-h":!0}),r(ee)!=="svelte-az7fqa"&&(ee.innerHTML=gt),Ae=o(e),d(te.$$.fragment,e),Qe=o(e),ae=s(e,"P",{"data-svelte-h":!0}),r(ae)!=="svelte-19ejq6q"&&(ae.innerHTML=Jt),Ne=o(e),d(le.$$.fragment,e),Pe=o(e),ie=s(e,"P",{"data-svelte-h":!0}),r(ie)!=="svelte-18vmmqt"&&(ie.textContent=wt),Se=o(e),oe=s(e,"P",{"data-svelte-h":!0}),r(oe)!=="svelte-1lvweaa"&&(oe.innerHTML=zt),De=o(e),ne=s(e,"P",{"data-svelte-h":!0}),r(ne)!=="svelte-19uw8j0"&&(ne.innerHTML=jt),Oe=o(e),h=s(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(h)!=="svelte-t970pd"&&(h.innerHTML=kt),Ke=o(e),d(se.$$.fragment,e),et=o(e),de=s(e,"P",{}),Rt(de).forEach(a),this.h()},h(){at(b,"name","hf:doc:metadata"),at(b,"content",qt),at(v,"class","tip"),at(h,"class","tip")},m(e,t){It(document.head,b),l(e,re,t),l(e,y,t),l(e,pe,t),c(T,e,t),l(e,ce,t),c($,e,t),l(e,me,t),c(g,e,t),l(e,ue,t),c(J,e,t),l(e,fe,t),c(w,e,t),l(e,Me,t),l(e,z,t),l(e,be,t),l(e,j,t),l(e,ye,t),c(k,e,t),l(e,Te,t),c(U,e,t),l(e,ve,t),l(e,R,t),l(e,he,t),c(Z,e,t),l(e,$e,t),l(e,v,t),l(e,ge,t),l(e,G,t),l(e,Je,t),c(_,e,t),l(e,we,t),l(e,C,t),l(e,ze,t),l(e,W,t),l(e,je,t),c(I,e,t),l(e,ke,t),l(e,H,t),l(e,Ue,t),l(e,X,t),l(e,Re,t),c(E,e,t),l(e,Ze,t),l(e,F,t),l(e,Ge,t),l(e,V,t),l(e,_e,t),c(x,e,t),l(e,Ce,t),l(e,q,t),l(e,We,t),c(Y,e,t),l(e,Ie,t),c(B,e,t),l(e,He,t),l(e,L,t),l(e,Xe,t),l(e,A,t),l(e,Ee,t),c(Q,e,t),l(e,Fe,t),l(e,N,t),l(e,Ve,t),c(P,e,t),l(e,xe,t),c(S,e,t),l(e,qe,t),l(e,D,t),l(e,Ye,t),l(e,O,t),l(e,Be,t),c(K,e,t),l(e,Le,t),l(e,ee,t),l(e,Ae,t),c(te,e,t),l(e,Qe,t),l(e,ae,t),l(e,Ne,t),c(le,e,t),l(e,Pe,t),l(e,ie,t),l(e,Se,t),l(e,oe,t),l(e,De,t),l(e,ne,t),l(e,Oe,t),l(e,h,t),l(e,Ke,t),c(se,e,t),l(e,et,t),l(e,de,t),tt=!0},p(e,[t]){const Ut={};t&1&&(Ut.fw=e[0]),T.$set(Ut)},i(e){tt||(m(T.$$.fragment,e),m($.$$.fragment,e),m(g.$$.fragment,e),m(J.$$.fragment,e),m(w.$$.fragment,e),m(k.$$.fragment,e),m(U.$$.fragment,e),m(Z.$$.fragment,e),m(_.$$.fragment,e),m(I.$$.fragment,e),m(E.$$.fragment,e),m(x.$$.fragment,e),m(Y.$$.fragment,e),m(B.$$.fragment,e),m(Q.$$.fragment,e),m(P.$$.fragment,e),m(S.$$.fragment,e),m(K.$$.fragment,e),m(te.$$.fragment,e),m(le.$$.fragment,e),m(se.$$.fragment,e),tt=!0)},o(e){u(T.$$.fragment,e),u($.$$.fragment,e),u(g.$$.fragment,e),u(J.$$.fragment,e),u(w.$$.fragment,e),u(k.$$.fragment,e),u(U.$$.fragment,e),u(Z.$$.fragment,e),u(_.$$.fragment,e),u(I.$$.fragment,e),u(E.$$.fragment,e),u(x.$$.fragment,e),u(Y.$$.fragment,e),u(B.$$.fragment,e),u(Q.$$.fragment,e),u(P.$$.fragment,e),u(S.$$.fragment,e),u(K.$$.fragment,e),u(te.$$.fragment,e),u(le.$$.fragment,e),u(se.$$.fragment,e),tt=!1},d(e){e&&(a(re),a(y),a(pe),a(ce),a(me),a(ue),a(fe),a(Me),a(z),a(be),a(j),a(ye),a(Te),a(ve),a(R),a(he),a($e),a(v),a(ge),a(G),a(Je),a(we),a(C),a(ze),a(W),a(je),a(ke),a(H),a(Ue),a(X),a(Re),a(Ze),a(F),a(Ge),a(V),a(_e),a(Ce),a(q),a(We),a(Ie),a(He),a(L),a(Xe),a(A),a(Ee),a(Fe),a(N),a(Ve),a(xe),a(qe),a(D),a(Ye),a(O),a(Be),a(Le),a(ee),a(Ae),a(Qe),a(ae),a(Ne),a(Pe),a(ie),a(Se),a(oe),a(De),a(ne),a(Oe),a(h),a(Ke),a(et),a(de)),a(b),f(T,e),f($,e),f(g,e),f(J,e),f(w,e),f(k,e),f(U,e),f(Z,e),f(_,e),f(I,e),f(E,e),f(x,e),f(Y,e),f(B,e),f(Q,e),f(P,e),f(S,e),f(K,e),f(te,e),f(le,e),f(se,e)}}}const qt='{"title":"Affinare il modello con la Trainer API","local":"affinare-il-modello-con-la-trainer-api","sections":[{"title":"Addestramento","local":"addestramento","sections":[],"depth":3},{"title":"Valutazione","local":"valutazione","sections":[],"depth":3}],"depth":1}';function Yt(lt,b,re){let y="pt";return Gt(()=>{const pe=new URLSearchParams(window.location.search);re(0,y=pe.get("fw")||"pt")}),[y]}class Dt extends _t{constructor(b){super(),Ct(this,b,Yt,xt,Zt,{})}}export{Dt as component};

Xet Storage Details

Size:
25.6 kB
·
Xet hash:
e3b23f74aec625c32c80d33197ac9f52d85acd928a6e7bb375cd24afb66d3e9a

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.