Buckets:

rtrm's picture
download
raw
28.7 kB
import{s as Gt,o as Zt,n as oe}from"../chunks/scheduler.49e4e380.js";import{S as _t,i as Wt,g as c,s as a,r as d,A as Ct,h as M,f as n,c as i,j as zt,u as p,x as w,k as vt,y as It,a as s,v as m,d as u,t as o,w as f}from"../chunks/index.fb15006d.js";import{T as ue}from"../chunks/Tip.f590f2e1.js";import{Y as st}from"../chunks/Youtube.42918e4e.js";import{C as $}from"../chunks/CodeBlock.3f4fbe91.js";import{C as Rt}from"../chunks/CourseFloatingBanner.c832fd1e.js";import{F as Xt}from"../chunks/FrameworkSwitchCourse.f837e098.js";import{H as lt,E as Vt}from"../chunks/getInferenceSnippets.ea935248.js";function Ft(g){let l,h="🤗 Transformer Modelle haben eine besondere Fähigkeit, die die meisten Keras Modelle nicht haben - sie können automatisch einen geeigneten Verlust verwenden, der intern berechnet wird. Dieser Verlust wird standardmäßig verwendet, wenn in <code>compile()</code> kein Verlustargument angegeben wird. Um den internen Verlust zu verwenden, musst du deine Labels als Teil des Input übergeben und nicht als separates Label, wie es normalerweise bei Keras-Modellen der Fall ist. Beispiele dafür gibt es in Teil 2 des Kurses, wobei die Definition der richtigen Verlustfunktion schwierig sein kann. Für die Klassifizierung von Sequenzen eignet sich jedoch eine der Standardverlustfunktionen von Keras, die wir hier verwenden werden.";return{c(){l=c("p"),l.innerHTML=h},l(r){l=M(r,"P",{"data-svelte-h":!0}),w(l)!=="svelte-12e66dn"&&(l.innerHTML=h)},m(r,b){s(r,l,b)},p:oe,d(r){r&&n(l)}}}function Bt(g){let l,h="Hier gibt es einen sehr häufigen Stolperstein - du <em>kannst</em> Keras einfach den Namen des Verlusts als String übergeben, aber standardmäßig geht Keras davon aus, dass du bereits einen Softmax auf die Outputs angewendet hast. Viele Modelle geben jedoch die Werte direkt vor der Anwendung des Softmax als <em>Logits</em> aus. Hier ist es wichtig der Keras Verlustfunktion mitzuteilen, dass unser Modell genau diess tut, und das geht nur indem sie direkt aufgerufen wird, und nicht über den Namen mit einem String.";return{c(){l=c("p"),l.innerHTML=h},l(r){l=M(r,"P",{"data-svelte-h":!0}),w(l)!=="svelte-1u9qe6s"&&(l.innerHTML=h)},m(r,b){s(r,l,b)},p:oe,d(r){r&&n(l)}}}function Ht(g){let l,h="Die 🤗 Transformer Bibliothek hat eine <code>create_optimizer()</code>-Funktion, die einen <code>AdamW</code>-Optimierer mit Lernratenabfall erzeugt. Das ist eine praktisches Tool, auf das wir in den nächsten Abschnitten des Kurses im Detail eingehen werden.";return{c(){l=c("p"),l.innerHTML=h},l(r){l=M(r,"P",{"data-svelte-h":!0}),w(l)!=="svelte-1hdqlay"&&(l.innerHTML=h)},m(r,b){s(r,l,b)},p:oe,d(r){r&&n(l)}}}function Yt(g){let l,h='💡 Wenn du dein Modell während des Trainings automatisch in den Hub hochladen möchtest, kannst du in der Methode <code>model.fit()</code> einen <code>PushToHubCallback</code> mitgeben. Mehr darüber erfahren wir in <a href="/course/chapter4/3">Kapitel 4</a>';return{c(){l=c("p"),l.innerHTML=h},l(r){l=M(r,"P",{"data-svelte-h":!0}),w(l)!=="svelte-1re7et1"&&(l.innerHTML=h)},m(r,b){s(r,l,b)},p:oe,d(r){r&&n(l)}}}function Qt(g){let l,h="✏️ <strong>Probier es aus!</strong> Fein-tune ein Modell mit dem GLUE SST-2 Datensatz, indem du die Datenverarbeitung aus Abschnitt 2 verwendest.";return{c(){l=c("p"),l.innerHTML=h},l(r){l=M(r,"P",{"data-svelte-h":!0}),w(l)!=="svelte-psk4g8"&&(l.innerHTML=h)},m(r,b){s(r,l,b)},p:oe,d(r){r&&n(l)}}}function St(g){let l,h,r,b,y,fe,z,ce,v,Me,G,at='Wenn du die Datenvorverarbeitung im letzten Abschnitt abgeschlossen hast, brauchst es nur noch wenige Schritte, um das Modell zu trainieren. Beachte jedoch, dass der Befehl <code>model.fit()</code> auf einer CPU sehr langsam läuft. Wenn du keinen GPU hast, kannst du auf [Google Colab] (<a href="https://colab.research.google.com/" rel="nofollow">https://colab.research.google.com/</a>) kostenlos auf GPUs und TPUs zugreifen.',he,Z,it="Bei den folgenden Codebeispielen wird davon ausgegangen, dass du die Beispiele aus dem vorherigen Abschnitt bereits ausgeführt hast. Hier ist eine kurze Zusammenfassung, die aufzeigt was erwartet wird:",we,_,be,W,ge,C,rt="Tensorflow Modelle, die von 🤗 Transformers importiert werden, sind bereits Keras Modelle. Hier ist eine kurze Einführung in Keras.",$e,I,ye,R,dt="Sobald wir die Daten haben, braucht es nur noch sehr wenig Arbeit, um mit dem Training zu beginnen.",Te,X,Je,V,pt='Wie im <a href="/course/chapter2">vorherigen Kapitel</a> verwenden wir die Klasse <code>TFAutoModelForSequenceClassification</code> mit zwei Labels:',je,F,Ue,B,mt='Im Gegensatz zu <a href="/course/chapter2">Kapitel 2</a> wird eine Warnung angezeigt, nachdem das Modell instanziiert wurde. Das liegt daran, dass BERT nicht auf die Klassifizierung von Satzpaaren vortrainiert wurde. Deshalb wurde der Kopf des vortrainierten Modells verworfen und stattdessen ein neuer Kopf eingefügt, der für die Klassifizierung von Sequenzen geeignet ist. Die Warnungen zeigen an, dass Teil der Gewichtung nicht verwendet wurden (die Gewichte für den verworfenen Kopf) und dass einige andere zufällig initialisiert wurden (die Gewichte für den neuen Kopf). Abschließend wirst du aufgefordert, das Modell zu trainieren, und genau das werden wir jetzt tun.',ke,H,ut="Um das Modell mit unserem Datensatz fein-tunen zu können, müssen wir das Modell <code>kompilieren()</code> und unsere Daten an die <code>fit()</code>-Methode übergeben. Damit wird das Fein-tuning gestartet (dies sollte auf einer GPU ein paar Minuten dauern) und der Trainingsverlust sowie der Validierungsverlust am Ende jeder Epoche gemeldet.",ze,T,ve,Y,Ge,J,Ze,Q,_e,S,We,E,ot="Wenn du den obigen Code ausprobierst, läuft er zwar, aber du wirst feststellen, dass der Verlust nur langsam oder sporadisch zurückgeht. Die Ursache hierfür ist die <em>Lernrate</em>. Wenn der Namen eines Optimierers als String an Keras übergeben wird, initialisiert Keras diesen Optimierer mit Standardwerten für alle Parameter, einschließlich der Lernrate. Aus langjähriger Erfahrung wissen wir, dass Transformer Modelle von einer wesentlich niedrigeren Lernrate profitieren als der Standardwert für Adam. Dieser Standardwert liegt bei 1e-3, auch geschrieben als 10 hoch -3 oder 0,001. Für Transformer ist 5e-5 (0,00005), was etwa zwanzigmal niedriger ist, ist ein viel besserer Ausgangspunkt.",Ce,x,ft="Zusätzlich zur Senkung der Lernrate haben wir noch einen zweiten Trick in petto: Wir können die Lernrate langsam im Laufe des Trainings verringern. In der Literatur wird dies manchmal als <em>Decay</em> oder <em>Annealing</em> der Lernrate bezeichnet. In Keras kannst das am besten mit dem <em>Lernraten-Scheduler</em> umgesetzt werden. Ein guter Scheduler ist <code>PolynomialDecay</code> - trotz des Namens lässt er die Lernrate in den Standardeinstellungen einfach linear vom Anfangswert bis zum Endwert abfallen. Dies ist genau was wir wollen. Um einen Scheduler richtig zu nutzen, müssen wir ihm allerdings sagen, wie lange das Training dauern soll. Das berechnen wir im Folgenden als <code>num_train_steps</code>.",Ie,N,Re,j,Xe,L,ct="Somit haben wir einen neuen Optimierer definiert und können ihn zum Training verwenden. Zuerst laden wir das Modell neu, um die Änderungen an der Gewichtung aus dem letzten Trainingslauf zurückzusetzen, und dann können wir es mit dem neuen Optimierer kompilieren:",Ve,D,Fe,q,Mt="Jetzt starten wir einen erneuten Trainingslauf mit <code>fit</code>:",Be,A,He,U,Ye,K,Qe,P,Se,O,ht="Trainieren und zusehen, wie der Verlust sinkt, ist ja ganz nett, aber was ist, wenn wir tatsächlich die Ergebnisse des trainierten Modells erhalten wollen? Entweder um Metriken zu berechnen oder um das Modell in der Produktion einzusetzen. Dafür können wir einfach die Methode <code>predict()</code> verwenden. Sie liefert uns die <em>Logits</em> aus dem Ausgabekopf des Modells, und zwar eine pro Klasse.",Ee,ee,xe,te,wt="Wir können diese Logits in die Klassenvorhersagen des Modells umwandeln, indem wir <code>argmax</code> verwenden, um den höchsten Logit zu finden, der der wahrscheinlichsten Klasse entspricht:",Ne,ne,Le,se,De,le,bt="Nun können wir diese Vorhersagen in <code>preds</code> nutzen, um einige Metriken zu berechnen! Wir können die Metriken, die mit dem MRPC-Datensatz verbunden sind, genauso einfach laden, wie wir den Datensatz geladen haben, in diesem Fall mit der Funktion “evaluate.load()“. Das zurückgegebene Objekt verfügt über eine Berechnungsmethode, mit der wir die Metrik berechnen können:",qe,ae,Ae,ie,Ke,re,gt='Die genauen Ergebnisse können variieren, da die zufällige Initialisierung des Modellkopfes die errechneten Metriken verändern kann. Das Modell erreicht über den Validierungsdaten eine Genauigkeit von 85,78 % und ein F1-Maß von 89,97. Dies sind die beiden Kennzahlen, die zur Bewertung der Ergebnisse des MRPC-Datensatzes für das GLUE-Benchmark verwendet werden. In der Tabelle im [BERT-Paper] (<a href="https://arxiv.org/pdf/1810.04805.pdf" rel="nofollow">https://arxiv.org/pdf/1810.04805.pdf</a>) wird für das Basismodell ein F1-Maß von 88,9 angegeben. Dort wurde das <code>uncased</code> Modell verwendet, während wir hier das <code>cased</code> Modell verwenden, was das bessere Ergebnis erklärt.',Pe,de,$t="Damit ist die Einführung in das Fein-tunen mit der Keras-API abgeschlossen. Beispiele für die gängigsten CL-Aufgaben findest du in Kapitel 7.",Oe,k,et,pe,tt,me,nt;return y=new Xt({props:{fw:g[0]}}),z=new lt({props:{title:"Modell mit Keras fein-tunen",local:"modell-mit-keras-fein-tunen",headingTag:"h1"}}),v=new Rt({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/de/chapter3/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/de/chapter3/section3_tf.ipynb"}]}}),_=new $({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}}),W=new lt({props:{title:"Training",local:"training",headingTag:"h3"}}),I=new st({props:{id:"rnTGBy2ax1c"}}),X=new st({props:{id:"AUozVp78dhk"}}),F=new $({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 ue({props:{$$slots:{default:[Ft]},$$scope:{ctx:g}}}),Y=new $({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}}),J=new ue({props:{warning:!0,$$slots:{default:[Bt]},$$scope:{ctx:g}}}),Q=new lt({props:{title:"Verbesserung der Trainingsperformance",local:"verbesserung-der-trainingsperformance",headingTag:"h3"}}),S=new st({props:{id:"cpzq6ESSM5c"}}),N=new $({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 ue({props:{$$slots:{default:[Ht]},$$scope:{ctx:g}}}),D=new $({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}}),A=new $({props:{code:"bW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjB2YWxpZGF0aW9uX2RhdGElM0R0Zl92YWxpZGF0aW9uX2RhdGFzZXQlMkMlMjBlcG9jaHMlM0QzKQ==",highlighted:'model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=<span class="hljs-number">3</span>)',wrap:!1}}),U=new ue({props:{$$slots:{default:[Yt]},$$scope:{ctx:g}}}),K=new lt({props:{title:"Modell-Vorhersagen",local:"modell-vorhersagen",headingTag:"h3"}}),P=new st({props:{id:"nx10eh4CoOs"}}),ee=new $({props:{code:"cHJlZHMlMjAlM0QlMjBtb2RlbC5wcmVkaWN0KHRmX3ZhbGlkYXRpb25fZGF0YXNldCklNUIlMjJsb2dpdHMlMjIlNUQ=",highlighted:'preds = model.predict(tf_validation_dataset)[<span class="hljs-string">&quot;logits&quot;</span>]',wrap:!1}}),ne=new $({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}}),se=new $({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 $({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQW1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEY2xhc3NfcHJlZHMlMkMlMjByZWZlcmVuY2VzJTNEcmF3X2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCU1QiUyMmxhYmVsJTIyJTVEKQ==",highlighted:`<span class="hljs-keyword">import</span> evaluate
metric = evaluate.load(<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 $({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 ue({props:{$$slots:{default:[Qt]},$$scope:{ctx:g}}}),pe=new Vt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/de/chapter3/3_tf.mdx"}}),{c(){l=c("meta"),h=a(),r=c("p"),b=a(),d(y.$$.fragment),fe=a(),d(z.$$.fragment),ce=a(),d(v.$$.fragment),Me=a(),G=c("p"),G.innerHTML=at,he=a(),Z=c("p"),Z.textContent=it,we=a(),d(_.$$.fragment),be=a(),d(W.$$.fragment),ge=a(),C=c("p"),C.textContent=rt,$e=a(),d(I.$$.fragment),ye=a(),R=c("p"),R.textContent=dt,Te=a(),d(X.$$.fragment),Je=a(),V=c("p"),V.innerHTML=pt,je=a(),d(F.$$.fragment),Ue=a(),B=c("p"),B.innerHTML=mt,ke=a(),H=c("p"),H.innerHTML=ut,ze=a(),d(T.$$.fragment),ve=a(),d(Y.$$.fragment),Ge=a(),d(J.$$.fragment),Ze=a(),d(Q.$$.fragment),_e=a(),d(S.$$.fragment),We=a(),E=c("p"),E.innerHTML=ot,Ce=a(),x=c("p"),x.innerHTML=ft,Ie=a(),d(N.$$.fragment),Re=a(),d(j.$$.fragment),Xe=a(),L=c("p"),L.textContent=ct,Ve=a(),d(D.$$.fragment),Fe=a(),q=c("p"),q.innerHTML=Mt,Be=a(),d(A.$$.fragment),He=a(),d(U.$$.fragment),Ye=a(),d(K.$$.fragment),Qe=a(),d(P.$$.fragment),Se=a(),O=c("p"),O.innerHTML=ht,Ee=a(),d(ee.$$.fragment),xe=a(),te=c("p"),te.innerHTML=wt,Ne=a(),d(ne.$$.fragment),Le=a(),d(se.$$.fragment),De=a(),le=c("p"),le.innerHTML=bt,qe=a(),d(ae.$$.fragment),Ae=a(),d(ie.$$.fragment),Ke=a(),re=c("p"),re.innerHTML=gt,Pe=a(),de=c("p"),de.textContent=$t,Oe=a(),d(k.$$.fragment),et=a(),d(pe.$$.fragment),tt=a(),me=c("p"),this.h()},l(e){const t=Ct("svelte-u9bgzb",document.head);l=M(t,"META",{name:!0,content:!0}),t.forEach(n),h=i(e),r=M(e,"P",{}),zt(r).forEach(n),b=i(e),p(y.$$.fragment,e),fe=i(e),p(z.$$.fragment,e),ce=i(e),p(v.$$.fragment,e),Me=i(e),G=M(e,"P",{"data-svelte-h":!0}),w(G)!=="svelte-17erlgi"&&(G.innerHTML=at),he=i(e),Z=M(e,"P",{"data-svelte-h":!0}),w(Z)!=="svelte-110xpnv"&&(Z.textContent=it),we=i(e),p(_.$$.fragment,e),be=i(e),p(W.$$.fragment,e),ge=i(e),C=M(e,"P",{"data-svelte-h":!0}),w(C)!=="svelte-1latems"&&(C.textContent=rt),$e=i(e),p(I.$$.fragment,e),ye=i(e),R=M(e,"P",{"data-svelte-h":!0}),w(R)!=="svelte-l6jrw5"&&(R.textContent=dt),Te=i(e),p(X.$$.fragment,e),Je=i(e),V=M(e,"P",{"data-svelte-h":!0}),w(V)!=="svelte-16yee8n"&&(V.innerHTML=pt),je=i(e),p(F.$$.fragment,e),Ue=i(e),B=M(e,"P",{"data-svelte-h":!0}),w(B)!=="svelte-z3uohy"&&(B.innerHTML=mt),ke=i(e),H=M(e,"P",{"data-svelte-h":!0}),w(H)!=="svelte-u4owuy"&&(H.innerHTML=ut),ze=i(e),p(T.$$.fragment,e),ve=i(e),p(Y.$$.fragment,e),Ge=i(e),p(J.$$.fragment,e),Ze=i(e),p(Q.$$.fragment,e),_e=i(e),p(S.$$.fragment,e),We=i(e),E=M(e,"P",{"data-svelte-h":!0}),w(E)!=="svelte-1689adn"&&(E.innerHTML=ot),Ce=i(e),x=M(e,"P",{"data-svelte-h":!0}),w(x)!=="svelte-nb3yvj"&&(x.innerHTML=ft),Ie=i(e),p(N.$$.fragment,e),Re=i(e),p(j.$$.fragment,e),Xe=i(e),L=M(e,"P",{"data-svelte-h":!0}),w(L)!=="svelte-18jrnu6"&&(L.textContent=ct),Ve=i(e),p(D.$$.fragment,e),Fe=i(e),q=M(e,"P",{"data-svelte-h":!0}),w(q)!=="svelte-13qk950"&&(q.innerHTML=Mt),Be=i(e),p(A.$$.fragment,e),He=i(e),p(U.$$.fragment,e),Ye=i(e),p(K.$$.fragment,e),Qe=i(e),p(P.$$.fragment,e),Se=i(e),O=M(e,"P",{"data-svelte-h":!0}),w(O)!=="svelte-wddma5"&&(O.innerHTML=ht),Ee=i(e),p(ee.$$.fragment,e),xe=i(e),te=M(e,"P",{"data-svelte-h":!0}),w(te)!=="svelte-81fu0u"&&(te.innerHTML=wt),Ne=i(e),p(ne.$$.fragment,e),Le=i(e),p(se.$$.fragment,e),De=i(e),le=M(e,"P",{"data-svelte-h":!0}),w(le)!=="svelte-1yl90k7"&&(le.innerHTML=bt),qe=i(e),p(ae.$$.fragment,e),Ae=i(e),p(ie.$$.fragment,e),Ke=i(e),re=M(e,"P",{"data-svelte-h":!0}),w(re)!=="svelte-1nuz10j"&&(re.innerHTML=gt),Pe=i(e),de=M(e,"P",{"data-svelte-h":!0}),w(de)!=="svelte-arl4qr"&&(de.textContent=$t),Oe=i(e),p(k.$$.fragment,e),et=i(e),p(pe.$$.fragment,e),tt=i(e),me=M(e,"P",{}),zt(me).forEach(n),this.h()},h(){vt(l,"name","hf:doc:metadata"),vt(l,"content",Et)},m(e,t){It(document.head,l),s(e,h,t),s(e,r,t),s(e,b,t),m(y,e,t),s(e,fe,t),m(z,e,t),s(e,ce,t),m(v,e,t),s(e,Me,t),s(e,G,t),s(e,he,t),s(e,Z,t),s(e,we,t),m(_,e,t),s(e,be,t),m(W,e,t),s(e,ge,t),s(e,C,t),s(e,$e,t),m(I,e,t),s(e,ye,t),s(e,R,t),s(e,Te,t),m(X,e,t),s(e,Je,t),s(e,V,t),s(e,je,t),m(F,e,t),s(e,Ue,t),s(e,B,t),s(e,ke,t),s(e,H,t),s(e,ze,t),m(T,e,t),s(e,ve,t),m(Y,e,t),s(e,Ge,t),m(J,e,t),s(e,Ze,t),m(Q,e,t),s(e,_e,t),m(S,e,t),s(e,We,t),s(e,E,t),s(e,Ce,t),s(e,x,t),s(e,Ie,t),m(N,e,t),s(e,Re,t),m(j,e,t),s(e,Xe,t),s(e,L,t),s(e,Ve,t),m(D,e,t),s(e,Fe,t),s(e,q,t),s(e,Be,t),m(A,e,t),s(e,He,t),m(U,e,t),s(e,Ye,t),m(K,e,t),s(e,Qe,t),m(P,e,t),s(e,Se,t),s(e,O,t),s(e,Ee,t),m(ee,e,t),s(e,xe,t),s(e,te,t),s(e,Ne,t),m(ne,e,t),s(e,Le,t),m(se,e,t),s(e,De,t),s(e,le,t),s(e,qe,t),m(ae,e,t),s(e,Ae,t),m(ie,e,t),s(e,Ke,t),s(e,re,t),s(e,Pe,t),s(e,de,t),s(e,Oe,t),m(k,e,t),s(e,et,t),m(pe,e,t),s(e,tt,t),s(e,me,t),nt=!0},p(e,[t]){const yt={};t&1&&(yt.fw=e[0]),y.$set(yt);const Tt={};t&2&&(Tt.$$scope={dirty:t,ctx:e}),T.$set(Tt);const Jt={};t&2&&(Jt.$$scope={dirty:t,ctx:e}),J.$set(Jt);const jt={};t&2&&(jt.$$scope={dirty:t,ctx:e}),j.$set(jt);const Ut={};t&2&&(Ut.$$scope={dirty:t,ctx:e}),U.$set(Ut);const kt={};t&2&&(kt.$$scope={dirty:t,ctx:e}),k.$set(kt)},i(e){nt||(u(y.$$.fragment,e),u(z.$$.fragment,e),u(v.$$.fragment,e),u(_.$$.fragment,e),u(W.$$.fragment,e),u(I.$$.fragment,e),u(X.$$.fragment,e),u(F.$$.fragment,e),u(T.$$.fragment,e),u(Y.$$.fragment,e),u(J.$$.fragment,e),u(Q.$$.fragment,e),u(S.$$.fragment,e),u(N.$$.fragment,e),u(j.$$.fragment,e),u(D.$$.fragment,e),u(A.$$.fragment,e),u(U.$$.fragment,e),u(K.$$.fragment,e),u(P.$$.fragment,e),u(ee.$$.fragment,e),u(ne.$$.fragment,e),u(se.$$.fragment,e),u(ae.$$.fragment,e),u(ie.$$.fragment,e),u(k.$$.fragment,e),u(pe.$$.fragment,e),nt=!0)},o(e){o(y.$$.fragment,e),o(z.$$.fragment,e),o(v.$$.fragment,e),o(_.$$.fragment,e),o(W.$$.fragment,e),o(I.$$.fragment,e),o(X.$$.fragment,e),o(F.$$.fragment,e),o(T.$$.fragment,e),o(Y.$$.fragment,e),o(J.$$.fragment,e),o(Q.$$.fragment,e),o(S.$$.fragment,e),o(N.$$.fragment,e),o(j.$$.fragment,e),o(D.$$.fragment,e),o(A.$$.fragment,e),o(U.$$.fragment,e),o(K.$$.fragment,e),o(P.$$.fragment,e),o(ee.$$.fragment,e),o(ne.$$.fragment,e),o(se.$$.fragment,e),o(ae.$$.fragment,e),o(ie.$$.fragment,e),o(k.$$.fragment,e),o(pe.$$.fragment,e),nt=!1},d(e){e&&(n(h),n(r),n(b),n(fe),n(ce),n(Me),n(G),n(he),n(Z),n(we),n(be),n(ge),n(C),n($e),n(ye),n(R),n(Te),n(Je),n(V),n(je),n(Ue),n(B),n(ke),n(H),n(ze),n(ve),n(Ge),n(Ze),n(_e),n(We),n(E),n(Ce),n(x),n(Ie),n(Re),n(Xe),n(L),n(Ve),n(Fe),n(q),n(Be),n(He),n(Ye),n(Qe),n(Se),n(O),n(Ee),n(xe),n(te),n(Ne),n(Le),n(De),n(le),n(qe),n(Ae),n(Ke),n(re),n(Pe),n(de),n(Oe),n(et),n(tt),n(me)),n(l),f(y,e),f(z,e),f(v,e),f(_,e),f(W,e),f(I,e),f(X,e),f(F,e),f(T,e),f(Y,e),f(J,e),f(Q,e),f(S,e),f(N,e),f(j,e),f(D,e),f(A,e),f(U,e),f(K,e),f(P,e),f(ee,e),f(ne,e),f(se,e),f(ae,e),f(ie,e),f(k,e),f(pe,e)}}}const Et='{"title":"Modell mit Keras fein-tunen","local":"modell-mit-keras-fein-tunen","sections":[{"title":"Training","local":"training","sections":[],"depth":3},{"title":"Verbesserung der Trainingsperformance","local":"verbesserung-der-trainingsperformance","sections":[],"depth":3},{"title":"Modell-Vorhersagen","local":"modell-vorhersagen","sections":[],"depth":3}],"depth":1}';function xt(g,l,h){let r="pt";return Zt(()=>{const b=new URLSearchParams(window.location.search);h(0,r=b.get("fw")||"pt")}),[r]}class en extends _t{constructor(l){super(),Wt(this,l,xt,St,Gt,{})}}export{en as component};

Xet Storage Details

Size:
28.7 kB
·
Xet hash:
1872854d0c83b444401f7f4936509fd5dca8c0d3e347b406d32ed15a00c5d74a

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