import{s as _l,o as hl}from"../chunks/scheduler.37c15a92.js";import{S as $l,i as gl,g as f,s as u,r as _,A as vl,h as b,f as r,c,j as dl,u as h,x as M,k as fl,y as yl,a as i,v as $,t as m,b as Je,d as p,w as g,p as je}from"../chunks/index.2bf4358c.js";import{Y as bl}from"../chunks/Youtube.1e50a667.js";import{C as k}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as Ml}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{F as kl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Le,E as Tl}from"../chunks/EditOnGithub.8916dc7c.js";function wl(d){let l,s;return l=new Ml({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter2/section3_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter2/section3_tf.ipynb"}]}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Jl(d){let l,s;return l=new Ml({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter2/section3_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter2/section3_pt.ipynb"}]}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function jl(d){let l,s;return l=new bl({props:{id:"d3JVgghSOew"}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Cl(d){let l,s;return l=new bl({props:{id:"AhChOFRegn4"}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Ul(d){let l,s="Dans cette section, nous allons examiner de plus près la création et l’utilisation d’un modèle. Nous utiliserons la classe <code>TFAutoModel</code> qui est pratique lorsque vous voulez instancier n’importe quel modèle à partir d’un checkpoint.",t,a,v="La classe <code>TFAutoModel</code> et toutes les classes apparentées sont en fait de simples <em>wrappers</em> sur la grande variété de modèles disponibles dans la bibliothèque. C’est une enveloppe intelligente car elle peut automatiquement deviner l’architecture appropriée pour votre <em>checkpoint</em> et ensuite instancier un modèle avec cette architecture.";return{c(){l=f("p"),l.innerHTML=s,t=u(),a=f("p"),a.innerHTML=v},l(o){l=b(o,"P",{"data-svelte-h":!0}),M(l)!=="svelte-1ph37vu"&&(l.innerHTML=s),t=c(o),a=b(o,"P",{"data-svelte-h":!0}),M(a)!=="svelte-1m5wxjv"&&(a.innerHTML=v)},m(o,y){i(o,l,y),i(o,t,y),i(o,a,y)},d(o){o&&(r(l),r(t),r(a))}}}function ql(d){let l,s="Dans cette section, nous allons examiner de plus près la création et l’utilisation d’un modèle. Nous utiliserons la classe <code>AutoModel</code> qui est pratique lorsque vous voulez instancier n’importe quel modèle à partir d’un checkpoint.",t,a,v="La classe <code>AutoModel</code> et toutes les classes apparentées sont en fait de simples <em>wrappers</em> sur la grande variété de modèles disponibles dans la bibliothèque. C’est une enveloppe intelligente car elle peut automatiquement deviner l’architecture appropriée pour votre <em>checkpoint</em> et ensuite instancier un modèle avec cette architecture.";return{c(){l=f("p"),l.innerHTML=s,t=u(),a=f("p"),a.innerHTML=v},l(o){l=b(o,"P",{"data-svelte-h":!0}),M(l)!=="svelte-1sa2u10"&&(l.innerHTML=s),t=c(o),a=b(o,"P",{"data-svelte-h":!0}),M(a)!=="svelte-338jxt"&&(a.innerHTML=v)},m(o,y){i(o,l,y),i(o,t,y),i(o,a,y)},d(o){o&&(r(l),r(t),r(a))}}}function Bl(d){let l,s;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMENvbnN0cnVpcmUlMjBsYSUyMGNvbmZpZ3VyYXRpb24lMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEElMEElMjMlMjBDb25zdHJ1aXJlJTIwbGUlMjBtb2QlQzMlQThsZSUyMCVDMyVBMCUyMHBhcnRpciUyMGRlJTIwbGElMjBjb25maWd1cmF0aW9uJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbChjb25maWcp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># Construire la configuration</span>
config = BertConfig()

<span class="hljs-comment"># Construire le modèle à partir de la configuration</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function El(d){let l,s;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjBDb25zdHJ1aXJlJTIwbGElMjBjb25maWd1cmF0aW9uJTBBY29uZmlnJTIwJTNEJTIwQmVydENvbmZpZygpJTBBJTBBJTIzJTIwQ29uc3RydWlyZSUyMGxlJTIwbW9kJUMzJUE4bGUlMjAlQzMlQTAlMjBwYXJ0aXIlMjBkZSUyMGxhJTIwY29uZmlndXJhdGlvbiUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsKGNvbmZpZyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># Construire la configuration</span>
config = BertConfig()

<span class="hljs-comment"># Construire le modèle à partir de la configuration</span>
model = BertModel(config)`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Zl(d){let l,s;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyMExlJTIwbW9kJUMzJUE4bGUlMjBlc3QlMjBpbml0aWFsaXMlQzMlQTklMjBkZSUyMGZhJUMzJUE3b24lMjBhbCVDMyVBOWF0b2lyZSUyMCE=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

config = BertConfig()
model = TFBertModel(config)

<span class="hljs-comment"># Le modèle est initialisé de façon aléatoire !</span>`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Wl(d){let l,s;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwTGUlMjBtb2QlQzMlQThsZSUyMGVzdCUyMGluaXRpYWxpcyVDMyVBOSUyMGRlJTIwZmElQzMlQTdvbiUyMGFsJUMzJUE5YXRvaXJlJTIwIQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

<span class="hljs-comment"># Le modèle est initialisé de façon aléatoire !</span>`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function xl(d){let l,s,t,a="Comme vu précédemment, nous pouvons remplacer <code>TFBertModel</code> par la classe équivalente <code>TFAutoModel</code>. A partir de maintenant nous ferons cela car cela produit un code agnostique <em>checkpoint</em>, c’est-à-dire que si votre code fonctionne pour un <em>checkpoint</em> donné, il devrait fonctionner sans problème avec un autre. Cela s’applique même si l’architecture est différente du moment que le <em>checkpoint</em> a été entraîné pour une tâche similaire (par exemple, une tâche d’analyse de sentiments).",v;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQmVydE1vZGVsJTBBJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyYmVydC1iYXNlLWNhc2VkJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFBertModel

model = TFBertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){_(l.$$.fragment),s=u(),t=f("p"),t.innerHTML=a},l(o){h(l.$$.fragment,o),s=c(o),t=b(o,"P",{"data-svelte-h":!0}),M(t)!=="svelte-oc9kvg"&&(t.innerHTML=a)},m(o,y){$(l,o,y),i(o,s,y),i(o,t,y),v=!0},i(o){v||(p(l.$$.fragment,o),v=!0)},o(o){m(l.$$.fragment,o),v=!1},d(o){o&&(r(s),r(t)),g(l,o)}}}function Il(d){let l,s,t,a="Comme vu précédemment, nous pouvons remplacer <code>BertModel</code> par la classe équivalente <code>AutoModel</code>. A partir de maintenant nous ferons cela car cela produit un code agnostique <em>checkpoint</em>, c’est-à-dire que si votre code fonctionne pour un <em>checkpoint</em> donné, il devrait fonctionner sans problème avec un autre. Cela s’applique même si l’architecture est différente du moment que le <em>checkpoint</em> a été entraîné pour une tâche similaire (par exemple, une tâche d’analyse de sentiments).",v;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUwQSUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel

model = BertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){_(l.$$.fragment),s=u(),t=f("p"),t.innerHTML=a},l(o){h(l.$$.fragment,o),s=c(o),t=b(o,"P",{"data-svelte-h":!0}),M(t)!=="svelte-17o4yw4"&&(t.innerHTML=a)},m(o,y){$(l,o,y),i(o,s,y),i(o,t,y),v=!0},i(o){v||(p(l.$$.fragment,o),v=!0)},o(o){m(l.$$.fragment,o),v=!1},d(o){o&&(r(s),r(t)),g(l,o)}}}function Ll(d){let l,s;return l=new k({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHRmX21vZGVsLmg1",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>tf_model.h5`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Hl(d){let l,s;return l=new k({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHB5dG9yY2hfbW9kZWwuYmlu",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>pytorch_model.<span class="hljs-keyword">bin</span>`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function zl(d){let l,s="Le fichier <em>tf_model.h5</em> est connu comme le <em>dictionnaire d’état</em>. Il contient tous les poids de votre modèle. Les deux fichiers vont de pair : la configuration est nécessaire pour connaître l’architecture de votre modèle, tandis que les poids du modèle sont les paramètres de votre modèle.";return{c(){l=f("p"),l.innerHTML=s},l(t){l=b(t,"P",{"data-svelte-h":!0}),M(l)!=="svelte-b3fl78"&&(l.innerHTML=s)},m(t,a){i(t,l,a)},d(t){t&&r(l)}}}function Rl(d){let l,s="Le fichier <em>pytorch_model.bin</em> est connu comme le <em>dictionnaire d’état</em>. Il contient tous les poids de votre modèle. Les deux fichiers vont de pair : la configuration est nécessaire pour connaître l’architecture de votre modèle, tandis que les poids du modèle sont les paramètres de votre modèle.";return{c(){l=f("p"),l.innerHTML=s},l(t){l=b(t,"P",{"data-svelte-h":!0}),M(l)!=="svelte-xwkf9d"&&(l.innerHTML=s)},m(t,a){i(t,l,a)},d(t){t&&r(l)}}}function Vl(d){let l,s;return l=new k({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0Zi5jb25zdGFudChlbmNvZGVkX3NlcXVlbmNlcyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

model_inputs = tf.constant(encoded_sequences)`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Nl(d){let l,s;return l=new k({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Ql(d){let l,s,t,a,v,o,y,ze,T,w,Ce,J,j,Ue,qe,R,Ut="Cependant, si vous connaissez le type de modèle que vous voulez utiliser, vous pouvez utiliser directement la classe qui définit son architecture. Voyons comment cela fonctionne avec un modèle BERT.",Re,V,Ve,N,qt="La première chose que nous devons faire pour initialiser un modèle BERT est de charger un objet configuration :",Ne,C,U,Be,Q,Bt="La configuration contient de nombreux attributs qui sont utilisés pour construire le modèle :",Qe,G,Ge,A,Ae,F,Et="Bien que vous n’ayez pas encore vu ce que font tous ces attributs, vous devriez en reconnaître certains : l’attribut <code>hidden_size</code> définit la taille du vecteur <code>hidden_states</code>, et <code>num_hidden_layers</code> définit le nombre de couches que le <em>transformer</em> possède.",Fe,X,Xe,D,Zt="Un modèle créé à partir de la configuration par défaut est initialisé avec des valeurs aléatoires :",De,q,B,Ee,P,Wt='Le modèle peut être utilisé tel quel mais il produira du charabia. En effet, il doit d’abord être entraîné. Nous pourrions entraîner le modèle à partir de zéro sur la tâche qui nous intéresse mais comme vous l’avez vu dans le <a href="/course/fr/chapter1">chapitre 1</a> cela nécessiterait beaucoup de temps et de données. De plus cela aurait un impact environnemental non négligeable. Pour éviter les efforts inutiles et redondants, il est impératif de pouvoir partager et réutiliser les modèles qui ont déjà été entraînés.',Pe,Y,xt="Charger un <em>transformer</em> qui a déjà été entraîné est simple : nous pouvons le faire en utilisant la méthode <code>from_pretrained()</code> :",Ye,E,Z,Ze,S,It='Dans l’exemple de code ci-dessus, nous n’avons pas utilisé <code>BertConfig</code> et avons à la place chargé un modèle pré-entraîné via l’identifiant <code>bert-base-cased</code>. Il s’agit d’un <em>checkpoint</em> qui a été entraîné par les auteurs de BERT eux-mêmes. Vous pouvez trouver davantage de détails à son sujet dans la <a href="https://huggingface.co/bert-base-cased" rel="nofollow">fiche du modèle</a>.',Se,O,Lt="Ce modèle est maintenant initialisé avec tous les poids du <em>checkpoint</em>. Il peut être utilisé directement pour l’inférence sur les tâches sur lesquelles il a été entraîné. Il peut également être <em>finetuné</em> sur une nouvelle tâche. En entraînant avec des poids pré-entraînés plutôt qu’à partir de zéro, nous pouvons rapidement obtenir de bons résultats.",Oe,K,Ht="Les poids ont été téléchargés et mis en cache (afin que les futurs appels à la méthode <code>from_pretrained()</code> ne les retéléchargent pas) dans le dossier cache, qui est par défaut <em>~/.cache/huggingface/transformers</em>. Vous pouvez personnaliser votre dossier de cache en définissant la variable d’environnement <code>HF_HOME</code>.",Ke,ee,zt='L’identifiant utilisé pour charger le modèle peut être l’identifiant de n’importe quel modèle sur le <em>Model Hub</em> du moment qu’il est compatible avec l’architecture BERT. La liste complète des <em>checkpoints</em> de BERT disponibles peut être trouvée <a href="https://huggingface.co/models?filter=bert" rel="nofollow">ici</a>.',et,te,tt,le,Rt="Sauvegarder un modèle est aussi facile que d’en charger un. Nous utilisons la méthode <code>save_pretrained()</code>, qui est analogue à la méthode <code>from_pretrained()</code> :",lt,ne,nt,se,Vt="Cela enregistre deux fichiers sur votre disque :",st,W,x,We,re,Nt="Si vous jetez un coup d’œil au fichier <em>config.json</em>, vous reconnaîtrez les attributs nécessaires pour construire l’architecture du modèle. Ce fichier contient également certaines métadonnées, comme l’origine du <em>checkpoint</em> et la version de la bibliothèque 🤗 <em>Transformers</em> que vous utilisiez lors du dernier enregistrement du point <em>checkpoint</em>.",rt,xe,ie,it,ae,Qt="Maintenant que vous savez comment charger et sauvegarder un modèle, essayons de l’utiliser pour faire quelques prédictions. Les <em>transformers</em> ne peuvent traiter que des nombres. Des nombres que le <em>tokenizer</em> génère. Mais avant de parler des <em>tokenizers</em>, explorons les entrées que le modèle accepte.",at,oe,Gt="Les <em>tokenizers</em> se chargent de passer les entrées vers les tenseurs du <em>framework</em> approprié. Pour vous aider à comprendre ce qui se passe, jetons un coup d’œil rapide à ce qui doit être fait avant d’envoyer les entrées au modèle.",ot,ue,At="Disons que nous avons les séquences suivantes :",ut,ce,ct,me,Ft="Le <em>tokenizer</em> les convertit en indices de vocabulaire qui sont généralement appelés <em>input IDs</em>. Chaque séquence est maintenant une liste de nombres ! La sortie résultante est :",mt,pe,pt,de,Xt="Il s’agit d’une liste de séquences encodées : une liste de listes. Les tenseurs n’acceptent que des formes rectangulaires (pensez aux matrices). Ce « tableau » est déjà de forme rectangulaire, donc le convertir en tenseur est facile :",dt,I,L,Ie,fe,ft,be,Dt="L’utilisation des tenseurs avec le modèle est extrêmement simple, il suffit d’appeler le modèle avec les entrées :",bt,Me,Mt,_e,Pt="Bien que le modèle accepte un grand nombre d’arguments différents, seuls les identifiants d’entrée sont nécessaires. Nous expliquerons plus tard ce que font les autres arguments et quand ils sont nécessaires. Avant cela, regardons de plus près les <em>tokenizers</em>, cet outil qui construit les entrées qu’un <em>transformer</em> peut comprendre.",_t,he,ht,He,$t;v=new kl({props:{fw:d[0]}}),y=new Le({props:{title:"Les modèles",local:"les-modèles",headingTag:"h1"}});const Yt=[Jl,wl],$e=[];function St(e,n){return e[0]==="pt"?0:1}T=St(d),w=$e[T]=Yt[T](d);const Ot=[Cl,jl],ge=[];function Kt(e,n){return e[0]==="pt"?0:1}J=Kt(d),j=ge[J]=Ot[J](d);function el(e,n){return e[0]==="pt"?ql:Ul}let gt=el(d),H=gt(d);V=new Le({props:{title:"Création d’un <i> transformer </i>",local:"création-dun-i-transformer-i",headingTag:"h2"}});const tl=[El,Bl],ve=[];function ll(e,n){return e[0]==="pt"?0:1}C=ll(d),U=ve[C]=tl[C](d),G=new k({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),A=new k({props:{code:"QmVydENvbmZpZyUyMCU3QiUwQSUyMCUyMCU1Qi4uLiU1RCUwQSUyMCUyMCUyMmhpZGRlbl9zaXplJTIyJTNBJTIwNzY4JTJDJTBBJTIwJTIwJTIyaW50ZXJtZWRpYXRlX3NpemUlMjIlM0ElMjAzMDcyJTJDJTBBJTIwJTIwJTIybWF4X3Bvc2l0aW9uX2VtYmVkZGluZ3MlMjIlM0ElMjA1MTIlMkMlMEElMjAlMjAlMjJudW1fYXR0ZW50aW9uX2hlYWRzJTIyJTNBJTIwMTIlMkMlMEElMjAlMjAlMjJudW1faGlkZGVuX2xheWVycyUyMiUzQSUyMDEyJTJDJTBBJTIwJTIwJTVCLi4uJTVEJTBBJTdE",highlighted:`BertConfig {
  [...]
  <span class="hljs-string">&quot;hidden_size&quot;</span>: <span class="hljs-number">768</span>,
  <span class="hljs-string">&quot;intermediate_size&quot;</span>: <span class="hljs-number">3072</span>,
  <span class="hljs-string">&quot;max_position_embeddings&quot;</span>: <span class="hljs-number">512</span>,
  <span class="hljs-string">&quot;num_attention_heads&quot;</span>: <span class="hljs-number">12</span>,
  <span class="hljs-string">&quot;num_hidden_layers&quot;</span>: <span class="hljs-number">12</span>,
  [...]
}`,wrap:!1}}),X=new Le({props:{title:"Différentes méthodes de chargement",local:"différentes-méthodes-de-chargement",headingTag:"h3"}});const nl=[Wl,Zl],ye=[];function sl(e,n){return e[0]==="pt"?0:1}q=sl(d),B=ye[q]=nl[q](d);const rl=[Il,xl],ke=[];function il(e,n){return e[0]==="pt"?0:1}E=il(d),Z=ke[E]=rl[E](d),te=new Le({props:{title:"Méthodes de sauvegarde",local:"méthodes-de-sauvegarde",headingTag:"h3"}}),ne=new k({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const al=[Hl,Ll],Te=[];function ol(e,n){return e[0]==="pt"?0:1}W=ol(d),x=Te[W]=al[W](d);function ul(e,n){return e[0]==="pt"?Rl:zl}let vt=ul(d),z=vt(d);ie=new Le({props:{title:"Utilisation d’un <i> transformer </i> pour l’inférence",local:"utilisation-dun-i-transformer-i-pour-linférence",headingTag:"h3"}}),ce=new k({props:{code:"c2VxdWVuY2VzJTIwJTNEJTIwJTVCJTIySGVsbG8hJTIyJTJDJTIwJTIyQ29vbC4lMjIlMkMlMjAlMjJOaWNlISUyMiU1RA==",highlighted:'sequences = [<span class="hljs-string">&quot;Hello!&quot;</span>, <span class="hljs-string">&quot;Cool.&quot;</span>, <span class="hljs-string">&quot;Nice!&quot;</span>]',wrap:!1}}),pe=new k({props:{code:"ZW5jb2RlZF9zZXF1ZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjA3NTkyJTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTVCMTAxJTJDJTIwNDY1OCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjAzODM1JTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTVE",highlighted:`encoded_sequences = [
    [<span class="hljs-number">101</span>, <span class="hljs-number">7592</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">4658</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">3835</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
]`,wrap:!1}});const cl=[Nl,Vl],we=[];function ml(e,n){return e[0]==="pt"?0:1}return I=ml(d),L=we[I]=cl[I](d),fe=new Le({props:{title:"Utilisation des tenseurs comme entrées du modèle",local:"utilisation-des-tenseurs-comme-entrées-du-modèle",headingTag:"h3"}}),Me=new k({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),he=new Tl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter2/3.mdx"}}),{c(){l=f("meta"),s=u(),t=f("p"),a=u(),_(v.$$.fragment),o=u(),_(y.$$.fragment),ze=u(),w.c(),Ce=u(),j.c(),Ue=u(),H.c(),qe=u(),R=f("p"),R.textContent=Ut,Re=u(),_(V.$$.fragment),Ve=u(),N=f("p"),N.textContent=qt,Ne=u(),U.c(),Be=u(),Q=f("p"),Q.textContent=Bt,Qe=u(),_(G.$$.fragment),Ge=u(),_(A.$$.fragment),Ae=u(),F=f("p"),F.innerHTML=Et,Fe=u(),_(X.$$.fragment),Xe=u(),D=f("p"),D.textContent=Zt,De=u(),B.c(),Ee=u(),P=f("p"),P.innerHTML=Wt,Pe=u(),Y=f("p"),Y.innerHTML=xt,Ye=u(),Z.c(),Ze=u(),S=f("p"),S.innerHTML=It,Se=u(),O=f("p"),O.innerHTML=Lt,Oe=u(),K=f("p"),K.innerHTML=Ht,Ke=u(),ee=f("p"),ee.innerHTML=zt,et=u(),_(te.$$.fragment),tt=u(),le=f("p"),le.innerHTML=Rt,lt=u(),_(ne.$$.fragment),nt=u(),se=f("p"),se.textContent=Vt,st=u(),x.c(),We=u(),re=f("p"),re.innerHTML=Nt,rt=u(),z.c(),xe=u(),_(ie.$$.fragment),it=u(),ae=f("p"),ae.innerHTML=Qt,at=u(),oe=f("p"),oe.innerHTML=Gt,ot=u(),ue=f("p"),ue.textContent=At,ut=u(),_(ce.$$.fragment),ct=u(),me=f("p"),me.innerHTML=Ft,mt=u(),_(pe.$$.fragment),pt=u(),de=f("p"),de.textContent=Xt,dt=u(),L.c(),Ie=u(),_(fe.$$.fragment),ft=u(),be=f("p"),be.textContent=Dt,bt=u(),_(Me.$$.fragment),Mt=u(),_e=f("p"),_e.innerHTML=Pt,_t=u(),_(he.$$.fragment),ht=u(),He=f("p"),this.h()},l(e){const n=vl("svelte-u9bgzb",document.head);l=b(n,"META",{name:!0,content:!0}),n.forEach(r),s=c(e),t=b(e,"P",{}),dl(t).forEach(r),a=c(e),h(v.$$.fragment,e),o=c(e),h(y.$$.fragment,e),ze=c(e),w.l(e),Ce=c(e),j.l(e),Ue=c(e),H.l(e),qe=c(e),R=b(e,"P",{"data-svelte-h":!0}),M(R)!=="svelte-16xx9u2"&&(R.textContent=Ut),Re=c(e),h(V.$$.fragment,e),Ve=c(e),N=b(e,"P",{"data-svelte-h":!0}),M(N)!=="svelte-128hsml"&&(N.textContent=qt),Ne=c(e),U.l(e),Be=c(e),Q=b(e,"P",{"data-svelte-h":!0}),M(Q)!=="svelte-1wcnctj"&&(Q.textContent=Bt),Qe=c(e),h(G.$$.fragment,e),Ge=c(e),h(A.$$.fragment,e),Ae=c(e),F=b(e,"P",{"data-svelte-h":!0}),M(F)!=="svelte-mmakwh"&&(F.innerHTML=Et),Fe=c(e),h(X.$$.fragment,e),Xe=c(e),D=b(e,"P",{"data-svelte-h":!0}),M(D)!=="svelte-sswp30"&&(D.textContent=Zt),De=c(e),B.l(e),Ee=c(e),P=b(e,"P",{"data-svelte-h":!0}),M(P)!=="svelte-1eynxp"&&(P.innerHTML=Wt),Pe=c(e),Y=b(e,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-quefk2"&&(Y.innerHTML=xt),Ye=c(e),Z.l(e),Ze=c(e),S=b(e,"P",{"data-svelte-h":!0}),M(S)!=="svelte-1l0tlg3"&&(S.innerHTML=It),Se=c(e),O=b(e,"P",{"data-svelte-h":!0}),M(O)!=="svelte-106uflv"&&(O.innerHTML=Lt),Oe=c(e),K=b(e,"P",{"data-svelte-h":!0}),M(K)!=="svelte-soti5e"&&(K.innerHTML=Ht),Ke=c(e),ee=b(e,"P",{"data-svelte-h":!0}),M(ee)!=="svelte-18qgxgz"&&(ee.innerHTML=zt),et=c(e),h(te.$$.fragment,e),tt=c(e),le=b(e,"P",{"data-svelte-h":!0}),M(le)!=="svelte-kgp8ef"&&(le.innerHTML=Rt),lt=c(e),h(ne.$$.fragment,e),nt=c(e),se=b(e,"P",{"data-svelte-h":!0}),M(se)!=="svelte-1bew937"&&(se.textContent=Vt),st=c(e),x.l(e),We=c(e),re=b(e,"P",{"data-svelte-h":!0}),M(re)!=="svelte-1wb32oc"&&(re.innerHTML=Nt),rt=c(e),z.l(e),xe=c(e),h(ie.$$.fragment,e),it=c(e),ae=b(e,"P",{"data-svelte-h":!0}),M(ae)!=="svelte-1nf2zaj"&&(ae.innerHTML=Qt),at=c(e),oe=b(e,"P",{"data-svelte-h":!0}),M(oe)!=="svelte-193952a"&&(oe.innerHTML=Gt),ot=c(e),ue=b(e,"P",{"data-svelte-h":!0}),M(ue)!=="svelte-ok6y69"&&(ue.textContent=At),ut=c(e),h(ce.$$.fragment,e),ct=c(e),me=b(e,"P",{"data-svelte-h":!0}),M(me)!=="svelte-5w6oym"&&(me.innerHTML=Ft),mt=c(e),h(pe.$$.fragment,e),pt=c(e),de=b(e,"P",{"data-svelte-h":!0}),M(de)!=="svelte-o9qyq5"&&(de.textContent=Xt),dt=c(e),L.l(e),Ie=c(e),h(fe.$$.fragment,e),ft=c(e),be=b(e,"P",{"data-svelte-h":!0}),M(be)!=="svelte-3uo9v2"&&(be.textContent=Dt),bt=c(e),h(Me.$$.fragment,e),Mt=c(e),_e=b(e,"P",{"data-svelte-h":!0}),M(_e)!=="svelte-1jhan2z"&&(_e.innerHTML=Pt),_t=c(e),h(he.$$.fragment,e),ht=c(e),He=b(e,"P",{}),dl(He).forEach(r),this.h()},h(){fl(l,"name","hf:doc:metadata"),fl(l,"content",Gl)},m(e,n){yl(document.head,l),i(e,s,n),i(e,t,n),i(e,a,n),$(v,e,n),i(e,o,n),$(y,e,n),i(e,ze,n),$e[T].m(e,n),i(e,Ce,n),ge[J].m(e,n),i(e,Ue,n),H.m(e,n),i(e,qe,n),i(e,R,n),i(e,Re,n),$(V,e,n),i(e,Ve,n),i(e,N,n),i(e,Ne,n),ve[C].m(e,n),i(e,Be,n),i(e,Q,n),i(e,Qe,n),$(G,e,n),i(e,Ge,n),$(A,e,n),i(e,Ae,n),i(e,F,n),i(e,Fe,n),$(X,e,n),i(e,Xe,n),i(e,D,n),i(e,De,n),ye[q].m(e,n),i(e,Ee,n),i(e,P,n),i(e,Pe,n),i(e,Y,n),i(e,Ye,n),ke[E].m(e,n),i(e,Ze,n),i(e,S,n),i(e,Se,n),i(e,O,n),i(e,Oe,n),i(e,K,n),i(e,Ke,n),i(e,ee,n),i(e,et,n),$(te,e,n),i(e,tt,n),i(e,le,n),i(e,lt,n),$(ne,e,n),i(e,nt,n),i(e,se,n),i(e,st,n),Te[W].m(e,n),i(e,We,n),i(e,re,n),i(e,rt,n),z.m(e,n),i(e,xe,n),$(ie,e,n),i(e,it,n),i(e,ae,n),i(e,at,n),i(e,oe,n),i(e,ot,n),i(e,ue,n),i(e,ut,n),$(ce,e,n),i(e,ct,n),i(e,me,n),i(e,mt,n),$(pe,e,n),i(e,pt,n),i(e,de,n),i(e,dt,n),we[I].m(e,n),i(e,Ie,n),$(fe,e,n),i(e,ft,n),i(e,be,n),i(e,bt,n),$(Me,e,n),i(e,Mt,n),i(e,_e,n),i(e,_t,n),$(he,e,n),i(e,ht,n),i(e,He,n),$t=!0},p(e,[n]){const pl={};n&1&&(pl.fw=e[0]),v.$set(pl);let yt=T;T=St(e),T!==yt&&(je(),m($e[yt],1,1,()=>{$e[yt]=null}),Je(),w=$e[T],w||(w=$e[T]=Yt[T](e),w.c()),p(w,1),w.m(Ce.parentNode,Ce));let kt=J;J=Kt(e),J!==kt&&(je(),m(ge[kt],1,1,()=>{ge[kt]=null}),Je(),j=ge[J],j||(j=ge[J]=Ot[J](e),j.c()),p(j,1),j.m(Ue.parentNode,Ue)),gt!==(gt=el(e))&&(H.d(1),H=gt(e),H&&(H.c(),H.m(qe.parentNode,qe)));let Tt=C;C=ll(e),C!==Tt&&(je(),m(ve[Tt],1,1,()=>{ve[Tt]=null}),Je(),U=ve[C],U||(U=ve[C]=tl[C](e),U.c()),p(U,1),U.m(Be.parentNode,Be));let wt=q;q=sl(e),q!==wt&&(je(),m(ye[wt],1,1,()=>{ye[wt]=null}),Je(),B=ye[q],B||(B=ye[q]=nl[q](e),B.c()),p(B,1),B.m(Ee.parentNode,Ee));let Jt=E;E=il(e),E!==Jt&&(je(),m(ke[Jt],1,1,()=>{ke[Jt]=null}),Je(),Z=ke[E],Z||(Z=ke[E]=rl[E](e),Z.c()),p(Z,1),Z.m(Ze.parentNode,Ze));let jt=W;W=ol(e),W!==jt&&(je(),m(Te[jt],1,1,()=>{Te[jt]=null}),Je(),x=Te[W],x||(x=Te[W]=al[W](e),x.c()),p(x,1),x.m(We.parentNode,We)),vt!==(vt=ul(e))&&(z.d(1),z=vt(e),z&&(z.c(),z.m(xe.parentNode,xe)));let Ct=I;I=ml(e),I!==Ct&&(je(),m(we[Ct],1,1,()=>{we[Ct]=null}),Je(),L=we[I],L||(L=we[I]=cl[I](e),L.c()),p(L,1),L.m(Ie.parentNode,Ie))},i(e){$t||(p(v.$$.fragment,e),p(y.$$.fragment,e),p(w),p(j),p(V.$$.fragment,e),p(U),p(G.$$.fragment,e),p(A.$$.fragment,e),p(X.$$.fragment,e),p(B),p(Z),p(te.$$.fragment,e),p(ne.$$.fragment,e),p(x),p(ie.$$.fragment,e),p(ce.$$.fragment,e),p(pe.$$.fragment,e),p(L),p(fe.$$.fragment,e),p(Me.$$.fragment,e),p(he.$$.fragment,e),$t=!0)},o(e){m(v.$$.fragment,e),m(y.$$.fragment,e),m(w),m(j),m(V.$$.fragment,e),m(U),m(G.$$.fragment,e),m(A.$$.fragment,e),m(X.$$.fragment,e),m(B),m(Z),m(te.$$.fragment,e),m(ne.$$.fragment,e),m(x),m(ie.$$.fragment,e),m(ce.$$.fragment,e),m(pe.$$.fragment,e),m(L),m(fe.$$.fragment,e),m(Me.$$.fragment,e),m(he.$$.fragment,e),$t=!1},d(e){e&&(r(s),r(t),r(a),r(o),r(ze),r(Ce),r(Ue),r(qe),r(R),r(Re),r(Ve),r(N),r(Ne),r(Be),r(Q),r(Qe),r(Ge),r(Ae),r(F),r(Fe),r(Xe),r(D),r(De),r(Ee),r(P),r(Pe),r(Y),r(Ye),r(Ze),r(S),r(Se),r(O),r(Oe),r(K),r(Ke),r(ee),r(et),r(tt),r(le),r(lt),r(nt),r(se),r(st),r(We),r(re),r(rt),r(xe),r(it),r(ae),r(at),r(oe),r(ot),r(ue),r(ut),r(ct),r(me),r(mt),r(pt),r(de),r(dt),r(Ie),r(ft),r(be),r(bt),r(Mt),r(_e),r(_t),r(ht),r(He)),r(l),g(v,e),g(y,e),$e[T].d(e),ge[J].d(e),H.d(e),g(V,e),ve[C].d(e),g(G,e),g(A,e),g(X,e),ye[q].d(e),ke[E].d(e),g(te,e),g(ne,e),Te[W].d(e),z.d(e),g(ie,e),g(ce,e),g(pe,e),we[I].d(e),g(fe,e),g(Me,e),g(he,e)}}}const Gl='{"title":"Les modèles","local":"les-modèles","sections":[{"title":"Création d’un <i> transformer </i>","local":"création-dun-i-transformer-i","sections":[{"title":"Différentes méthodes de chargement","local":"différentes-méthodes-de-chargement","sections":[],"depth":3},{"title":"Méthodes de sauvegarde","local":"méthodes-de-sauvegarde","sections":[],"depth":3},{"title":"Utilisation d’un <i> transformer </i> pour l’inférence","local":"utilisation-dun-i-transformer-i-pour-linférence","sections":[],"depth":3},{"title":"Utilisation des tenseurs comme entrées du modèle","local":"utilisation-des-tenseurs-comme-entrées-du-modèle","sections":[],"depth":3}],"depth":2}],"depth":1}';function Al(d,l,s){let t="pt";return hl(()=>{const a=new URLSearchParams(window.location.search);s(0,t=a.get("fw")||"pt")}),[t]}class Kl extends $l{constructor(l){super(),gl(this,l,Al,Ql,_l,{})}}export{Kl as component};
