import{s as dl,o as $l}from"../chunks/scheduler.37c15a92.js";import{S as yl,i as Tl,g as _,s as a,r as d,A as kl,h as b,f as r,c as p,j as ul,u as $,x as M,k as _l,y as Jl,a as o,v as y,t as f,b as ge,d as m,w as T,p as Ue}from"../chunks/index.2bf4358c.js";import{Y as bl}from"../chunks/Youtube.1e50a667.js";import{C as h}from"../chunks/CodeBlock.4e987730.js";import{C as Ml}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{F as hl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as xe,E as wl}from"../chunks/getInferenceSnippets.8b9eb92a.js";function Cl(u){let l,s;return l=new Ml({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/zh-CN/chapter2/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/zh-CN/chapter2/section3_tf.ipynb"}]}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function gl(u){let l,s;return l=new Ml({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/zh-CN/chapter2/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/zh-CN/chapter2/section3_pt.ipynb"}]}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Ul(u){let l,s;return l=new bl({props:{id:"d3JVgghSOew"}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function jl(u){let l,s;return l=new bl({props:{id:"AhChOFRegn4"}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function vl(u){let l,s="在本节中，我们将更详细地了解如何创建和使用模型。我们将使用 <code>TFAutoModel</code> 类，当你希望从 checkpoint 实例化任何模型时，这非常方便。",t,i,k="<code>TFAutoModel</code> 类及其所有的相关类其实就是对库中可用的各种模型的简单包装。它是一个智能的包装，因为它可以自动猜测你的 checkpoint 适合的模型架构，然后实例化一个具有相同架构的模型。";return{c(){l=_("p"),l.innerHTML=s,t=a(),i=_("p"),i.innerHTML=k},l(c){l=b(c,"P",{"data-svelte-h":!0}),M(l)!=="svelte-xkyiac"&&(l.innerHTML=s),t=p(c),i=b(c,"P",{"data-svelte-h":!0}),M(i)!=="svelte-1htvau9"&&(i.innerHTML=k)},m(c,J){o(c,l,J),o(c,t,J),o(c,i,J)},d(c){c&&(r(l),r(t),r(i))}}}function El(u){let l,s="在本节中，我们将更详细地了解如何创建和使用模型。我们将使用 <code>AutoModel</code> 类，当你希望从 checkpoint 实例化任何模型时，使用它非常方便。",t,i,k="<code>AutoModel</code> 类及其所有的相关类其实就是对库中可用的各种模型的简单包装。它是一个智能的包装，因为它可以自动猜测你的 checkpoint 适合的模型架构，然后实例化一个具有相同架构的模型。";return{c(){l=_("p"),l.innerHTML=s,t=a(),i=_("p"),i.innerHTML=k},l(c){l=b(c,"P",{"data-svelte-h":!0}),M(l)!=="svelte-15um7tz"&&(l.innerHTML=s),t=p(c),i=b(c,"P",{"data-svelte-h":!0}),M(i)!=="svelte-wpv0or"&&(i.innerHTML=k)},m(c,J){o(c,l,J),o(c,t,J),o(c,i,J)},d(c){c&&(r(l),r(t),r(i))}}}function Vl(u){let l,s;return l=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMCVFNSU4OCU5RCVFNSVBNyU4QiVFNSU4QyU5NiUyMENvbmZpZyUyMCVFNyVCMSVCQiUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQSUwQSUyMyUyMCVFNCVCQiU4RSUyMENvbmZpZyUyMCVFNyVCMSVCQiVFNSU4OCU5RCVFNSVBNyU4QiVFNSU4QyU5NiVFNiVBOCVBMSVFNSU5RSU4QiUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># 初始化 Config 类</span>
config = BertConfig()

<span class="hljs-comment"># 从 Config 类初始化模型</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Zl(u){let l,s;return l=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjAlRTUlODglOUQlRTUlQTclOEIlRTUlOEMlOTYlMjBDb25maWclMjAlRTclQjElQkIlMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEElMEElMjMlMjAlRTQlQkIlOEUlMjBDb25maWclMjAlRTclQjElQkIlRTUlODglOUQlRTUlQTclOEIlRTUlOEMlOTYlRTYlQTglQTElRTUlOUUlOEIlMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># 初始化 Config 类</span>
config = BertConfig()

<span class="hljs-comment"># 从 Config 类初始化模型</span>
model = BertModel(config)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Bl(u){let l,s;return l=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyMCVFNiVBOCVBMSVFNSU5RSU4QiVFNSVCNyVCMiVFOSU5QSU4RiVFNiU5QyVCQSVFNSU4OCU5RCVFNSVBNyU4QiVFNSU4QyU5NiE=",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"># 模型已随机初始化!</span>`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Nl(u){let l,s;return l=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwJUU2JUE4JUExJUU1JTlFJThCJUU1JUI3JUIyJUU5JTlBJThGJUU2JTlDJUJBJUU1JTg4JTlEJUU1JUE3JThCJUU1JThDJTk2IQ==",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"># 模型已随机初始化!</span>`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Rl(u){let l,s,t,i="正如你在上一小节看到的，从现在开始，我们将用等效的 <code>TFAutoModel</code> 类替换 <code>TFBert</code> 模型。这样可以摆脱对 checkpoint 的依赖；如果你的代码适用于一个 checkpoint 那么它应该与另一个 checkpoint 无缝地工作。即使体系结构不同，这也适用，只要 checkpoint 是针对类似任务（例如，情绪分析任务）训练的。",k;return l=new h({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(){d(l.$$.fragment),s=a(),t=_("p"),t.innerHTML=i},l(c){$(l.$$.fragment,c),s=p(c),t=b(c,"P",{"data-svelte-h":!0}),M(t)!=="svelte-1bzvxs3"&&(t.innerHTML=i)},m(c,J){y(l,c,J),o(c,s,J),o(c,t,J),k=!0},i(c){k||(m(l.$$.fragment,c),k=!0)},o(c){f(l.$$.fragment,c),k=!1},d(c){c&&(r(s),r(t)),T(l,c)}}}function Wl(u){let l,s,t,i="正如你在上一小节看到的，从现在开始，我们会将 <code>BertModel</code> 替换为等效的 <code>AutoModel</code> 类，这样可以摆脱对 checkpoint 的依赖；如果你的代码适用于一个 checkpoint 那么它就可以在另一个 checkpoint 无缝地工作。即使体系结构不同，这也适用，只要 checkpoint 是针对同类的任务（例如，情绪分析任务）训练的。",k;return l=new h({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(){d(l.$$.fragment),s=a(),t=_("p"),t.innerHTML=i},l(c){$(l.$$.fragment,c),s=p(c),t=b(c,"P",{"data-svelte-h":!0}),M(t)!=="svelte-39u6za"&&(t.innerHTML=i)},m(c,J){y(l,c,J),o(c,s,J),o(c,t,J),k=!0},i(c){k||(m(l.$$.fragment,c),k=!0)},o(c){f(l.$$.fragment,c),k=!1},d(c){c&&(r(s),r(t)),T(l,c)}}}function xl(u){let l,s;return l=new h({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(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Il(u){let l,s;return l=new h({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMG1vZGVsLnNhZmV0ZW5zb3Jz",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>model.safetensors`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Ql(u){let l,s="<code>tf_model.h5</code> 文件被称为 <code>state dictionary（状态字典）</code> ；它包含了你的模型的所有权重。这两个文件是相辅相成的；配置文件是构建你的模型架构所必需的，而模型权重就是你的模型参数。";return{c(){l=_("p"),l.innerHTML=s},l(t){l=b(t,"P",{"data-svelte-h":!0}),M(l)!=="svelte-mgdm0t"&&(l.innerHTML=s)},m(t,i){o(t,l,i)},d(t){t&&r(l)}}}function Hl(u){let l,s="<code>pytorch_model.safetensors</code> 文件被称为 <code>state dictionary（状态字典）</code> ；它包含了你的模型的所有权重。这两个文件是相辅相成的；配置文件是构建你的模型架构所必需的，而模型权重就是你的模型参数。";return{c(){l=_("p"),l.innerHTML=s},l(t){l=b(t,"P",{"data-svelte-h":!0}),M(l)!=="svelte-18jogaq"&&(l.innerHTML=s)},m(t,i){o(t,l,i)},d(t){t&&r(l)}}}function Fl(u){let l,s;return l=new h({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(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Sl(u){let l,s;return l=new h({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){T(l,t)}}}function Ll(u){let l,s,t,i,k,c,J,Qe,w,C,je,g,U,ve,Ee,H,vt="然而，如果你知道要使用模型的类型，你可以直接使用其架构相对应的模型类。让我们看看如何使用 BERT 模型。",He,F,Fe,S,Et="初始化 BERT 模型需要做的第一件事是加载 <code>Config</code> 对象：",Se,j,v,Ve,L,Vt="<code>config</code> 中包含许多用于构建模型的属性：",Le,z,ze,A,Ae,G,Zt="虽然可能你还不知道这些属性的含义，但其中一部分应该比较眼熟： <code>hidden_size</code> 属性定义了 <code>hidden_states（隐状态）</code> 向量的大小，而 <code>num_hidden_layers</code> 定义了 Transformer 模型的层数。",Ge,P,Pe,X,Bt="使用默认配置创建模型会使用随机值对其进行初始化：",Xe,E,V,Ze,D,Nt='这个模型是可以运行并得到结果的，但它会输出胡言乱语；它需要先进行训练才能正常使用。我们可以根据手头的任务从头开始训练模型，但正如你在 <a href="/course/chapter1">第一章</a> 中看到的，这将需要很长的时间和大量的数据，并且产生的碳足迹会对环境产生不可忽视的影响。为了避免不必要的重复工作，能够共享和复用已经训练过的模型是非常重要的。',De,Y,Rt="加载已经训练过的 Transformers 模型很简单——我们可以使用 <code>from_pretrained()</code> 方法：",Ye,Z,B,Be,q,Wt='在上述代码示例中，我们没有使用 <code>BertConfig</code> ，而是通过 <code>bert-base-cased</code> 标签加载了一个预训练模型。这是一个由 BERT 的作者训练的模型 checkpoint 权重；你可以在其 <a href="https://huggingface.co/bert-base-cased" rel="nofollow">模型卡片</a> 中查看更多详细信息。',qe,O,xt="现在，此模型已经用 checkpoint 的所有权重进行了初始化。它可以直接用于推理它训练过的任务，也可以在新任务上进行微调。通过使用预训练的权重进行训练，相比于从头开始训练，我们可以迅速获得比较好的结果。",Oe,K,It="权重已下载并缓存在缓存文件夹中（因此，未来调用 <code>from_pretrained()</code> 方法的调用将不会重新下载它们）默认为 <code>~/.cache/huggingface/transformers</code> 。你可以通过设置 <code>HF_HOME</code> 环境变量来自定义缓存文件夹。",Ke,ee,Qt='加载模型的标识符可以是 Model Hub 上任何模型的标签，只要它与 BERT 架构兼容。可用的 BERT  checkpoint 的完整列表可以在 <a href="https://huggingface.co/models?filter=bert" rel="nofollow">这里</a> 找到。',et,te,tt,le,Ht="保存模型和加载模型一样简单—我们使用 <code>save_pretrained()</code> 方法，该方法类似于 <code>from_pretrained()</code> 方法：",lt,ne,nt,se,Ft="这会将两个文件保存到磁盘：",st,N,R,Ne,re,St="如果你看一下 <code>config.json</code> 文件，你会认出构建模型架构所需的属性。这个文件还包含一些元数据，例如 checkpoint 的来源，以及你上次保存 checkpoint 时所使用的 🤗 Transformers 版本。",rt,Re,oe,ot,ie,Lt="既然你知道了如何加载和保存模型，那么让我们尝试使用它进行一些预测。Transformer 模型只能处理数字——由 tokenizer 转化后的数字。但在我们讨论 tokenizer 之前，让我们探讨一下模型可以接受的输入是什么。",it,ce,zt="可以将输入转换为适当的框架张量，但为了帮助你了解发生了什么，我们将快速了解在将输入发送到模型之前必须做什么。",ct,ae,At="假设我们有几个句子：",at,pe,pt,fe,Gt="tokenizer 将这些转换为词汇表索引，通常称为 <code>input IDs</code> 。每个句子现在都是一个数字列表！结果输出是：",ft,me,mt,ue,Pt="这是一个编码序列列表：一个列表列表。张量只接受矩形（形状规则的的列表：每一列元素的数量都相同）。这个数组已经是矩形了，因此将其转换为张量很容易：",ut,W,x,We,_e,_t,be,Xt="将张量输入给模型非常简单 —— 我们只需调用模型并输入：",bt,Me,Mt,de,Dt="虽然模型接受很多不同的参数，但只有 input IDs 是必需的。我们稍后会解释其他参数的作用以及何时需要它们，但首先我们需要仔细研究一下如何构建 Transformer 模型能理解的输入。",dt,$e,$t,Ie,yt;k=new hl({props:{fw:u[0]}}),J=new xe({props:{title:"模型",local:"模型",headingTag:"h1"}});const Yt=[gl,Cl],ye=[];function qt(e,n){return e[0]==="pt"?0:1}w=qt(u),C=ye[w]=Yt[w](u);const Ot=[jl,Ul],Te=[];function Kt(e,n){return e[0]==="pt"?0:1}g=Kt(u),U=Te[g]=Ot[g](u);function el(e,n){return e[0]==="pt"?El:vl}let Tt=el(u),I=Tt(u);F=new xe({props:{title:"创建 Transformer 模型",local:"创建 Transformer 模型",headingTag:"h2"}});const tl=[Zl,Vl],ke=[];function ll(e,n){return e[0]==="pt"?0:1}j=ll(u),v=ke[j]=tl[j](u),z=new h({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),A=new h({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}}),P=new xe({props:{title:"使用不同的加载方式",local:"使用不同的加载方式",headingTag:"h3"}});const nl=[Nl,Bl],Je=[];function sl(e,n){return e[0]==="pt"?0:1}E=sl(u),V=Je[E]=nl[E](u);const rl=[Wl,Rl],he=[];function ol(e,n){return e[0]==="pt"?0:1}Z=ol(u),B=he[Z]=rl[Z](u),te=new xe({props:{title:"保存模型",local:"保存模型",headingTag:"h3"}}),ne=new h({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const il=[Il,xl],we=[];function cl(e,n){return e[0]==="pt"?0:1}N=cl(u),R=we[N]=il[N](u);function al(e,n){return e[0]==="pt"?Hl:Ql}let kt=al(u),Q=kt(u);oe=new xe({props:{title:"使用 Transformers 模型进行推理",local:"使用 Transformers 模型进行推理",headingTag:"h3"}}),pe=new h({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}}),me=new h({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 pl=[Sl,Fl],Ce=[];function fl(e,n){return e[0]==="pt"?0:1}return W=fl(u),x=Ce[W]=pl[W](u),_e=new xe({props:{title:"使用张量作为模型的输入",local:"使用张量作为模型的输入",headingTag:"h3"}}),Me=new h({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),$e=new wl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/zh-CN/chapter2/3.mdx"}}),{c(){l=_("meta"),s=a(),t=_("p"),i=a(),d(k.$$.fragment),c=a(),d(J.$$.fragment),Qe=a(),C.c(),je=a(),U.c(),ve=a(),I.c(),Ee=a(),H=_("p"),H.textContent=vt,He=a(),d(F.$$.fragment),Fe=a(),S=_("p"),S.innerHTML=Et,Se=a(),v.c(),Ve=a(),L=_("p"),L.innerHTML=Vt,Le=a(),d(z.$$.fragment),ze=a(),d(A.$$.fragment),Ae=a(),G=_("p"),G.innerHTML=Zt,Ge=a(),d(P.$$.fragment),Pe=a(),X=_("p"),X.textContent=Bt,Xe=a(),V.c(),Ze=a(),D=_("p"),D.innerHTML=Nt,De=a(),Y=_("p"),Y.innerHTML=Rt,Ye=a(),B.c(),Be=a(),q=_("p"),q.innerHTML=Wt,qe=a(),O=_("p"),O.textContent=xt,Oe=a(),K=_("p"),K.innerHTML=It,Ke=a(),ee=_("p"),ee.innerHTML=Qt,et=a(),d(te.$$.fragment),tt=a(),le=_("p"),le.innerHTML=Ht,lt=a(),d(ne.$$.fragment),nt=a(),se=_("p"),se.textContent=Ft,st=a(),R.c(),Ne=a(),re=_("p"),re.innerHTML=St,rt=a(),Q.c(),Re=a(),d(oe.$$.fragment),ot=a(),ie=_("p"),ie.textContent=Lt,it=a(),ce=_("p"),ce.textContent=zt,ct=a(),ae=_("p"),ae.textContent=At,at=a(),d(pe.$$.fragment),pt=a(),fe=_("p"),fe.innerHTML=Gt,ft=a(),d(me.$$.fragment),mt=a(),ue=_("p"),ue.textContent=Pt,ut=a(),x.c(),We=a(),d(_e.$$.fragment),_t=a(),be=_("p"),be.textContent=Xt,bt=a(),d(Me.$$.fragment),Mt=a(),de=_("p"),de.textContent=Dt,dt=a(),d($e.$$.fragment),$t=a(),Ie=_("p"),this.h()},l(e){const n=kl("svelte-u9bgzb",document.head);l=b(n,"META",{name:!0,content:!0}),n.forEach(r),s=p(e),t=b(e,"P",{}),ul(t).forEach(r),i=p(e),$(k.$$.fragment,e),c=p(e),$(J.$$.fragment,e),Qe=p(e),C.l(e),je=p(e),U.l(e),ve=p(e),I.l(e),Ee=p(e),H=b(e,"P",{"data-svelte-h":!0}),M(H)!=="svelte-scnaxv"&&(H.textContent=vt),He=p(e),$(F.$$.fragment,e),Fe=p(e),S=b(e,"P",{"data-svelte-h":!0}),M(S)!=="svelte-1u26h3q"&&(S.innerHTML=Et),Se=p(e),v.l(e),Ve=p(e),L=b(e,"P",{"data-svelte-h":!0}),M(L)!=="svelte-14wub7d"&&(L.innerHTML=Vt),Le=p(e),$(z.$$.fragment,e),ze=p(e),$(A.$$.fragment,e),Ae=p(e),G=b(e,"P",{"data-svelte-h":!0}),M(G)!=="svelte-1cvuwa7"&&(G.innerHTML=Zt),Ge=p(e),$(P.$$.fragment,e),Pe=p(e),X=b(e,"P",{"data-svelte-h":!0}),M(X)!=="svelte-vand7f"&&(X.textContent=Bt),Xe=p(e),V.l(e),Ze=p(e),D=b(e,"P",{"data-svelte-h":!0}),M(D)!=="svelte-1u92tve"&&(D.innerHTML=Nt),De=p(e),Y=b(e,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-armqon"&&(Y.innerHTML=Rt),Ye=p(e),B.l(e),Be=p(e),q=b(e,"P",{"data-svelte-h":!0}),M(q)!=="svelte-vf98fl"&&(q.innerHTML=Wt),qe=p(e),O=b(e,"P",{"data-svelte-h":!0}),M(O)!=="svelte-17gpg64"&&(O.textContent=xt),Oe=p(e),K=b(e,"P",{"data-svelte-h":!0}),M(K)!=="svelte-or0g8h"&&(K.innerHTML=It),Ke=p(e),ee=b(e,"P",{"data-svelte-h":!0}),M(ee)!=="svelte-mwxzim"&&(ee.innerHTML=Qt),et=p(e),$(te.$$.fragment,e),tt=p(e),le=b(e,"P",{"data-svelte-h":!0}),M(le)!=="svelte-126yckx"&&(le.innerHTML=Ht),lt=p(e),$(ne.$$.fragment,e),nt=p(e),se=b(e,"P",{"data-svelte-h":!0}),M(se)!=="svelte-1teavnk"&&(se.textContent=Ft),st=p(e),R.l(e),Ne=p(e),re=b(e,"P",{"data-svelte-h":!0}),M(re)!=="svelte-10htswe"&&(re.innerHTML=St),rt=p(e),Q.l(e),Re=p(e),$(oe.$$.fragment,e),ot=p(e),ie=b(e,"P",{"data-svelte-h":!0}),M(ie)!=="svelte-1lrty7n"&&(ie.textContent=Lt),it=p(e),ce=b(e,"P",{"data-svelte-h":!0}),M(ce)!=="svelte-sw9156"&&(ce.textContent=zt),ct=p(e),ae=b(e,"P",{"data-svelte-h":!0}),M(ae)!=="svelte-1k8pvre"&&(ae.textContent=At),at=p(e),$(pe.$$.fragment,e),pt=p(e),fe=b(e,"P",{"data-svelte-h":!0}),M(fe)!=="svelte-1wl5mb1"&&(fe.innerHTML=Gt),ft=p(e),$(me.$$.fragment,e),mt=p(e),ue=b(e,"P",{"data-svelte-h":!0}),M(ue)!=="svelte-1o0nm05"&&(ue.textContent=Pt),ut=p(e),x.l(e),We=p(e),$(_e.$$.fragment,e),_t=p(e),be=b(e,"P",{"data-svelte-h":!0}),M(be)!=="svelte-1ytol1x"&&(be.textContent=Xt),bt=p(e),$(Me.$$.fragment,e),Mt=p(e),de=b(e,"P",{"data-svelte-h":!0}),M(de)!=="svelte-1xucx0x"&&(de.textContent=Dt),dt=p(e),$($e.$$.fragment,e),$t=p(e),Ie=b(e,"P",{}),ul(Ie).forEach(r),this.h()},h(){_l(l,"name","hf:doc:metadata"),_l(l,"content",zl)},m(e,n){Jl(document.head,l),o(e,s,n),o(e,t,n),o(e,i,n),y(k,e,n),o(e,c,n),y(J,e,n),o(e,Qe,n),ye[w].m(e,n),o(e,je,n),Te[g].m(e,n),o(e,ve,n),I.m(e,n),o(e,Ee,n),o(e,H,n),o(e,He,n),y(F,e,n),o(e,Fe,n),o(e,S,n),o(e,Se,n),ke[j].m(e,n),o(e,Ve,n),o(e,L,n),o(e,Le,n),y(z,e,n),o(e,ze,n),y(A,e,n),o(e,Ae,n),o(e,G,n),o(e,Ge,n),y(P,e,n),o(e,Pe,n),o(e,X,n),o(e,Xe,n),Je[E].m(e,n),o(e,Ze,n),o(e,D,n),o(e,De,n),o(e,Y,n),o(e,Ye,n),he[Z].m(e,n),o(e,Be,n),o(e,q,n),o(e,qe,n),o(e,O,n),o(e,Oe,n),o(e,K,n),o(e,Ke,n),o(e,ee,n),o(e,et,n),y(te,e,n),o(e,tt,n),o(e,le,n),o(e,lt,n),y(ne,e,n),o(e,nt,n),o(e,se,n),o(e,st,n),we[N].m(e,n),o(e,Ne,n),o(e,re,n),o(e,rt,n),Q.m(e,n),o(e,Re,n),y(oe,e,n),o(e,ot,n),o(e,ie,n),o(e,it,n),o(e,ce,n),o(e,ct,n),o(e,ae,n),o(e,at,n),y(pe,e,n),o(e,pt,n),o(e,fe,n),o(e,ft,n),y(me,e,n),o(e,mt,n),o(e,ue,n),o(e,ut,n),Ce[W].m(e,n),o(e,We,n),y(_e,e,n),o(e,_t,n),o(e,be,n),o(e,bt,n),y(Me,e,n),o(e,Mt,n),o(e,de,n),o(e,dt,n),y($e,e,n),o(e,$t,n),o(e,Ie,n),yt=!0},p(e,[n]){const ml={};n&1&&(ml.fw=e[0]),k.$set(ml);let Jt=w;w=qt(e),w!==Jt&&(Ue(),f(ye[Jt],1,1,()=>{ye[Jt]=null}),ge(),C=ye[w],C||(C=ye[w]=Yt[w](e),C.c()),m(C,1),C.m(je.parentNode,je));let ht=g;g=Kt(e),g!==ht&&(Ue(),f(Te[ht],1,1,()=>{Te[ht]=null}),ge(),U=Te[g],U||(U=Te[g]=Ot[g](e),U.c()),m(U,1),U.m(ve.parentNode,ve)),Tt!==(Tt=el(e))&&(I.d(1),I=Tt(e),I&&(I.c(),I.m(Ee.parentNode,Ee)));let wt=j;j=ll(e),j!==wt&&(Ue(),f(ke[wt],1,1,()=>{ke[wt]=null}),ge(),v=ke[j],v||(v=ke[j]=tl[j](e),v.c()),m(v,1),v.m(Ve.parentNode,Ve));let Ct=E;E=sl(e),E!==Ct&&(Ue(),f(Je[Ct],1,1,()=>{Je[Ct]=null}),ge(),V=Je[E],V||(V=Je[E]=nl[E](e),V.c()),m(V,1),V.m(Ze.parentNode,Ze));let gt=Z;Z=ol(e),Z!==gt&&(Ue(),f(he[gt],1,1,()=>{he[gt]=null}),ge(),B=he[Z],B||(B=he[Z]=rl[Z](e),B.c()),m(B,1),B.m(Be.parentNode,Be));let Ut=N;N=cl(e),N!==Ut&&(Ue(),f(we[Ut],1,1,()=>{we[Ut]=null}),ge(),R=we[N],R||(R=we[N]=il[N](e),R.c()),m(R,1),R.m(Ne.parentNode,Ne)),kt!==(kt=al(e))&&(Q.d(1),Q=kt(e),Q&&(Q.c(),Q.m(Re.parentNode,Re)));let jt=W;W=fl(e),W!==jt&&(Ue(),f(Ce[jt],1,1,()=>{Ce[jt]=null}),ge(),x=Ce[W],x||(x=Ce[W]=pl[W](e),x.c()),m(x,1),x.m(We.parentNode,We))},i(e){yt||(m(k.$$.fragment,e),m(J.$$.fragment,e),m(C),m(U),m(F.$$.fragment,e),m(v),m(z.$$.fragment,e),m(A.$$.fragment,e),m(P.$$.fragment,e),m(V),m(B),m(te.$$.fragment,e),m(ne.$$.fragment,e),m(R),m(oe.$$.fragment,e),m(pe.$$.fragment,e),m(me.$$.fragment,e),m(x),m(_e.$$.fragment,e),m(Me.$$.fragment,e),m($e.$$.fragment,e),yt=!0)},o(e){f(k.$$.fragment,e),f(J.$$.fragment,e),f(C),f(U),f(F.$$.fragment,e),f(v),f(z.$$.fragment,e),f(A.$$.fragment,e),f(P.$$.fragment,e),f(V),f(B),f(te.$$.fragment,e),f(ne.$$.fragment,e),f(R),f(oe.$$.fragment,e),f(pe.$$.fragment,e),f(me.$$.fragment,e),f(x),f(_e.$$.fragment,e),f(Me.$$.fragment,e),f($e.$$.fragment,e),yt=!1},d(e){e&&(r(s),r(t),r(i),r(c),r(Qe),r(je),r(ve),r(Ee),r(H),r(He),r(Fe),r(S),r(Se),r(Ve),r(L),r(Le),r(ze),r(Ae),r(G),r(Ge),r(Pe),r(X),r(Xe),r(Ze),r(D),r(De),r(Y),r(Ye),r(Be),r(q),r(qe),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(Ne),r(re),r(rt),r(Re),r(ot),r(ie),r(it),r(ce),r(ct),r(ae),r(at),r(pt),r(fe),r(ft),r(mt),r(ue),r(ut),r(We),r(_t),r(be),r(bt),r(Mt),r(de),r(dt),r($t),r(Ie)),r(l),T(k,e),T(J,e),ye[w].d(e),Te[g].d(e),I.d(e),T(F,e),ke[j].d(e),T(z,e),T(A,e),T(P,e),Je[E].d(e),he[Z].d(e),T(te,e),T(ne,e),we[N].d(e),Q.d(e),T(oe,e),T(pe,e),T(me,e),Ce[W].d(e),T(_e,e),T(Me,e),T($e,e)}}}const zl='{"title":"模型","local":"模型","sections":[{"title":"创建 Transformer 模型","local":"创建 Transformer 模型","sections":[{"title":"使用不同的加载方式","local":"使用不同的加载方式","sections":[],"depth":3},{"title":"保存模型","local":"保存模型","sections":[],"depth":3},{"title":"使用 Transformers 模型进行推理","local":"使用 Transformers 模型进行推理","sections":[],"depth":3},{"title":"使用张量作为模型的输入","local":"使用张量作为模型的输入","sections":[],"depth":3}],"depth":2}],"depth":1}';function Al(u,l,s){let t="pt";return $l(()=>{const i=new URLSearchParams(window.location.search);s(0,t=i.get("fw")||"pt")}),[t]}class Kl extends yl{constructor(l){super(),Tl(this,l,Al,Ll,dl,{})}}export{Kl as component};
