Buckets:

rtrm's picture
download
raw
29.8 kB
import{s as gs,o as Gs,n as ts}from"../chunks/scheduler.37c15a92.js";import{S as Zs,i as _s,g as f,s as a,r as o,A as Cs,h as M,f as t,c as n,j as js,u,x as b,k as vs,y as zs,a as l,v as p,d as m,t as d,w as c}from"../chunks/index.2bf4358c.js";import{T as Oe}from"../chunks/Tip.363c041f.js";import{Y as es}from"../chunks/Youtube.1e50a667.js";import{C as T}from"../chunks/CodeBlock.4e987730.js";import{C as qs}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as ks}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as ss,E as Rs}from"../chunks/getInferenceSnippets.24b50994.js";function Is(h){let r,y="Notez que les modèles 🤗 <em>Transformers</em> ont une capacité spéciale que la plupart des modèles Keras n’ont pas. Ils peuvent automatiquement utiliser une perte appropriée qu’ils calculent en interne. Ils utiliseront cette perte par défaut si vous ne définissez pas un argument de perte dans <code>compile()</code>. Notez que pour utiliser la perte interne, vous devrez passer vos labels comme faisant partie de l’entrée, et non pas comme un label séparé, ce qui est la façon normale d’utiliser les labels avec les modèles Keras. Vous verrez des exemples de cela dans la partie 2 du cours, où la définition de la fonction de perte correcte peut être délicate. Pour la classification des séquences, cependant, une fonction de perte standard de Keras fonctionne bien, et c’est donc ce que nous utiliserons ici.";return{c(){r=f("p"),r.innerHTML=y},l(i){r=M(i,"P",{"data-svelte-h":!0}),b(r)!=="svelte-qeyls2"&&(r.innerHTML=y)},m(i,$){l(i,r,$)},p:ts,d(i){i&&t(r)}}}function Xs(h){let r,y="Notez un piège très commun ici. Vous <em>pouvez</em> simplement passer le nom de la perte comme une chaîne à Keras, mais par défaut Keras supposera que vous avez déjà appliqué une fonction softmax à vos sorties. Cependant, de nombreux modèles produisent les valeurs juste avant l’application de la softmax, que l’on appelle aussi les <em>logits</em>. Nous devons indiquer à la fonction de perte que c’est ce que fait notre modèle, et la seule façon de le faire est de l’appeler directement, plutôt que par son nom avec une chaîne.";return{c(){r=f("p"),r.innerHTML=y},l(i){r=M(i,"P",{"data-svelte-h":!0}),b(r)!=="svelte-1r1tekq"&&(r.innerHTML=y)},m(i,$){l(i,r,$)},p:ts,d(i){i&&t(r)}}}function Bs(h){let r,y="La bibliothèque 🤗 <em>Transformers</em> possède également une fonction <code>create_optimizer()</code> qui créera un optimiseur <code>AdamW</code> avec un taux d’apprentissage décroissant. Il s’agit d’un raccourci pratique que vous verrez en détail dans les prochaines sections du cours.";return{c(){r=f("p"),r.innerHTML=y},l(i){r=M(i,"P",{"data-svelte-h":!0}),b(r)!=="svelte-sqv5c2"&&(r.innerHTML=y)},m(i,$){l(i,r,$)},p:ts,d(i){i&&t(r)}}}function Vs(h){let r,y='💡 Si vous voulez télécharger automatiquement votre modèle sur le <em>Hub</em> pendant l’entraînement, vous pouvez passer un <code>PushToHubCallback</code> dans la méthode <code>model.fit()</code>. Nous en apprendrons davantage à ce sujet au <a href="/course/fr/chapter4/3">chapitre 4</a>.';return{c(){r=f("p"),r.innerHTML=y},l(i){r=M(i,"P",{"data-svelte-h":!0}),b(r)!=="svelte-7e91zr"&&(r.innerHTML=y)},m(i,$){l(i,r,$)},p:ts,d(i){i&&t(r)}}}function Ws(h){let r,y,i,$,J,pe,g,me,G,de,Z,ls='Une fois que vous avez fait tout le travail de prétraitement des données dans la dernière section, il ne vous reste que quelques étapes pour entraîner le modèle. Notez, cependant, que la commande <code>model.fit()</code> s’exécutera très lentement sur un CPU. Si vous n’avez pas de GPU, vous pouvez avoir accès à des GPUs ou TPUs gratuits sur <a href="https://colab.research.google.com/" rel="nofollow">Google Colab</a>.',ce,_,as="Les exemples de code ci-dessous supposent que vous avez déjà exécuté les exemples de la section précédente. Voici un bref résumé de ce dont vous avez besoin :",fe,C,Me,z,be,q,ns="Les modèles TensorFlow importés depuis 🤗 <em>Transformers</em> sont déjà des modèles Keras. Voici une courte introduction à Keras.",ye,k,$e,R,rs="Cela signifie qu’une fois que nous disposons de nos données, très peu de travail est nécessaire pour commencer à entraîner sur celles-ci.",he,I,Te,X,is='Comme dans le <a href="/course/fr/chapter2">chapitre précédent</a>, nous allons utiliser la classe <code>TFAutoModelForSequenceClassification</code>, avec deux étiquettes :',Je,B,Ue,V,os='Vous remarquerez que, contrairement au <a href="/course/fr/chapter2">chapitre 2</a>, vous obtenez un message d’avertissement après l’instanciation de ce modèle pré-entraîné. Ceci est dû au fait que BERT n’a pas été pré-entraîné à la classification de paires de phrases, donc la tête du modèle pré-entraîné a été supprimée et une nouvelle tête adaptée à la classification de séquences a été insérée à la place. Les messages d’avertissement indiquent que certains poids n’ont pas été utilisés (ceux correspondant à la tête de pré-entraînement abandonnée) et que d’autres ont été initialisés de manière aléatoire (ceux pour la nouvelle tête). Il conclut en vous encourageant à entraîner le modèle, ce qui est exactement ce que nous allons faire maintenant.',we,W,us="Pour <em>finetuner</em> le modèle sur notre jeu de données, nous devons simplement <code>compiler()</code> notre modèle et ensuite passer nos données à la méthode <code>fit()</code>. Cela va démarrer le processus de <em>finetuning</em> (qui devrait prendre quelques minutes sur un GPU) et rapporter la perte d’entraînement au fur et à mesure, plus la perte de validation à la fin de chaque époque.",je,U,ve,x,ge,w,Ge,F,Ze,Q,_e,Y,ps="Si vous essayez le code ci-dessus, il fonctionne certainement, mais vous constaterez que la perte ne diminue que lentement ou sporadiquement. La cause principale est le <em>taux d’apprentissage</em>. Comme pour la perte, lorsque nous transmettons à Keras le nom d’un optimiseur sous forme de chaîne de caractères, Keras initialise cet optimiseur avec des valeurs par défaut pour tous les paramètres, y compris le taux d’apprentissage. Cependant, nous savons depuis longtemps que les <em>transformers</em> bénéficient d’un taux d’apprentissage beaucoup plus faible que celui par défaut d’Adam, qui est de 1e-3, également écrit comme 10 à la puissance -3, ou 0,001. 5e-5 (0,00005), qui est environ vingt fois inférieur, est un bien meilleur point de départ.",Ce,H,ms="En plus de réduire le taux d’apprentissage, nous avons une deuxième astuce dans notre manche : nous pouvons réduire lentement le taux d’apprentissage au cours de l’entraînement. Dans la littérature, on parle parfois de <em>décroissance</em> ou d’<em>annulation</em> du taux d’apprentissage.le taux d’apprentissage. Dans Keras, la meilleure façon de le faire est d’utiliser un <em>planificateur du taux d’apprentissage</em>. Un bon planificateur à utiliser est <code>PolynomialDecay</code>. Malgré son nom, avec les paramètres par défaut, il diminue simplement de façon linéaire le taux d’apprentissage de la valeur initiale à la valeur finale au cours de l’entraînement, ce qui est exactement ce que nous voulons. Afin d’utiliser correctement un planificateur, nous devons lui dire combien de temps l’entraînement va durer. Nous calculons cela comme <code>num_train_steps</code> ci-dessous.",ze,N,qe,j,ke,E,ds="Nous avons maintenant notre tout nouvel optimiseur et nous pouvons essayer de nous entraîner avec lui. Tout d’abord, rechargeons le modèle pour réinitialiser les modifications apportées aux poids lors de l’entraînement que nous venons d’effectuer, puis nous pouvons le compiler avec le nouvel optimiseur :",Re,S,Ie,L,cs="Maintenant, on <em>fit</em> :",Xe,A,Be,v,Ve,P,We,D,xe,K,fs="Entraîner et regarder la perte diminuer, c’est très bien, mais que faire si l’on veut réellement obtenir des résultats du modèle entraîné, soit pour calculer des métriques, soit pour utiliser le modèle en production ? Pour ce faire, nous pouvons simplement utiliser la méthode <code>predict()</code>. Ceci retournera les <em>logits</em> de la tête de sortie du modèle, un par classe.",Fe,O,Qe,ee,Ms="Nous pouvons convertir ces logits en prédictions de classe du modèle en utilisant <code>argmax</code> pour trouver le logit le plus élevé, qui correspond à la classe la plus probable :",Ye,se,He,te,Ne,le,bs="Maintenant, utilisons ces <code>preds</code> pour calculer des métriques ! Nous pouvons charger les métriques associées au jeu de données MRPC aussi facilement que nous avons chargé le jeu de données, cette fois avec la fonction <code>evaluate.load()</code>. L’objet retourné a une méthode <code>compute()</code> que nous pouvons utiliser pour faire le calcul de la métrique :",Ee,ae,Se,ne,Le,re,ys='Les résultats exacts que vous obtiendrez peuvent varier, car l’initialisation aléatoire de la tête du modèle peut modifier les métriques obtenues. Ici, nous pouvons voir que notre modèle a une précision de 85,78% sur l’ensemble de validation et un score F1 de 89,97. Ce sont les deux métriques utilisées pour évaluer les résultats sur le jeu de données MRPC pour le benchmark GLUE. Le tableau du papier de <a href="https://arxiv.org/pdf/1810.04805.pdf" rel="nofollow">BERT</a> indique un score F1 de 88,9 pour le modèle de base. Il s’agissait du modèle <code>uncased</code> alors que nous utilisons actuellement le modèle <code>cased</code>, ce qui explique le meilleur résultat.',Ae,ie,$s='Ceci conclut l’introduction à le <em>finetuning</em> en utilisant l’API Keras. Un exemple d’application de cette méthode aux tâches les plus courantes du traitement automatique des langues sera présenté au <a href="/course/fr/chapter7">chapitre 7</a>. Si vous souhaitez affiner vos connaissances de l’API Keras, essayez <em>finetuner</em> un modèle sur le jeu de données GLUE SST-2, en utilisant le traitement des données que vous avez effectué dans la section 2.',Pe,oe,De,ue,Ke;return J=new ks({props:{fw:h[0]}}),g=new ss({props:{title:"<i> Finetuner </i> un modèle avec Keras",local:"i-finetuner-i-un-modèle-avec-keras",headingTag:"h1"}}),G=new qs({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter3/section3_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter3/section2_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter3/section3_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter3/section3_tf.ipynb"}]}}),C=new T({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 ss({props:{title:"Entraînement",local:"entraînement",headingTag:"h3"}}),k=new es({props:{id:"rnTGBy2ax1c"}}),I=new es({props:{id:"AUozVp78dhk"}}),B=new T({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}}),U=new Oe({props:{$$slots:{default:[Is]},$$scope:{ctx:h}}}),x=new T({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}}),w=new Oe({props:{warning:!0,$$slots:{default:[Xs]},$$scope:{ctx:h}}}),F=new ss({props:{title:"Améliorer les performances d’entraînement",local:"améliorer-les-performances-dentraînement",headingTag:"h3"}}),Q=new es({props:{id:"cpzq6ESSM5c"}}),N=new T({props:{code:"ZnJvbSUyMHRlbnNvcmZsb3cua2VyYXMub3B0aW1pemVycy5zY2hlZHVsZXMlMjBpbXBvcnQlMjBQb2x5bm9taWFsRGVjYXklMEElMEFiYXRjaF9zaXplJTIwJTNEJTIwOCUwQW51bV9lcG9jaHMlMjAlM0QlMjAzJTBBJTIzJTIwTGUlMjBub21icmUlMjBkJyVDMyVBOXRhcGVzJTIwZCdlbnRyYSVDMyVBRW5lbWVudCUyMGVzdCUyMGxlJTIwbm9tYnJlJTIwZCclQzMlQTljaGFudGlsbG9ucyUyMGRhbnMlMjBsJ2Vuc2VtYmxlJTIwZGUlMjBkb25uJUMzJUE5ZXMlMkMlMjBkaXZpcyVDMyVBOSUyMHBhciUyMGxhJTIwdGFpbGxlJTIwZHUlMjBiYXRjaCUyMHB1aXMlMjBtdWx0aXBsaSVDMyVBOSUwQSUyMyUyMHBhciUyMGxlJTIwbm9tYnJlJTIwdG90YWwlMjBkJyVDMyVBOXBvcXVlcy4lMjBOb3RleiUyMHF1ZSUyMGxlJTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMjB0Zl90cmFpbl9kYXRhc2V0JTIwZXN0JTIwaWNpJTIwdW4lMjBsb3QlMjB0Zi5kYXRhLkRhdGFzZXQlMEElMjMlMjBldCUyMG5vbiUyMGxlJTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMjBvcmlnaW5hbCUyMEh1Z2dpbmclMjBGYWNlJTIwRGF0YXNldCUyQyUyMGRvbmMlMjBzb24lMjBsZW4oKSUyMGVzdCUyMGQlQzMlQTlqJUMzJUEwJTIwbnVtX3NhbXBsZXMlMjAlMkYlMkYlMjBiYXRjaF9zaXplLiUwQW51bV90cmFpbl9zdGVwcyUyMCUzRCUyMGxlbih0Zl90cmFpbl9kYXRhc2V0KSUyMColMjBudW1fZXBvY2hzJTBBbHJfc2NoZWR1bGVyJTIwJTNEJTIwUG9seW5vbWlhbERlY2F5KCUwQSUyMCUyMCUyMCUyMGluaXRpYWxfbGVhcm5pbmdfcmF0ZSUzRDVlLTUlMkMlMjBlbmRfbGVhcm5pbmdfcmF0ZSUzRDAuMCUyQyUyMGRlY2F5X3N0ZXBzJTNEbnVtX3RyYWluX3N0ZXBzJTBBKSUwQWZyb20lMjB0ZW5zb3JmbG93LmtlcmFzLm9wdGltaXplcnMlMjBpbXBvcnQlMjBBZGFtJTBBJTBBb3B0JTIwJTNEJTIwQWRhbShsZWFybmluZ19yYXRlJTNEbHJfc2NoZWR1bGVyKQ==",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"># Le nombre d&#x27;étapes d&#x27;entraînement est le nombre d&#x27;échantillons dans l&#x27;ensemble de données, divisé par la taille du batch puis multiplié</span>
<span class="hljs-comment"># par le nombre total d&#x27;époques. Notez que le jeu de données tf_train_dataset est ici un lot tf.data.Dataset</span>
<span class="hljs-comment"># et non le jeu de données original Hugging Face Dataset, donc son len() est déjà 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:[Bs]},$$scope:{ctx:h}}}),S=new T({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 T({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:[Vs]},$$scope:{ctx:h}}}),P=new ss({props:{title:"Prédictions du modèle",local:"prédictions-du-modèle",headingTag:"h3"}}),D=new es({props:{id:"nx10eh4CoOs"}}),O=new T({props:{code:"cHJlZHMlMjAlM0QlMjBtb2RlbC5wcmVkaWN0KHRmX3ZhbGlkYXRpb25fZGF0YXNldCklNUIlMjJsb2dpdHMlMjIlNUQ=",highlighted:'preds = model.predict(tf_validation_dataset)[<span class="hljs-string">&quot;logits&quot;</span>]',wrap:!1}}),se=new T({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}}),te=new T({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 T({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}}),ne=new T({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}}),oe=new Rs({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter3/3_tf.mdx"}}),{c(){r=f("meta"),y=a(),i=f("p"),$=a(),o(J.$$.fragment),pe=a(),o(g.$$.fragment),me=a(),o(G.$$.fragment),de=a(),Z=f("p"),Z.innerHTML=ls,ce=a(),_=f("p"),_.textContent=as,fe=a(),o(C.$$.fragment),Me=a(),o(z.$$.fragment),be=a(),q=f("p"),q.innerHTML=ns,ye=a(),o(k.$$.fragment),$e=a(),R=f("p"),R.textContent=rs,he=a(),o(I.$$.fragment),Te=a(),X=f("p"),X.innerHTML=is,Je=a(),o(B.$$.fragment),Ue=a(),V=f("p"),V.innerHTML=os,we=a(),W=f("p"),W.innerHTML=us,je=a(),o(U.$$.fragment),ve=a(),o(x.$$.fragment),ge=a(),o(w.$$.fragment),Ge=a(),o(F.$$.fragment),Ze=a(),o(Q.$$.fragment),_e=a(),Y=f("p"),Y.innerHTML=ps,Ce=a(),H=f("p"),H.innerHTML=ms,ze=a(),o(N.$$.fragment),qe=a(),o(j.$$.fragment),ke=a(),E=f("p"),E.textContent=ds,Re=a(),o(S.$$.fragment),Ie=a(),L=f("p"),L.innerHTML=cs,Xe=a(),o(A.$$.fragment),Be=a(),o(v.$$.fragment),Ve=a(),o(P.$$.fragment),We=a(),o(D.$$.fragment),xe=a(),K=f("p"),K.innerHTML=fs,Fe=a(),o(O.$$.fragment),Qe=a(),ee=f("p"),ee.innerHTML=Ms,Ye=a(),o(se.$$.fragment),He=a(),o(te.$$.fragment),Ne=a(),le=f("p"),le.innerHTML=bs,Ee=a(),o(ae.$$.fragment),Se=a(),o(ne.$$.fragment),Le=a(),re=f("p"),re.innerHTML=ys,Ae=a(),ie=f("p"),ie.innerHTML=$s,Pe=a(),o(oe.$$.fragment),De=a(),ue=f("p"),this.h()},l(e){const s=Cs("svelte-u9bgzb",document.head);r=M(s,"META",{name:!0,content:!0}),s.forEach(t),y=n(e),i=M(e,"P",{}),js(i).forEach(t),$=n(e),u(J.$$.fragment,e),pe=n(e),u(g.$$.fragment,e),me=n(e),u(G.$$.fragment,e),de=n(e),Z=M(e,"P",{"data-svelte-h":!0}),b(Z)!=="svelte-77wao7"&&(Z.innerHTML=ls),ce=n(e),_=M(e,"P",{"data-svelte-h":!0}),b(_)!=="svelte-14eako"&&(_.textContent=as),fe=n(e),u(C.$$.fragment,e),Me=n(e),u(z.$$.fragment,e),be=n(e),q=M(e,"P",{"data-svelte-h":!0}),b(q)!=="svelte-1gvhr2p"&&(q.innerHTML=ns),ye=n(e),u(k.$$.fragment,e),$e=n(e),R=M(e,"P",{"data-svelte-h":!0}),b(R)!=="svelte-1rq1edi"&&(R.textContent=rs),he=n(e),u(I.$$.fragment,e),Te=n(e),X=M(e,"P",{"data-svelte-h":!0}),b(X)!=="svelte-bd8iri"&&(X.innerHTML=is),Je=n(e),u(B.$$.fragment,e),Ue=n(e),V=M(e,"P",{"data-svelte-h":!0}),b(V)!=="svelte-1kmvygx"&&(V.innerHTML=os),we=n(e),W=M(e,"P",{"data-svelte-h":!0}),b(W)!=="svelte-dyeusn"&&(W.innerHTML=us),je=n(e),u(U.$$.fragment,e),ve=n(e),u(x.$$.fragment,e),ge=n(e),u(w.$$.fragment,e),Ge=n(e),u(F.$$.fragment,e),Ze=n(e),u(Q.$$.fragment,e),_e=n(e),Y=M(e,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-brlya8"&&(Y.innerHTML=ps),Ce=n(e),H=M(e,"P",{"data-svelte-h":!0}),b(H)!=="svelte-1seds53"&&(H.innerHTML=ms),ze=n(e),u(N.$$.fragment,e),qe=n(e),u(j.$$.fragment,e),ke=n(e),E=M(e,"P",{"data-svelte-h":!0}),b(E)!=="svelte-rvo7fs"&&(E.textContent=ds),Re=n(e),u(S.$$.fragment,e),Ie=n(e),L=M(e,"P",{"data-svelte-h":!0}),b(L)!=="svelte-i6f0t0"&&(L.innerHTML=cs),Xe=n(e),u(A.$$.fragment,e),Be=n(e),u(v.$$.fragment,e),Ve=n(e),u(P.$$.fragment,e),We=n(e),u(D.$$.fragment,e),xe=n(e),K=M(e,"P",{"data-svelte-h":!0}),b(K)!=="svelte-1ais13z"&&(K.innerHTML=fs),Fe=n(e),u(O.$$.fragment,e),Qe=n(e),ee=M(e,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-1eus529"&&(ee.innerHTML=Ms),Ye=n(e),u(se.$$.fragment,e),He=n(e),u(te.$$.fragment,e),Ne=n(e),le=M(e,"P",{"data-svelte-h":!0}),b(le)!=="svelte-16q38h"&&(le.innerHTML=bs),Ee=n(e),u(ae.$$.fragment,e),Se=n(e),u(ne.$$.fragment,e),Le=n(e),re=M(e,"P",{"data-svelte-h":!0}),b(re)!=="svelte-1l4etp7"&&(re.innerHTML=ys),Ae=n(e),ie=M(e,"P",{"data-svelte-h":!0}),b(ie)!=="svelte-1d0r6xb"&&(ie.innerHTML=$s),Pe=n(e),u(oe.$$.fragment,e),De=n(e),ue=M(e,"P",{}),js(ue).forEach(t),this.h()},h(){vs(r,"name","hf:doc:metadata"),vs(r,"content",xs)},m(e,s){zs(document.head,r),l(e,y,s),l(e,i,s),l(e,$,s),p(J,e,s),l(e,pe,s),p(g,e,s),l(e,me,s),p(G,e,s),l(e,de,s),l(e,Z,s),l(e,ce,s),l(e,_,s),l(e,fe,s),p(C,e,s),l(e,Me,s),p(z,e,s),l(e,be,s),l(e,q,s),l(e,ye,s),p(k,e,s),l(e,$e,s),l(e,R,s),l(e,he,s),p(I,e,s),l(e,Te,s),l(e,X,s),l(e,Je,s),p(B,e,s),l(e,Ue,s),l(e,V,s),l(e,we,s),l(e,W,s),l(e,je,s),p(U,e,s),l(e,ve,s),p(x,e,s),l(e,ge,s),p(w,e,s),l(e,Ge,s),p(F,e,s),l(e,Ze,s),p(Q,e,s),l(e,_e,s),l(e,Y,s),l(e,Ce,s),l(e,H,s),l(e,ze,s),p(N,e,s),l(e,qe,s),p(j,e,s),l(e,ke,s),l(e,E,s),l(e,Re,s),p(S,e,s),l(e,Ie,s),l(e,L,s),l(e,Xe,s),p(A,e,s),l(e,Be,s),p(v,e,s),l(e,Ve,s),p(P,e,s),l(e,We,s),p(D,e,s),l(e,xe,s),l(e,K,s),l(e,Fe,s),p(O,e,s),l(e,Qe,s),l(e,ee,s),l(e,Ye,s),p(se,e,s),l(e,He,s),p(te,e,s),l(e,Ne,s),l(e,le,s),l(e,Ee,s),p(ae,e,s),l(e,Se,s),p(ne,e,s),l(e,Le,s),l(e,re,s),l(e,Ae,s),l(e,ie,s),l(e,Pe,s),p(oe,e,s),l(e,De,s),l(e,ue,s),Ke=!0},p(e,[s]){const hs={};s&1&&(hs.fw=e[0]),J.$set(hs);const Ts={};s&2&&(Ts.$$scope={dirty:s,ctx:e}),U.$set(Ts);const Js={};s&2&&(Js.$$scope={dirty:s,ctx:e}),w.$set(Js);const Us={};s&2&&(Us.$$scope={dirty:s,ctx:e}),j.$set(Us);const ws={};s&2&&(ws.$$scope={dirty:s,ctx:e}),v.$set(ws)},i(e){Ke||(m(J.$$.fragment,e),m(g.$$.fragment,e),m(G.$$.fragment,e),m(C.$$.fragment,e),m(z.$$.fragment,e),m(k.$$.fragment,e),m(I.$$.fragment,e),m(B.$$.fragment,e),m(U.$$.fragment,e),m(x.$$.fragment,e),m(w.$$.fragment,e),m(F.$$.fragment,e),m(Q.$$.fragment,e),m(N.$$.fragment,e),m(j.$$.fragment,e),m(S.$$.fragment,e),m(A.$$.fragment,e),m(v.$$.fragment,e),m(P.$$.fragment,e),m(D.$$.fragment,e),m(O.$$.fragment,e),m(se.$$.fragment,e),m(te.$$.fragment,e),m(ae.$$.fragment,e),m(ne.$$.fragment,e),m(oe.$$.fragment,e),Ke=!0)},o(e){d(J.$$.fragment,e),d(g.$$.fragment,e),d(G.$$.fragment,e),d(C.$$.fragment,e),d(z.$$.fragment,e),d(k.$$.fragment,e),d(I.$$.fragment,e),d(B.$$.fragment,e),d(U.$$.fragment,e),d(x.$$.fragment,e),d(w.$$.fragment,e),d(F.$$.fragment,e),d(Q.$$.fragment,e),d(N.$$.fragment,e),d(j.$$.fragment,e),d(S.$$.fragment,e),d(A.$$.fragment,e),d(v.$$.fragment,e),d(P.$$.fragment,e),d(D.$$.fragment,e),d(O.$$.fragment,e),d(se.$$.fragment,e),d(te.$$.fragment,e),d(ae.$$.fragment,e),d(ne.$$.fragment,e),d(oe.$$.fragment,e),Ke=!1},d(e){e&&(t(y),t(i),t($),t(pe),t(me),t(de),t(Z),t(ce),t(_),t(fe),t(Me),t(be),t(q),t(ye),t($e),t(R),t(he),t(Te),t(X),t(Je),t(Ue),t(V),t(we),t(W),t(je),t(ve),t(ge),t(Ge),t(Ze),t(_e),t(Y),t(Ce),t(H),t(ze),t(qe),t(ke),t(E),t(Re),t(Ie),t(L),t(Xe),t(Be),t(Ve),t(We),t(xe),t(K),t(Fe),t(Qe),t(ee),t(Ye),t(He),t(Ne),t(le),t(Ee),t(Se),t(Le),t(re),t(Ae),t(ie),t(Pe),t(De),t(ue)),t(r),c(J,e),c(g,e),c(G,e),c(C,e),c(z,e),c(k,e),c(I,e),c(B,e),c(U,e),c(x,e),c(w,e),c(F,e),c(Q,e),c(N,e),c(j,e),c(S,e),c(A,e),c(v,e),c(P,e),c(D,e),c(O,e),c(se,e),c(te,e),c(ae,e),c(ne,e),c(oe,e)}}}const xs='{"title":"<i> Finetuner </i> un modèle avec Keras","local":"i-finetuner-i-un-modèle-avec-keras","sections":[{"title":"Entraînement","local":"entraînement","sections":[],"depth":3},{"title":"Améliorer les performances d’entraînement","local":"améliorer-les-performances-dentraînement","sections":[],"depth":3},{"title":"Prédictions du modèle","local":"prédictions-du-modèle","sections":[],"depth":3}],"depth":1}';function Fs(h,r,y){let i="pt";return Gs(()=>{const $=new URLSearchParams(window.location.search);y(0,i=$.get("fw")||"pt")}),[i]}class Ps extends Zs{constructor(r){super(),_s(this,r,Fs,Ws,gs,{})}}export{Ps as component};

Xet Storage Details

Size:
29.8 kB
·
Xet hash:
c41c633344c40d74940872b9eef858c8a33af08d19b887837f65d71156c3dcbf

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