Buckets:

rtrm's picture
download
raw
27.9 kB
import{s as zt,o as gt}from"../chunks/scheduler.505acc25.js";import{S as Gt,i as Zt,e as n,s,c as o,h as Ct,a as r,d as a,b as i,f as vt,g as p,j as f,k as pe,l as kt,m as l,n as m,t as d,o as c,p as u}from"../chunks/index.1238bded.js";import{C as _t,H as tt,E as It}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.e989d4e1.js";import{Y as at}from"../chunks/Youtube.2fb63721.js";import{C as M}from"../chunks/CodeBlock.11484469.js";import{D as Xt}from"../chunks/DocNotebookDropdown.446f7d35.js";import{F as Rt}from"../chunks/FrameworkSwitchCourse.23952889.js";function Wt(lt){let b,oe,y,re,h,de,j,ce,$,ue,v,fe,z,st='Dopo tutto il lavoro di preprocessing nella sezione precedente, rimangono giusto gli ultimi passi per addestrare il modello. Attenzione tuttavia che il comando <code>model.fit()</code> 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>.',Me,g,it="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:",be,G,ye,Z,he,C,nt="I modelli di TensorFlow importati da 🤗 Transformers sono già dei modelli Keras. Ecco una breve introduzione a Keras.",we,k,Je,_,ot="Ciò significa che una volta che si hanno i dati, è richiesto poco lavoro aggiuntivo per cominciare l’addestramento.",Te,I,Ue,X,rt='Come nel <a href="/course/chapter2">capitolo precedente</a>, verrà utilizzata la classe <code>TFAutoModelForSequenceClassification</code> con due etichette:',je,R,$e,W,pt='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.',ve,Q,mt="Per affinare il modello sul dataset, bisogna solo chiamare <code>compile()</code> (compila) sul modello e passare i dati al metodo <code>fit()</code>. Ciò farà partire il processo di affinamento (che dovrebbe richiedere un paio di minuti su una GPU) e fare il report della funzione obiettivo di addestramento, in aggiunta alla funzione obiettivo di validazione alla fine di ogni epoca.",ze,w,dt="<p>I modelli 🤗 Transformers hanno un’abilità speciale che manca alla maggior parte dei modelli Keras – possono usare in maniera automatica una funzione obiettivo appropriata, calcolata internamente. Questa funzione obiettivo verrà usata di default a meno che non venga definito l’argomento di funzione obiettivo nel metodo <code>compile()</code>. Per usare la funzione obiettivo interna è necessario passare le etichette come parte dell’input, non separatamente, che è l’approccio normale con i modelli Keras. Verranno mostrati esempi di ciò nella Parte 2 del corso, dove definire la funzione obiettivo correttamente può essere difficile. Per la classificazione di sequenze, invece, la funzione obiettivo standard di Keras funziona bene, quindi verrà utilizzata quella.</p>",ge,F,Ge,J,ct="<p>Attenzione ad un errore comune — si <em>può</em> passare solo il nome della funzione obiettivo a Keras come una stringa, ma di default Keras si aspetta che softmax sia già stato applicato ai risultati. Molti modelli invece forniscono come risultato i valori prima dell’applicazione del softmax, chiamati <em>logits</em>. Bisogna informare la funzione obiettivo che il nostro modello fa esattamente questo, e il solo modo di farlo è invocandola direttamente, non tramite la stringa che rappresenta il suo nome.</p>",Ze,V,Ce,Y,ke,B,ut="Il codice presentato qui sopra sicuramente funziona, ma la funzione obiettivo scende in maniera molto lenta e sporadica. La causa principale di ciò è la <em>learning rate</em> (tasso di apprendimento). Come con la funzione obiettivo, quando si passa il nome di un ottimizzatore a Keras tramite una stringa, Keras inizializza quell’ottimizzatore con i valori di default per tutti i parametri, inclusa la learning rate. Grazie alla nostra esperienza, però, sappiamo che i modelli transformer beneficiano da una learning rate molto più bassa del valore di default per Adam, che è 1e-3, scritto anche come 10 alla -3, o 0.001. Il valore 5e-5 (0.00005), circa venti volte più basso, è un punto di partenza migliore.",_e,H,ft="In aggiunta a diminuire la learning rate, abbiamo un secondo asso nella manica: possiamo ridurre lentamente la learning rate durante l’addestramento. Nella letteratura, questo approccio viene spesso indicato come <em>decaying</em> (decadimento) o <em>annealing</em> (ricottura) della learning rate. In Keras, il modo migliore per ottenere ciò è attraverso un <em>learning rate scheduler</em> (pianificatore del tasso di addestramento). Un buon esempio è <code>PolynomialDecay</code> (decadimento polinomiale) — nonostante il nome, con le impostazioni di default ha un semplice decadimento lineare dal valore iniziale a quello finale durante l’addestramento, che è esattamente ciò che cerchiamo. Per utilizzare lo scheduler in maniera corretta, però, bisogna dirgli quanto lungo sarà l’addestramento. Lo calcoliamo tramite la variabile <code>num_train_steps</code> nell’esempio qui sotto.",Ie,x,Xe,T,Mt="<p>La libreria 🤗 Transformers fornisce anche una funzione <code>create_optimizer()</code> che crea un ottimizzatore <code>AdamW</code> con decadimento della learning rate. Questa può essere una scorciatoia utile che verrà presentata nel dettaglio nelle sezioni future del corso.</p>",Re,q,bt="Adesso che abbiamo il nostro ottimizzatore nuovo di zecca, possiamo provare con un addestramento. Per prima cosa, ricarichiamo il modello, per resettare i cambiamenti ai pesi dall’addestramento precedente, dopodiché lo possiamo compilare con nuovo ottimizzatore.",We,N,Qe,E,yt="Ora chiamiamo di nuovo fit",Fe,S,Ve,U,ht='<p>💡 Se vuoi caricare il modello in maniera automatica all’Hub durante l’addestramento, puoi passare <code>PushToHubCallback</code> al metodo <code>model.fit()</code>. Maggiori dettagli verranno forniti nel <a href="/course/chapter4/3">Capitolo 4</a></p>',Ye,L,Be,A,He,P,wt="Vedere la funzione obiettivo che diminuisce durante l’addestramento è bello, ma se volessimo ottenere dei risultati dal modello addestrato, ad esempio per calcolare delle metriche o per usare il modello in produzione? Per questo, si può usare il metodo <code>predict()</code>. Questo metodo restituisce i `<em>logits</em> dalla testa del modello, uno per classe.",xe,D,qe,K,Jt="I logits possono essere convertiti nelle predizioni delle classi del modello usando <code>argmax</code> per trovare il logit più grande, che corrisponde alla classe più probabile.",Ne,O,Ee,ee,Se,te,Tt="Ora usiamo le <code>preds</code> per calcolare delle metriche! Si possono caricare le metriche associate al dataset MRPC in maniera facile tanto quanto caricare il dataset in sé, usando la funzione <code>load_metric()</code>. L’oggetto restituito ha un metodo <code>compute()</code> che può essere usato per calcolare le metriche.",Le,ae,Ae,le,Pe,se,Ut='L’esatto valore dei risultati ottenuti può variare, poiché l’inizializzazione casuale della testa del modello può cambiare le metriche ottenute. Qui vediamo che il nostro modello ha una accuratezza del 87.78% sul validation set e valore F1 di 89.97. Queste sono le due metriche utilizzare per valutare risultati sul dataset MRPC per il benchmark GLUE. La tabella nell’<a href="https://arxiv.org/pdf/1810.04805.pdf" rel="nofollow">articolo du BERT</a> riportava un valore F1 di 88.9 per il modello di base. Quello era il modello <code>uncased</code>, mentre qui stiamo usando il modello <code>cased</code>, il che spiega i migliori risultati.',De,ie,jt="Questo conclude l’introduzione all’affinamento usando l’API Keras. Un esempio per i compiti di NLP più comuni verrà fornito nel Capitolo 7. Per migliorare le vostre abilità con l’API Keras, provate ad affinare un modello sul dataset GLUE SST-2, usando il processing dei dati spiegato nella sezione 2.",Ke,ne,Oe,me,et;return h=new Rt({props:{fw:lt[0]}}),j=new _t({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),$=new tt({props:{title:"Affinare un modell usando Keras",local:"affinare-un-modell-usando-keras",headingTag:"h1"}}),v=new Xt({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_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/it/chapter3/section3_tf.ipynb"}]}}),G=new M({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyUwQWltcG9ydCUyMG51bXB5JTIwYXMlMjBucCUwQSUwQXJhd19kYXRhc2V0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQSUwQSUwQWRlZiUyMHRva2VuaXplX2Z1bmN0aW9uKGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVyKGV4YW1wbGUlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMjBleGFtcGxlJTVCJTIyc2VudGVuY2UyJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQSUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyh0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKSUwQSUwQXRmX3RyYWluX2RhdGFzZXQlMjAlM0QlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC50b190Zl9kYXRhc2V0KCUwQSUyMCUyMCUyMCUyMGNvbHVtbnMlM0QlNUIlMjJhdHRlbnRpb25fbWFzayUyMiUyQyUyMCUyMmlucHV0X2lkcyUyMiUyQyUyMCUyMnRva2VuX3R5cGVfaWRzJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwbGFiZWxfY29scyUzRCU1QiUyMmxhYmVscyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEOCUyQyUwQSklMEElMEF0Zl92YWxpZGF0aW9uX2RhdGFzZXQlMjAlM0QlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVELnRvX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwY29sdW1ucyUzRCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTJDJTIwJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIydG9rZW5fdHlwZV9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBsYWJlbF9jb2xzJTNEJTVCJTIybGFiZWxzJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzREZhbHNlJTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEOCUyQyUwQSk=",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
<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
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, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)
tf_train_dataset = tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>].to_tf_dataset(
columns=[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>],
label_cols=[<span class="hljs-string">&quot;labels&quot;</span>],
shuffle=<span class="hljs-literal">True</span>,
collate_fn=data_collator,
batch_size=<span class="hljs-number">8</span>,
)
tf_validation_dataset = tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>].to_tf_dataset(
columns=[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>],
label_cols=[<span class="hljs-string">&quot;labels&quot;</span>],
shuffle=<span class="hljs-literal">False</span>,
collate_fn=data_collator,
batch_size=<span class="hljs-number">8</span>,
)`,wrap:!1}}),Z=new tt({props:{title:"Addestramento",local:"addestramento",headingTag:"h3"}}),k=new at({props:{id:"rnTGBy2ax1c"}}),I=new at({props:{id:"AUozVp78dhk"}}),R=new M({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50JTJDJTIwbnVtX2xhYmVscyUzRDIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForSequenceClassification
model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)`,wrap:!1}}),F=new M({props:{code:"ZnJvbSUyMHRlbnNvcmZsb3cua2VyYXMubG9zc2VzJTIwaW1wb3J0JTIwU3BhcnNlQ2F0ZWdvcmljYWxDcm9zc2VudHJvcHklMEElMEFtb2RlbC5jb21waWxlKCUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRCUyMmFkYW0lMjIlMkMlMEElMjAlMjAlMjAlMjBsb3NzJTNEU3BhcnNlQ2F0ZWdvcmljYWxDcm9zc2VudHJvcHkoZnJvbV9sb2dpdHMlM0RUcnVlKSUyQyUwQSUyMCUyMCUyMCUyMG1ldHJpY3MlM0QlNUIlMjJhY2N1cmFjeSUyMiU1RCUyQyUwQSklMEFtb2RlbC5maXQoJTBBJTIwJTIwJTIwJTIwdGZfdHJhaW5fZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMHZhbGlkYXRpb25fZGF0YSUzRHRmX3ZhbGlkYXRpb25fZGF0YXNldCUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> tensorflow.keras.losses <span class="hljs-keyword">import</span> SparseCategoricalCrossentropy
model.<span class="hljs-built_in">compile</span>(
optimizer=<span class="hljs-string">&quot;adam&quot;</span>,
loss=SparseCategoricalCrossentropy(from_logits=<span class="hljs-literal">True</span>),
metrics=[<span class="hljs-string">&quot;accuracy&quot;</span>],
)
model.fit(
tf_train_dataset,
validation_data=tf_validation_dataset,
)`,wrap:!1}}),V=new tt({props:{title:"Migliorare la performance di addestramento",local:"migliorare-la-performance-di-addestramento",headingTag:"h3"}}),Y=new at({props:{id:"cpzq6ESSM5c"}}),x=new M({props:{code:"ZnJvbSUyMHRlbnNvcmZsb3cua2VyYXMub3B0aW1pemVycy5zY2hlZHVsZXMlMjBpbXBvcnQlMjBQb2x5bm9taWFsRGVjYXklMEElMEFiYXRjaF9zaXplJTIwJTNEJTIwOCUwQW51bV9lcG9jaHMlMjAlM0QlMjAzJTBBJTIzJTIwVGhlJTIwbnVtYmVyJTIwb2YlMjB0cmFpbmluZyUyMHN0ZXBzJTIwaXMlMjB0aGUlMjBudW1iZXIlMjBvZiUyMHNhbXBsZXMlMjBpbiUyMHRoZSUyMGRhdGFzZXQlMkMlMjBkaXZpZGVkJTIwYnklMjB0aGUlMjBiYXRjaCUyMHNpemUlMjB0aGVuJTIwbXVsdGlwbGllZCUwQSUyMyUyMGJ5JTIwdGhlJTIwdG90YWwlMjBudW1iZXIlMjBvZiUyMGVwb2Nocy4lMjBOb3RlJTIwdGhhdCUyMHRoZSUyMHRmX3RyYWluX2RhdGFzZXQlMjBoZXJlJTIwaXMlMjBhJTIwYmF0Y2hlZCUyMHRmLmRhdGEuRGF0YXNldCUyQyUwQSUyMyUyMG5vdCUyMHRoZSUyMG9yaWdpbmFsJTIwSHVnZ2luZyUyMEZhY2UlMjBEYXRhc2V0JTJDJTIwc28lMjBpdHMlMjBsZW4oKSUyMGlzJTIwYWxyZWFkeSUyMG51bV9zYW1wbGVzJTIwJTJGJTJGJTIwYmF0Y2hfc2l6ZS4lMEFudW1fdHJhaW5fc3RlcHMlMjAlM0QlMjBsZW4odGZfdHJhaW5fZGF0YXNldCklMjAqJTIwbnVtX2Vwb2NocyUwQWxyX3NjaGVkdWxlciUyMCUzRCUyMFBvbHlub21pYWxEZWNheSglMEElMjAlMjAlMjAlMjBpbml0aWFsX2xlYXJuaW5nX3JhdGUlM0Q1ZS01JTJDJTIwZW5kX2xlYXJuaW5nX3JhdGUlM0QwLjAlMkMlMjBkZWNheV9zdGVwcyUzRG51bV90cmFpbl9zdGVwcyUwQSklMEFmcm9tJTIwdGVuc29yZmxvdy5rZXJhcy5vcHRpbWl6ZXJzJTIwaW1wb3J0JTIwQWRhbSUwQSUwQW9wdCUyMCUzRCUyMEFkYW0obGVhcm5pbmdfcmF0ZSUzRGxyX3NjaGVkdWxlcik=",highlighted:`<span class="hljs-keyword">from</span> tensorflow.keras.optimizers.schedules <span class="hljs-keyword">import</span> PolynomialDecay
batch_size = <span class="hljs-number">8</span>
num_epochs = <span class="hljs-number">3</span>
<span class="hljs-comment"># The number of training steps is the number of samples in the dataset, divided by the batch size then multiplied</span>
<span class="hljs-comment"># by the total number of epochs. Note that the tf_train_dataset here is a batched tf.data.Dataset,</span>
<span class="hljs-comment"># not the original Hugging Face Dataset, so its len() is already num_samples // batch_size.</span>
num_train_steps = <span class="hljs-built_in">len</span>(tf_train_dataset) * num_epochs
lr_scheduler = PolynomialDecay(
initial_learning_rate=<span class="hljs-number">5e-5</span>, end_learning_rate=<span class="hljs-number">0.0</span>, decay_steps=num_train_steps
)
<span class="hljs-keyword">from</span> tensorflow.keras.optimizers <span class="hljs-keyword">import</span> Adam
opt = Adam(learning_rate=lr_scheduler)`,wrap:!1}}),N=new M({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFtb2RlbCUyMCUzRCUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCUyQyUyMG51bV9sYWJlbHMlM0QyKSUwQWxvc3MlMjAlM0QlMjB0Zi5rZXJhcy5sb3NzZXMuU3BhcnNlQ2F0ZWdvcmljYWxDcm9zc2VudHJvcHkoZnJvbV9sb2dpdHMlM0RUcnVlKSUwQW1vZGVsLmNvbXBpbGUob3B0aW1pemVyJTNEb3B0JTJDJTIwbG9zcyUzRGxvc3MlMkMlMjBtZXRyaWNzJTNEJTVCJTIyYWNjdXJhY3klMjIlNUQp",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf
model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=<span class="hljs-literal">True</span>)
model.<span class="hljs-built_in">compile</span>(optimizer=opt, loss=loss, metrics=[<span class="hljs-string">&quot;accuracy&quot;</span>])`,wrap:!1}}),S=new M({props:{code:"bW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjB2YWxpZGF0aW9uX2RhdGElM0R0Zl92YWxpZGF0aW9uX2RhdGFzZXQlMkMlMjBlcG9jaHMlM0QzKQ==",highlighted:'model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=<span class="hljs-number">3</span>)',wrap:!1}}),L=new tt({props:{title:"Predizioni del modello",local:"predizioni-del-modello",headingTag:"h3"}}),A=new at({props:{id:"nx10eh4CoOs"}}),D=new M({props:{code:"cHJlZHMlMjAlM0QlMjBtb2RlbC5wcmVkaWN0KHRmX3ZhbGlkYXRpb25fZGF0YXNldCklNUIlMjJsb2dpdHMlMjIlNUQ=",highlighted:'preds = model.predict(tf_validation_dataset)[<span class="hljs-string">&quot;logits&quot;</span>]',wrap:!1}}),O=new M({props:{code:"Y2xhc3NfcHJlZHMlMjAlM0QlMjBucC5hcmdtYXgocHJlZHMlMkMlMjBheGlzJTNEMSklMEFwcmludChwcmVkcy5zaGFwZSUyQyUyMGNsYXNzX3ByZWRzLnNoYXBlKQ==",highlighted:`class_preds = np.argmax(preds, axis=<span class="hljs-number">1</span>)
<span class="hljs-built_in">print</span>(preds.shape, class_preds.shape)`,wrap:!1}}),ee=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}}),ae=new M({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9tZXRyaWMlMEElMEFtZXRyaWMlMjAlM0QlMjBsb2FkX21ldHJpYyglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRGNsYXNzX3ByZWRzJTJDJTIwcmVmZXJlbmNlcyUzRHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQlNUIlMjJsYWJlbCUyMiU1RCk=",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=class_preds, references=raw_datasets[<span class="hljs-string">&quot;validation&quot;</span>][<span class="hljs-string">&quot;label&quot;</span>])`,wrap:!1}}),le=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}}),ne=new It({props:{source:"https://github.com/huggingface/course/blob/main/chapters/it/chapter3/3_tf.mdx"}}),{c(){b=n("meta"),oe=s(),y=n("p"),re=s(),o(h.$$.fragment),de=s(),o(j.$$.fragment),ce=s(),o($.$$.fragment),ue=s(),o(v.$$.fragment),fe=s(),z=n("p"),z.innerHTML=st,Me=s(),g=n("p"),g.textContent=it,be=s(),o(G.$$.fragment),ye=s(),o(Z.$$.fragment),he=s(),C=n("p"),C.textContent=nt,we=s(),o(k.$$.fragment),Je=s(),_=n("p"),_.textContent=ot,Te=s(),o(I.$$.fragment),Ue=s(),X=n("p"),X.innerHTML=rt,je=s(),o(R.$$.fragment),$e=s(),W=n("p"),W.innerHTML=pt,ve=s(),Q=n("p"),Q.innerHTML=mt,ze=s(),w=n("blockquote"),w.innerHTML=dt,ge=s(),o(F.$$.fragment),Ge=s(),J=n("blockquote"),J.innerHTML=ct,Ze=s(),o(V.$$.fragment),Ce=s(),o(Y.$$.fragment),ke=s(),B=n("p"),B.innerHTML=ut,_e=s(),H=n("p"),H.innerHTML=ft,Ie=s(),o(x.$$.fragment),Xe=s(),T=n("blockquote"),T.innerHTML=Mt,Re=s(),q=n("p"),q.textContent=bt,We=s(),o(N.$$.fragment),Qe=s(),E=n("p"),E.textContent=yt,Fe=s(),o(S.$$.fragment),Ve=s(),U=n("blockquote"),U.innerHTML=ht,Ye=s(),o(L.$$.fragment),Be=s(),o(A.$$.fragment),He=s(),P=n("p"),P.innerHTML=wt,xe=s(),o(D.$$.fragment),qe=s(),K=n("p"),K.innerHTML=Jt,Ne=s(),o(O.$$.fragment),Ee=s(),o(ee.$$.fragment),Se=s(),te=n("p"),te.innerHTML=Tt,Le=s(),o(ae.$$.fragment),Ae=s(),o(le.$$.fragment),Pe=s(),se=n("p"),se.innerHTML=Ut,De=s(),ie=n("p"),ie.textContent=jt,Ke=s(),o(ne.$$.fragment),Oe=s(),me=n("p"),this.h()},l(e){const t=Ct("svelte-u9bgzb",document.head);b=r(t,"META",{name:!0,content:!0}),t.forEach(a),oe=i(e),y=r(e,"P",{}),vt(y).forEach(a),re=i(e),p(h.$$.fragment,e),de=i(e),p(j.$$.fragment,e),ce=i(e),p($.$$.fragment,e),ue=i(e),p(v.$$.fragment,e),fe=i(e),z=r(e,"P",{"data-svelte-h":!0}),f(z)!=="svelte-mazm0f"&&(z.innerHTML=st),Me=i(e),g=r(e,"P",{"data-svelte-h":!0}),f(g)!=="svelte-11al6ht"&&(g.textContent=it),be=i(e),p(G.$$.fragment,e),ye=i(e),p(Z.$$.fragment,e),he=i(e),C=r(e,"P",{"data-svelte-h":!0}),f(C)!=="svelte-29hd6y"&&(C.textContent=nt),we=i(e),p(k.$$.fragment,e),Je=i(e),_=r(e,"P",{"data-svelte-h":!0}),f(_)!=="svelte-t32qum"&&(_.textContent=ot),Te=i(e),p(I.$$.fragment,e),Ue=i(e),X=r(e,"P",{"data-svelte-h":!0}),f(X)!=="svelte-rpqwya"&&(X.innerHTML=rt),je=i(e),p(R.$$.fragment,e),$e=i(e),W=r(e,"P",{"data-svelte-h":!0}),f(W)!=="svelte-12uqbjy"&&(W.innerHTML=pt),ve=i(e),Q=r(e,"P",{"data-svelte-h":!0}),f(Q)!=="svelte-elvb6f"&&(Q.innerHTML=mt),ze=i(e),w=r(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),f(w)!=="svelte-112k3n1"&&(w.innerHTML=dt),ge=i(e),p(F.$$.fragment,e),Ge=i(e),J=r(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),f(J)!=="svelte-ah0a2d"&&(J.innerHTML=ct),Ze=i(e),p(V.$$.fragment,e),Ce=i(e),p(Y.$$.fragment,e),ke=i(e),B=r(e,"P",{"data-svelte-h":!0}),f(B)!=="svelte-14aoo6j"&&(B.innerHTML=ut),_e=i(e),H=r(e,"P",{"data-svelte-h":!0}),f(H)!=="svelte-1jd05ug"&&(H.innerHTML=ft),Ie=i(e),p(x.$$.fragment,e),Xe=i(e),T=r(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),f(T)!=="svelte-lqb3kw"&&(T.innerHTML=Mt),Re=i(e),q=r(e,"P",{"data-svelte-h":!0}),f(q)!=="svelte-oxsztq"&&(q.textContent=bt),We=i(e),p(N.$$.fragment,e),Qe=i(e),E=r(e,"P",{"data-svelte-h":!0}),f(E)!=="svelte-8qduz1"&&(E.textContent=yt),Fe=i(e),p(S.$$.fragment,e),Ve=i(e),U=r(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),f(U)!=="svelte-x4a3co"&&(U.innerHTML=ht),Ye=i(e),p(L.$$.fragment,e),Be=i(e),p(A.$$.fragment,e),He=i(e),P=r(e,"P",{"data-svelte-h":!0}),f(P)!=="svelte-1xxp91"&&(P.innerHTML=wt),xe=i(e),p(D.$$.fragment,e),qe=i(e),K=r(e,"P",{"data-svelte-h":!0}),f(K)!=="svelte-1ylry8s"&&(K.innerHTML=Jt),Ne=i(e),p(O.$$.fragment,e),Ee=i(e),p(ee.$$.fragment,e),Se=i(e),te=r(e,"P",{"data-svelte-h":!0}),f(te)!=="svelte-oorxl5"&&(te.innerHTML=Tt),Le=i(e),p(ae.$$.fragment,e),Ae=i(e),p(le.$$.fragment,e),Pe=i(e),se=r(e,"P",{"data-svelte-h":!0}),f(se)!=="svelte-nmfkbr"&&(se.innerHTML=Ut),De=i(e),ie=r(e,"P",{"data-svelte-h":!0}),f(ie)!=="svelte-1xhes2n"&&(ie.textContent=jt),Ke=i(e),p(ne.$$.fragment,e),Oe=i(e),me=r(e,"P",{}),vt(me).forEach(a),this.h()},h(){pe(b,"name","hf:doc:metadata"),pe(b,"content",Qt),pe(w,"class","tip"),pe(J,"class","warning"),pe(T,"class","tip"),pe(U,"class","tip")},m(e,t){kt(document.head,b),l(e,oe,t),l(e,y,t),l(e,re,t),m(h,e,t),l(e,de,t),m(j,e,t),l(e,ce,t),m($,e,t),l(e,ue,t),m(v,e,t),l(e,fe,t),l(e,z,t),l(e,Me,t),l(e,g,t),l(e,be,t),m(G,e,t),l(e,ye,t),m(Z,e,t),l(e,he,t),l(e,C,t),l(e,we,t),m(k,e,t),l(e,Je,t),l(e,_,t),l(e,Te,t),m(I,e,t),l(e,Ue,t),l(e,X,t),l(e,je,t),m(R,e,t),l(e,$e,t),l(e,W,t),l(e,ve,t),l(e,Q,t),l(e,ze,t),l(e,w,t),l(e,ge,t),m(F,e,t),l(e,Ge,t),l(e,J,t),l(e,Ze,t),m(V,e,t),l(e,Ce,t),m(Y,e,t),l(e,ke,t),l(e,B,t),l(e,_e,t),l(e,H,t),l(e,Ie,t),m(x,e,t),l(e,Xe,t),l(e,T,t),l(e,Re,t),l(e,q,t),l(e,We,t),m(N,e,t),l(e,Qe,t),l(e,E,t),l(e,Fe,t),m(S,e,t),l(e,Ve,t),l(e,U,t),l(e,Ye,t),m(L,e,t),l(e,Be,t),m(A,e,t),l(e,He,t),l(e,P,t),l(e,xe,t),m(D,e,t),l(e,qe,t),l(e,K,t),l(e,Ne,t),m(O,e,t),l(e,Ee,t),m(ee,e,t),l(e,Se,t),l(e,te,t),l(e,Le,t),m(ae,e,t),l(e,Ae,t),m(le,e,t),l(e,Pe,t),l(e,se,t),l(e,De,t),l(e,ie,t),l(e,Ke,t),m(ne,e,t),l(e,Oe,t),l(e,me,t),et=!0},p(e,[t]){const $t={};t&1&&($t.fw=e[0]),h.$set($t)},i(e){et||(d(h.$$.fragment,e),d(j.$$.fragment,e),d($.$$.fragment,e),d(v.$$.fragment,e),d(G.$$.fragment,e),d(Z.$$.fragment,e),d(k.$$.fragment,e),d(I.$$.fragment,e),d(R.$$.fragment,e),d(F.$$.fragment,e),d(V.$$.fragment,e),d(Y.$$.fragment,e),d(x.$$.fragment,e),d(N.$$.fragment,e),d(S.$$.fragment,e),d(L.$$.fragment,e),d(A.$$.fragment,e),d(D.$$.fragment,e),d(O.$$.fragment,e),d(ee.$$.fragment,e),d(ae.$$.fragment,e),d(le.$$.fragment,e),d(ne.$$.fragment,e),et=!0)},o(e){c(h.$$.fragment,e),c(j.$$.fragment,e),c($.$$.fragment,e),c(v.$$.fragment,e),c(G.$$.fragment,e),c(Z.$$.fragment,e),c(k.$$.fragment,e),c(I.$$.fragment,e),c(R.$$.fragment,e),c(F.$$.fragment,e),c(V.$$.fragment,e),c(Y.$$.fragment,e),c(x.$$.fragment,e),c(N.$$.fragment,e),c(S.$$.fragment,e),c(L.$$.fragment,e),c(A.$$.fragment,e),c(D.$$.fragment,e),c(O.$$.fragment,e),c(ee.$$.fragment,e),c(ae.$$.fragment,e),c(le.$$.fragment,e),c(ne.$$.fragment,e),et=!1},d(e){e&&(a(oe),a(y),a(re),a(de),a(ce),a(ue),a(fe),a(z),a(Me),a(g),a(be),a(ye),a(he),a(C),a(we),a(Je),a(_),a(Te),a(Ue),a(X),a(je),a($e),a(W),a(ve),a(Q),a(ze),a(w),a(ge),a(Ge),a(J),a(Ze),a(Ce),a(ke),a(B),a(_e),a(H),a(Ie),a(Xe),a(T),a(Re),a(q),a(We),a(Qe),a(E),a(Fe),a(Ve),a(U),a(Ye),a(Be),a(He),a(P),a(xe),a(qe),a(K),a(Ne),a(Ee),a(Se),a(te),a(Le),a(Ae),a(Pe),a(se),a(De),a(ie),a(Ke),a(Oe),a(me)),a(b),u(h,e),u(j,e),u($,e),u(v,e),u(G,e),u(Z,e),u(k,e),u(I,e),u(R,e),u(F,e),u(V,e),u(Y,e),u(x,e),u(N,e),u(S,e),u(L,e),u(A,e),u(D,e),u(O,e),u(ee,e),u(ae,e),u(le,e),u(ne,e)}}}const Qt='{"title":"Affinare un modell usando Keras","local":"affinare-un-modell-usando-keras","sections":[{"title":"Addestramento","local":"addestramento","sections":[],"depth":3},{"title":"Migliorare la performance di addestramento","local":"migliorare-la-performance-di-addestramento","sections":[],"depth":3},{"title":"Predizioni del modello","local":"predizioni-del-modello","sections":[],"depth":3}],"depth":1}';function Ft(lt,b,oe){let y="pt";return gt(()=>{const re=new URLSearchParams(window.location.search);oe(0,y=re.get("fw")||"pt")}),[y]}class Et extends Gt{constructor(b){super(),Zt(this,b,Ft,Wt,zt,{})}}export{Et as component};

Xet Storage Details

Size:
27.9 kB
·
Xet hash:
7bab715a787a970cb11f884b5be01836496ca89a0fe9c823e616240a7b250c03

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