Buckets:

rtrm's picture
download
raw
28.5 kB
import{s as zt,o as gt,n as at}from"../chunks/scheduler.37c15a92.js";import{S as Gt,i as Zt,g as f,s,r,A as _t,h as M,f as a,c as i,j as jt,u as p,x as b,k as vt,y as Ct,a as l,v as m,d,t as c,w as u}from"../chunks/index.2bf4358c.js";import{T as Oe}from"../chunks/Tip.363c041f.js";import{Y as et}from"../chunks/Youtube.1e50a667.js";import{C as w}from"../chunks/CodeBlock.4e987730.js";import{D as kt}from"../chunks/DocNotebookDropdown.efc1fb7c.js";import{F as It}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as tt,E as Xt}from"../chunks/getInferenceSnippets.ebf8be91.js";function Rt($){let n,h="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.";return{c(){n=f("p"),n.innerHTML=h},l(o){n=M(o,"P",{"data-svelte-h":!0}),b(n)!=="svelte-ez7phw"&&(n.innerHTML=h)},m(o,y){l(o,n,y)},p:at,d(o){o&&a(n)}}}function Wt($){let n,h="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.";return{c(){n=f("p"),n.innerHTML=h},l(o){n=M(o,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1knd3lr"&&(n.innerHTML=h)},m(o,y){l(o,n,y)},p:at,d(o){o&&a(n)}}}function Ft($){let n,h="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.";return{c(){n=f("p"),n.innerHTML=h},l(o){n=M(o,"P",{"data-svelte-h":!0}),b(n)!=="svelte-12088bb"&&(n.innerHTML=h)},m(o,y){l(o,n,y)},p:at,d(o){o&&a(n)}}}function Qt($){let n,h='💡 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>';return{c(){n=f("p"),n.innerHTML=h},l(o){n=M(o,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1b5s7xj"&&(n.innerHTML=h)},m(o,y){l(o,n,y)},p:at,d(o){o&&a(n)}}}function Vt($){let n,h,o,y,J,me,z,de,g,ce,G,lt='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>.',ue,Z,st="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:",fe,_,Me,C,be,k,it="I modelli di TensorFlow importati da 🤗 Transformers sono già dei modelli Keras. Ecco una breve introduzione a Keras.",he,I,ye,X,nt="Ciò significa che una volta che si hanno i dati, è richiesto poco lavoro aggiuntivo per cominciare l’addestramento.",$e,R,we,W,ot='Come nel <a href="/course/chapter2">capitolo precedente</a>, verrà utilizzata la classe <code>TFAutoModelForSequenceClassification</code> con due etichette:',Je,F,Te,Q,rt='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.',Ue,V,pt="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.",je,T,ve,Y,ze,U,ge,H,Ge,B,Ze,x,mt="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,N,dt="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.",Ce,q,ke,j,Ie,E,ct="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.",Xe,S,Re,A,ut="Ora chiamiamo di nuovo fit",We,P,Fe,v,Qe,L,Ve,D,Ye,K,ft="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.",He,O,Be,ee,Mt="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.",xe,te,Ne,ae,qe,le,bt="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.",Ee,se,Se,ie,Ae,ne,ht='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.',Pe,oe,yt="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.",Le,re,De,pe,Ke;return J=new It({props:{fw:$[0]}}),z=new tt({props:{title:"Affinare un modell usando Keras",local:"affinare-un-modell-usando-keras",headingTag:"h1"}}),g=new kt({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"}]}}),_=new w({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}}),C=new tt({props:{title:"Addestramento",local:"addestramento",headingTag:"h3"}}),I=new et({props:{id:"rnTGBy2ax1c"}}),R=new et({props:{id:"AUozVp78dhk"}}),F=new w({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}}),T=new Oe({props:{$$slots:{default:[Rt]},$$scope:{ctx:$}}}),Y=new w({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}}),U=new Oe({props:{warning:!0,$$slots:{default:[Wt]},$$scope:{ctx:$}}}),H=new tt({props:{title:"Migliorare la performance di addestramento",local:"migliorare-la-performance-di-addestramento",headingTag:"h3"}}),B=new et({props:{id:"cpzq6ESSM5c"}}),q=new w({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}}),j=new Oe({props:{$$slots:{default:[Ft]},$$scope:{ctx:$}}}),S=new w({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}}),P=new w({props:{code:"bW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjB2YWxpZGF0aW9uX2RhdGElM0R0Zl92YWxpZGF0aW9uX2RhdGFzZXQlMkMlMjBlcG9jaHMlM0QzKQ==",highlighted:'model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=<span class="hljs-number">3</span>)',wrap:!1}}),v=new Oe({props:{$$slots:{default:[Qt]},$$scope:{ctx:$}}}),L=new tt({props:{title:"Predizioni del modello",local:"predizioni-del-modello",headingTag:"h3"}}),D=new et({props:{id:"nx10eh4CoOs"}}),O=new w({props:{code:"cHJlZHMlMjAlM0QlMjBtb2RlbC5wcmVkaWN0KHRmX3ZhbGlkYXRpb25fZGF0YXNldCklNUIlMjJsb2dpdHMlMjIlNUQ=",highlighted:'preds = model.predict(tf_validation_dataset)[<span class="hljs-string">&quot;logits&quot;</span>]',wrap:!1}}),te=new w({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}}),ae=new w({props:{code:"KDQwOCUyQyUyMDIpJTIwKDQwOCUyQyk=",highlighted:'(<span class="hljs-number">408</span>, <span class="hljs-number">2</span>) (<span class="hljs-number">408</span>,)',wrap:!1}}),se=new w({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}}),ie=new w({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}}),re=new Xt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/it/chapter3/3_tf.mdx"}}),{c(){n=f("meta"),h=s(),o=f("p"),y=s(),r(J.$$.fragment),me=s(),r(z.$$.fragment),de=s(),r(g.$$.fragment),ce=s(),G=f("p"),G.innerHTML=lt,ue=s(),Z=f("p"),Z.textContent=st,fe=s(),r(_.$$.fragment),Me=s(),r(C.$$.fragment),be=s(),k=f("p"),k.textContent=it,he=s(),r(I.$$.fragment),ye=s(),X=f("p"),X.textContent=nt,$e=s(),r(R.$$.fragment),we=s(),W=f("p"),W.innerHTML=ot,Je=s(),r(F.$$.fragment),Te=s(),Q=f("p"),Q.innerHTML=rt,Ue=s(),V=f("p"),V.innerHTML=pt,je=s(),r(T.$$.fragment),ve=s(),r(Y.$$.fragment),ze=s(),r(U.$$.fragment),ge=s(),r(H.$$.fragment),Ge=s(),r(B.$$.fragment),Ze=s(),x=f("p"),x.innerHTML=mt,_e=s(),N=f("p"),N.innerHTML=dt,Ce=s(),r(q.$$.fragment),ke=s(),r(j.$$.fragment),Ie=s(),E=f("p"),E.textContent=ct,Xe=s(),r(S.$$.fragment),Re=s(),A=f("p"),A.textContent=ut,We=s(),r(P.$$.fragment),Fe=s(),r(v.$$.fragment),Qe=s(),r(L.$$.fragment),Ve=s(),r(D.$$.fragment),Ye=s(),K=f("p"),K.innerHTML=ft,He=s(),r(O.$$.fragment),Be=s(),ee=f("p"),ee.innerHTML=Mt,xe=s(),r(te.$$.fragment),Ne=s(),r(ae.$$.fragment),qe=s(),le=f("p"),le.innerHTML=bt,Ee=s(),r(se.$$.fragment),Se=s(),r(ie.$$.fragment),Ae=s(),ne=f("p"),ne.innerHTML=ht,Pe=s(),oe=f("p"),oe.textContent=yt,Le=s(),r(re.$$.fragment),De=s(),pe=f("p"),this.h()},l(e){const t=_t("svelte-u9bgzb",document.head);n=M(t,"META",{name:!0,content:!0}),t.forEach(a),h=i(e),o=M(e,"P",{}),jt(o).forEach(a),y=i(e),p(J.$$.fragment,e),me=i(e),p(z.$$.fragment,e),de=i(e),p(g.$$.fragment,e),ce=i(e),G=M(e,"P",{"data-svelte-h":!0}),b(G)!=="svelte-mazm0f"&&(G.innerHTML=lt),ue=i(e),Z=M(e,"P",{"data-svelte-h":!0}),b(Z)!=="svelte-11al6ht"&&(Z.textContent=st),fe=i(e),p(_.$$.fragment,e),Me=i(e),p(C.$$.fragment,e),be=i(e),k=M(e,"P",{"data-svelte-h":!0}),b(k)!=="svelte-29hd6y"&&(k.textContent=it),he=i(e),p(I.$$.fragment,e),ye=i(e),X=M(e,"P",{"data-svelte-h":!0}),b(X)!=="svelte-t32qum"&&(X.textContent=nt),$e=i(e),p(R.$$.fragment,e),we=i(e),W=M(e,"P",{"data-svelte-h":!0}),b(W)!=="svelte-rpqwya"&&(W.innerHTML=ot),Je=i(e),p(F.$$.fragment,e),Te=i(e),Q=M(e,"P",{"data-svelte-h":!0}),b(Q)!=="svelte-12uqbjy"&&(Q.innerHTML=rt),Ue=i(e),V=M(e,"P",{"data-svelte-h":!0}),b(V)!=="svelte-elvb6f"&&(V.innerHTML=pt),je=i(e),p(T.$$.fragment,e),ve=i(e),p(Y.$$.fragment,e),ze=i(e),p(U.$$.fragment,e),ge=i(e),p(H.$$.fragment,e),Ge=i(e),p(B.$$.fragment,e),Ze=i(e),x=M(e,"P",{"data-svelte-h":!0}),b(x)!=="svelte-14aoo6j"&&(x.innerHTML=mt),_e=i(e),N=M(e,"P",{"data-svelte-h":!0}),b(N)!=="svelte-1jd05ug"&&(N.innerHTML=dt),Ce=i(e),p(q.$$.fragment,e),ke=i(e),p(j.$$.fragment,e),Ie=i(e),E=M(e,"P",{"data-svelte-h":!0}),b(E)!=="svelte-oxsztq"&&(E.textContent=ct),Xe=i(e),p(S.$$.fragment,e),Re=i(e),A=M(e,"P",{"data-svelte-h":!0}),b(A)!=="svelte-8qduz1"&&(A.textContent=ut),We=i(e),p(P.$$.fragment,e),Fe=i(e),p(v.$$.fragment,e),Qe=i(e),p(L.$$.fragment,e),Ve=i(e),p(D.$$.fragment,e),Ye=i(e),K=M(e,"P",{"data-svelte-h":!0}),b(K)!=="svelte-1xxp91"&&(K.innerHTML=ft),He=i(e),p(O.$$.fragment,e),Be=i(e),ee=M(e,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-1ylry8s"&&(ee.innerHTML=Mt),xe=i(e),p(te.$$.fragment,e),Ne=i(e),p(ae.$$.fragment,e),qe=i(e),le=M(e,"P",{"data-svelte-h":!0}),b(le)!=="svelte-oorxl5"&&(le.innerHTML=bt),Ee=i(e),p(se.$$.fragment,e),Se=i(e),p(ie.$$.fragment,e),Ae=i(e),ne=M(e,"P",{"data-svelte-h":!0}),b(ne)!=="svelte-nmfkbr"&&(ne.innerHTML=ht),Pe=i(e),oe=M(e,"P",{"data-svelte-h":!0}),b(oe)!=="svelte-1xhes2n"&&(oe.textContent=yt),Le=i(e),p(re.$$.fragment,e),De=i(e),pe=M(e,"P",{}),jt(pe).forEach(a),this.h()},h(){vt(n,"name","hf:doc:metadata"),vt(n,"content",Yt)},m(e,t){Ct(document.head,n),l(e,h,t),l(e,o,t),l(e,y,t),m(J,e,t),l(e,me,t),m(z,e,t),l(e,de,t),m(g,e,t),l(e,ce,t),l(e,G,t),l(e,ue,t),l(e,Z,t),l(e,fe,t),m(_,e,t),l(e,Me,t),m(C,e,t),l(e,be,t),l(e,k,t),l(e,he,t),m(I,e,t),l(e,ye,t),l(e,X,t),l(e,$e,t),m(R,e,t),l(e,we,t),l(e,W,t),l(e,Je,t),m(F,e,t),l(e,Te,t),l(e,Q,t),l(e,Ue,t),l(e,V,t),l(e,je,t),m(T,e,t),l(e,ve,t),m(Y,e,t),l(e,ze,t),m(U,e,t),l(e,ge,t),m(H,e,t),l(e,Ge,t),m(B,e,t),l(e,Ze,t),l(e,x,t),l(e,_e,t),l(e,N,t),l(e,Ce,t),m(q,e,t),l(e,ke,t),m(j,e,t),l(e,Ie,t),l(e,E,t),l(e,Xe,t),m(S,e,t),l(e,Re,t),l(e,A,t),l(e,We,t),m(P,e,t),l(e,Fe,t),m(v,e,t),l(e,Qe,t),m(L,e,t),l(e,Ve,t),m(D,e,t),l(e,Ye,t),l(e,K,t),l(e,He,t),m(O,e,t),l(e,Be,t),l(e,ee,t),l(e,xe,t),m(te,e,t),l(e,Ne,t),m(ae,e,t),l(e,qe,t),l(e,le,t),l(e,Ee,t),m(se,e,t),l(e,Se,t),m(ie,e,t),l(e,Ae,t),l(e,ne,t),l(e,Pe,t),l(e,oe,t),l(e,Le,t),m(re,e,t),l(e,De,t),l(e,pe,t),Ke=!0},p(e,[t]){const $t={};t&1&&($t.fw=e[0]),J.$set($t);const wt={};t&2&&(wt.$$scope={dirty:t,ctx:e}),T.$set(wt);const Jt={};t&2&&(Jt.$$scope={dirty:t,ctx:e}),U.$set(Jt);const Tt={};t&2&&(Tt.$$scope={dirty:t,ctx:e}),j.$set(Tt);const Ut={};t&2&&(Ut.$$scope={dirty:t,ctx:e}),v.$set(Ut)},i(e){Ke||(d(J.$$.fragment,e),d(z.$$.fragment,e),d(g.$$.fragment,e),d(_.$$.fragment,e),d(C.$$.fragment,e),d(I.$$.fragment,e),d(R.$$.fragment,e),d(F.$$.fragment,e),d(T.$$.fragment,e),d(Y.$$.fragment,e),d(U.$$.fragment,e),d(H.$$.fragment,e),d(B.$$.fragment,e),d(q.$$.fragment,e),d(j.$$.fragment,e),d(S.$$.fragment,e),d(P.$$.fragment,e),d(v.$$.fragment,e),d(L.$$.fragment,e),d(D.$$.fragment,e),d(O.$$.fragment,e),d(te.$$.fragment,e),d(ae.$$.fragment,e),d(se.$$.fragment,e),d(ie.$$.fragment,e),d(re.$$.fragment,e),Ke=!0)},o(e){c(J.$$.fragment,e),c(z.$$.fragment,e),c(g.$$.fragment,e),c(_.$$.fragment,e),c(C.$$.fragment,e),c(I.$$.fragment,e),c(R.$$.fragment,e),c(F.$$.fragment,e),c(T.$$.fragment,e),c(Y.$$.fragment,e),c(U.$$.fragment,e),c(H.$$.fragment,e),c(B.$$.fragment,e),c(q.$$.fragment,e),c(j.$$.fragment,e),c(S.$$.fragment,e),c(P.$$.fragment,e),c(v.$$.fragment,e),c(L.$$.fragment,e),c(D.$$.fragment,e),c(O.$$.fragment,e),c(te.$$.fragment,e),c(ae.$$.fragment,e),c(se.$$.fragment,e),c(ie.$$.fragment,e),c(re.$$.fragment,e),Ke=!1},d(e){e&&(a(h),a(o),a(y),a(me),a(de),a(ce),a(G),a(ue),a(Z),a(fe),a(Me),a(be),a(k),a(he),a(ye),a(X),a($e),a(we),a(W),a(Je),a(Te),a(Q),a(Ue),a(V),a(je),a(ve),a(ze),a(ge),a(Ge),a(Ze),a(x),a(_e),a(N),a(Ce),a(ke),a(Ie),a(E),a(Xe),a(Re),a(A),a(We),a(Fe),a(Qe),a(Ve),a(Ye),a(K),a(He),a(Be),a(ee),a(xe),a(Ne),a(qe),a(le),a(Ee),a(Se),a(Ae),a(ne),a(Pe),a(oe),a(Le),a(De),a(pe)),a(n),u(J,e),u(z,e),u(g,e),u(_,e),u(C,e),u(I,e),u(R,e),u(F,e),u(T,e),u(Y,e),u(U,e),u(H,e),u(B,e),u(q,e),u(j,e),u(S,e),u(P,e),u(v,e),u(L,e),u(D,e),u(O,e),u(te,e),u(ae,e),u(se,e),u(ie,e),u(re,e)}}}const Yt='{"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 Ht($,n,h){let o="pt";return gt(()=>{const y=new URLSearchParams(window.location.search);h(0,o=y.get("fw")||"pt")}),[o]}class Lt extends Gt{constructor(n){super(),Zt(this,n,Ht,Vt,zt,{})}}export{Lt as component};

Xet Storage Details

Size:
28.5 kB
·
Xet hash:
61024450a8dae331530246fce44d49524f243ef814b23cad907dd75cfc26ca1a

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