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