Buckets:
| import{s as xl,o as Vl,n as Ls}from"../chunks/scheduler.d586627e.js";import{S as Gl,i as El,g as n,s as a,r as d,A as Yl,h as i,f as l,c as o,j as zl,u as p,x as m,k as ql,y as Ql,a as t,v as c,d as M,t as u,w as y}from"../chunks/index.8589a59c.js";import{T as Ss}from"../chunks/Tip.84e2336e.js";import{C as f}from"../chunks/CodeBlock.47c46d2c.js";import{H as Ne,E as Hl}from"../chunks/EditOnGithub.073dfa26.js";function Fl(w){let r,j="Se o seu modelo for muito semelhante a um modelo dentro da biblioteca, você poderá reutilizar a mesma configuração desse modelo.";return{c(){r=n("p"),r.textContent=j},l(J){r=i(J,"P",{"data-svelte-h":!0}),m(r)!=="svelte-14dq0cm"&&(r.textContent=j)},m(J,T){t(J,r,T)},p:Ls,d(J){J&&l(r)}}}function Sl(w){let r,j="Esta API é experimental e pode ter algumas pequenas alterações nas próximas versões.";return{c(){r=n("p"),r.textContent=j},l(J){r=i(J,"P",{"data-svelte-h":!0}),m(r)!=="svelte-1s1oyxv"&&(r.textContent=j)},m(J,T){t(J,r,T)},p:Ls,d(J){J&&l(r)}}}function Ll(w){let r,j=`Se estiver copiando arquivos de modelagem da biblioteca, você precisará substituir todas as importações relativas na parte superior do arquivo | |
| para importar do pacote <code>transformers</code>.`;return{c(){r=n("p"),r.innerHTML=j},l(J){r=i(J,"P",{"data-svelte-h":!0}),m(r)!=="svelte-jm95tu"&&(r.innerHTML=j)},m(J,T){t(J,r,T)},p:Ls,d(J){J&&l(r)}}}function Pl(w){let r,j,J,T,g,Be,I,Ps=`A biblioteca 🤗 Transformers foi projetada para ser facilmente extensível. Cada modelo é totalmente codificado em uma determinada subpasta | |
| do repositório sem abstração, para que você possa copiar facilmente um arquivo de modelagem e ajustá-lo às suas necessidades.`,We,v,Ds=`Se você estiver escrevendo um modelo totalmente novo, pode ser mais fácil começar do zero. Neste tutorial, mostraremos | |
| como escrever um modelo customizado e sua configuração para que possa ser usado com Transformers, e como você pode compartilhá-lo | |
| com a comunidade (com o código em que se baseia) para que qualquer pessoa possa usá-lo, mesmo se não estiver presente na biblioteca 🤗 Transformers.`,Xe,Z,Ks=`Ilustraremos tudo isso em um modelo ResNet, envolvendo a classe ResNet do | |
| <a href="https://github.com/rwightman/pytorch-image-models" rel="nofollow">biblioteca timm</a> em um <code>PreTrainedModel</code>.`,ze,_,qe,h,Os=`Antes de mergulharmos no modelo, vamos primeiro escrever sua configuração. A configuração de um modelo é um objeto que | |
| terá todas as informações necessárias para construir o modelo. Como veremos na próxima seção, o modelo só pode | |
| ter um <code>config</code> para ser inicializado, então realmente precisamos que esse objeto seja o mais completo possível.`,xe,A,el=`Em nosso exemplo, pegaremos alguns argumentos da classe ResNet que podemos querer ajustar. Diferentes | |
| configurações nos dará os diferentes tipos de ResNets que são possíveis. Em seguida, apenas armazenamos esses argumentos, | |
| após verificar a validade de alguns deles.`,Ve,$,Ge,k,sl="As três coisas importantes a serem lembradas ao escrever sua própria configuração são:",Ee,N,ll="<li>você tem que herdar de <code>PretrainedConfig</code>,</li> <li>o <code>__init__</code> do seu <code>PretrainedConfig</code> deve aceitar quaisquer kwargs,</li> <li>esses <code>kwargs</code> precisam ser passados para a superclasse <code>__init__</code>.</li>",Ye,R,tl=`A herança é para garantir que você obtenha todas as funcionalidades da biblioteca 🤗 Transformers, enquanto as outras duas | |
| restrições vêm do fato de um <code>PretrainedConfig</code> ter mais campos do que os que você está configurando. Ao recarregar um | |
| config com o método <code>from_pretrained</code>, esses campos precisam ser aceitos pelo seu config e então enviados para a | |
| superclasse.`,Qe,B,al=`Definir um <code>model_type</code> para sua configuração (aqui <code>model_type="resnet"</code>) não é obrigatório, a menos que você queira | |
| registrar seu modelo com as classes automáticas (veja a última seção).`,He,W,ol=`Com isso feito, você pode facilmente criar e salvar sua configuração como faria com qualquer outra configuração de modelo da | |
| biblioteca. Aqui está como podemos criar uma configuração resnet50d e salvá-la:`,Fe,X,Se,z,nl=`Isso salvará um arquivo chamado <code>config.json</code> dentro da pasta <code>custom-resnet</code>. Você pode então recarregar sua configuração com o | |
| método <code>from_pretrained</code>:`,Le,q,Pe,x,il=`Você também pode usar qualquer outro método da classe <code>PretrainedConfig</code>, como <code>push_to_hub()</code> para | |
| carregar diretamente sua configuração para o Hub.`,De,V,Ke,G,ml=`Agora que temos nossa configuração ResNet, podemos continuar escrevendo o modelo. Na verdade, escreveremos dois: um que | |
| extrai os recursos ocultos de um lote de imagens (como <code>BertModel</code>) e um que é adequado para classificação de imagem | |
| (como <code>BertForSequenceClassification</code>).`,Oe,E,rl=`Como mencionamos antes, escreveremos apenas um wrapper solto do modelo para mantê-lo simples para este exemplo. A única | |
| coisa que precisamos fazer antes de escrever esta classe é um mapa entre os tipos de bloco e as classes de bloco reais. Então o | |
| modelo é definido a partir da configuração passando tudo para a classe <code>ResNet</code>:`,es,Y,ss,Q,dl="Para o modelo que irá classificar as imagens, vamos apenas alterar o método forward:",ls,H,ts,F,pl=`Em ambos os casos, observe como herdamos de <code>PreTrainedModel</code> e chamamos a inicialização da superclasse com o <code>config</code> | |
| (um pouco parecido quando você escreve um <code>torch.nn.Module</code>). A linha que define o <code>config_class</code> não é obrigatória, a menos que | |
| você deseje registrar seu modelo com as classes automáticas (consulte a última seção).`,as,U,os,S,cl=`Você pode fazer com que seu modelo retorne o que você quiser,porém retornando um dicionário como fizemos para | |
| <code>ResnetModelForImageClassification</code>, com a função de perda incluída quando os rótulos são passados, vai tornar seu modelo diretamente | |
| utilizável dentro da classe <code>Trainer</code>. Você pode usar outro formato de saída, desde que esteja planejando usar seu próprio | |
| laço de treinamento ou outra biblioteca para treinamento.`,ns,L,Ml="Agora que temos nossa classe do modelo, vamos criar uma:",is,P,ms,D,ul=`Novamente, você pode usar qualquer um dos métodos do <code>PreTrainedModel</code>, como <code>save_pretrained()</code> ou | |
| <code>push_to_hub()</code>. Usaremos o segundo na próxima seção e veremos como enviar os pesos e | |
| o código do nosso modelo. Mas primeiro, vamos carregar alguns pesos pré-treinados dentro do nosso modelo.`,rs,K,yl=`Em seu próprio caso de uso, você provavelmente estará treinando seu modelo customizado em seus próprios dados. Para este tutorial ser rápido, | |
| usaremos a versão pré-treinada do resnet50d. Como nosso modelo é apenas um wrapper em torno dele, será | |
| fácil de transferir esses pesos:`,ds,O,ps,ee,Jl=`Agora vamos ver como ter certeza de que quando fazemos <code>save_pretrained()</code> ou <code>push_to_hub()</code>, o | |
| código do modelo é salvo.`,cs,se,Ms,b,us,le,fl=`Primeiro, certifique-se de que seu modelo esteja totalmente definido em um arquivo <code>.py</code>. Ele pode contar com importações relativas para alguns outros arquivos | |
| desde que todos os arquivos estejam no mesmo diretório (ainda não suportamos submódulos para este recurso). Para o nosso exemplo, | |
| vamos definir um arquivo <code>modeling_resnet.py</code> e um arquivo <code>configuration_resnet.py</code> em uma pasta no | |
| diretório de trabalho atual chamado <code>resnet_model</code>. O arquivo de configuração contém o código para <code>ResnetConfig</code> e o arquivo de modelagem | |
| contém o código do <code>ResnetModel</code> e <code>ResnetModelForImageClassification</code>.`,ys,te,Js,ae,jl="O <code>__init__.py</code> pode estar vazio, apenas está lá para que o Python detecte que o <code>resnet_model</code> possa ser usado como um módulo.",fs,C,js,oe,Tl="Observe que você pode reutilizar (ou subclasse) uma configuração/modelo existente.",Ts,ne,wl=`Para compartilhar seu modelo com a comunidade, siga estas etapas: primeiro importe o modelo ResNet e a configuração do | |
| arquivos criados:`,ws,ie,Us,me,Ul=`Então você tem que dizer à biblioteca que deseja copiar os arquivos de código desses objetos ao usar o <code>save_pretrained</code> | |
| e registrá-los corretamente com uma determinada classe automáticas (especialmente para modelos), basta executar:`,bs,re,Cs,de,bl=`Observe que não há necessidade de especificar uma classe automática para a configuração (há apenas uma classe automática, | |
| <code>AutoConfig</code>), mas é diferente para os modelos. Seu modelo customizado pode ser adequado para muitas tarefas diferentes, então você | |
| tem que especificar qual das classes automáticas é a correta para o seu modelo.`,gs,pe,Cl="Em seguida, vamos criar a configuração e os modelos como fizemos antes:",Is,ce,vs,Me,gl="Agora para enviar o modelo para o Hub, certifique-se de estar logado. Ou execute no seu terminal:",Zs,ue,_s,ye,Il="ou a partir do notebook:",hs,Je,As,fe,vl="Você pode então enviar para seu próprio namespace (ou uma organização da qual você é membro) assim:",$s,je,ks,Te,Zl=`Além dos pesos do modelo e da configuração no formato json, isso também copiou o modelo e | |
| configuração <code>.py</code> na pasta <code>custom-resnet50d</code> e carregou o resultado para o Hub. Você pode conferir o resultado | |
| neste <a href="https://huggingface.co/sgugger/custom-resnet50d" rel="nofollow">repositório de modelos</a>.`,Ns,we,_l='Consulte o <a href="model_sharing">tutorial de compartilhamento</a> para obter mais informações sobre o método push_to_hub.',Rs,Ue,Bs,be,hl=`Você pode usar qualquer configuração, modelo ou tokenizador com arquivos de código customizados em seu repositório com as classes automáticas e | |
| o método <code>from_pretrained</code>. Todos os arquivos e códigos carregados no Hub são verificados quanto a malware (consulte a documentação de <a href="https://huggingface.co/docs/hub/security#malware-scanning" rel="nofollow">Segurança do Hub</a> para obter mais informações), mas você ainda deve | |
| revisar o código do modelo e o autor para evitar a execução de código malicioso em sua máquina. Defina <code>trust_remote_code=True</code> para usar | |
| um modelo com código customizado:`,Ws,Ce,Xs,ge,Al=`Também é fortemente recomendado passar um hash de confirmação como uma <code>revisão</code> para garantir que o autor dos modelos não | |
| atualize o código com novas linhas maliciosas (a menos que você confie totalmente nos autores dos modelos).`,zs,Ie,qs,ve,$l=`Observe que ao navegar no histórico de commits do repositório do modelo no Hub, há um botão para copiar facilmente o commit | |
| hash de qualquer commit.`,xs,Ze,Vs,_e,kl=`Se você estiver escrevendo uma biblioteca que estende 🤗 Transformers, talvez queira estender as classes automáticas para incluir seus próprios | |
| modelos. Isso é diferente de enviar o código para o Hub no sentido de que os usuários precisarão importar sua biblioteca para | |
| obter os modelos customizados (ao contrário de baixar automaticamente o código do modelo do Hub).`,Gs,he,Nl=`Desde que sua configuração tenha um atributo <code>model_type</code> diferente dos tipos de modelo existentes e que as classes do seu modelo | |
| tenha os atributos <code>config_class</code> corretos, você pode simplesmente adicioná-los às classes automáticas assim:`,Es,Ae,Ys,$e,Rl=`Observe que o primeiro argumento usado ao registrar sua configuração customizada para <code>AutoConfig</code> precisa corresponder ao <code>model_type</code> | |
| de sua configuração customizada. E o primeiro argumento usado ao registrar seus modelos customizados, para qualquer necessidade de classe de modelo automático | |
| deve corresponder ao <code>config_class</code> desses modelos.`,Qs,ke,Hs,Re,Fs;return g=new Ne({props:{title:"Compartilhando modelos customizados",local:"compartilhando-modelos-customizados",headingTag:"h1"}}),_=new Ne({props:{title:"Escrevendo uma configuração customizada",local:"escrevendo-uma-configuração-customizada",headingTag:"h2"}}),$=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFByZXRyYWluZWRDb25maWclMEFmcm9tJTIwdHlwaW5nJTIwaW1wb3J0JTIwTGlzdCUwQSUwQSUwQWNsYXNzJTIwUmVzbmV0Q29uZmlnKFByZXRyYWluZWRDb25maWcpJTNBJTBBJTIwJTIwJTIwJTIwbW9kZWxfdHlwZSUyMCUzRCUyMCUyMnJlc25ldCUyMiUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMF9faW5pdF9fKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBibG9ja190eXBlJTNEJTIyYm90dGxlbmVjayUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxheWVycyUzQSUyMExpc3QlNUJpbnQlNUQlMjAlM0QlMjAlNUIzJTJDJTIwNCUyQyUyMDYlMkMlMjAzJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX2NsYXNzZXMlM0ElMjBpbnQlMjAlM0QlMjAxMDAwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW5wdXRfY2hhbm5lbHMlM0ElMjBpbnQlMjAlM0QlMjAzJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FyZGluYWxpdHklM0ElMjBpbnQlMjAlM0QlMjAxJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmFzZV93aWR0aCUzQSUyMGludCUyMCUzRCUyMDY0JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RlbV93aWR0aCUzQSUyMGludCUyMCUzRCUyMDY0JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RlbV90eXBlJTNBJTIwc3RyJTIwJTNEJTIwJTIyJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXZnX2Rvd24lM0ElMjBib29sJTIwJTNEJTIwRmFsc2UlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAqKmt3YXJncyUyQyUwQSUyMCUyMCUyMCUyMCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGJsb2NrX3R5cGUlMjBub3QlMjBpbiUyMCU1QiUyMmJhc2ljJTIyJTJDJTIwJTIyYm90dGxlbmVjayUyMiU1RCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJhaXNlJTIwVmFsdWVFcnJvcihmJTIyJTYwYmxvY2tfdHlwZSU2MCUyMG11c3QlMjBiZSUyMCdiYXNpYyclMjBvciUyMGJvdHRsZW5lY2snJTJDJTIwZ290JTIwJTdCYmxvY2tfdHlwZSU3RC4lMjIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBzdGVtX3R5cGUlMjBub3QlMjBpbiUyMCU1QiUyMiUyMiUyQyUyMCUyMmRlZXAlMjIlMkMlMjAlMjJkZWVwLXRpZXJlZCUyMiU1RCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJhaXNlJTIwVmFsdWVFcnJvcihmJTIyJTYwc3RlbV90eXBlJTYwJTIwbXVzdCUyMGJlJTIwJyclMkMlMjAnZGVlcCclMjBvciUyMCdkZWVwLXRpZXJlZCclMkMlMjBnb3QlMjAlN0JzdGVtX3R5cGUlN0QuJTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYuYmxvY2tfdHlwZSUyMCUzRCUyMGJsb2NrX3R5cGUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLmxheWVycyUyMCUzRCUyMGxheWVycyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYubnVtX2NsYXNzZXMlMjAlM0QlMjBudW1fY2xhc3NlcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYuaW5wdXRfY2hhbm5lbHMlMjAlM0QlMjBpbnB1dF9jaGFubmVscyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYuY2FyZGluYWxpdHklMjAlM0QlMjBjYXJkaW5hbGl0eSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYuYmFzZV93aWR0aCUyMCUzRCUyMGJhc2Vfd2lkdGglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLnN0ZW1fd2lkdGglMjAlM0QlMjBzdGVtX3dpZHRoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5zdGVtX3R5cGUlMjAlM0QlMjBzdGVtX3R5cGUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLmF2Z19kb3duJTIwJTNEJTIwYXZnX2Rvd24lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdXBlcigpLl9faW5pdF9fKCoqa3dhcmdzKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> PretrainedConfig | |
| <span class="hljs-keyword">from</span> typing <span class="hljs-keyword">import</span> <span class="hljs-type">List</span> | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">ResnetConfig</span>(<span class="hljs-title class_ inherited__">PretrainedConfig</span>): | |
| model_type = <span class="hljs-string">"resnet"</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params"> | |
| self, | |
| block_type=<span class="hljs-string">"bottleneck"</span>, | |
| layers: <span class="hljs-type">List</span>[<span class="hljs-built_in">int</span>] = [<span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">6</span>, <span class="hljs-number">3</span>], | |
| num_classes: <span class="hljs-built_in">int</span> = <span class="hljs-number">1000</span>, | |
| input_channels: <span class="hljs-built_in">int</span> = <span class="hljs-number">3</span>, | |
| cardinality: <span class="hljs-built_in">int</span> = <span class="hljs-number">1</span>, | |
| base_width: <span class="hljs-built_in">int</span> = <span class="hljs-number">64</span>, | |
| stem_width: <span class="hljs-built_in">int</span> = <span class="hljs-number">64</span>, | |
| stem_type: <span class="hljs-built_in">str</span> = <span class="hljs-string">""</span>, | |
| avg_down: <span class="hljs-built_in">bool</span> = <span class="hljs-literal">False</span>, | |
| **kwargs, | |
| </span>): | |
| <span class="hljs-keyword">if</span> block_type <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> [<span class="hljs-string">"basic"</span>, <span class="hljs-string">"bottleneck"</span>]: | |
| <span class="hljs-keyword">raise</span> ValueError(<span class="hljs-string">f"\`block_type\` must be 'basic' or bottleneck', got <span class="hljs-subst">{block_type}</span>."</span>) | |
| <span class="hljs-keyword">if</span> stem_type <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> [<span class="hljs-string">""</span>, <span class="hljs-string">"deep"</span>, <span class="hljs-string">"deep-tiered"</span>]: | |
| <span class="hljs-keyword">raise</span> ValueError(<span class="hljs-string">f"\`stem_type\` must be '', 'deep' or 'deep-tiered', got <span class="hljs-subst">{stem_type}</span>."</span>) | |
| self.block_type = block_type | |
| self.layers = layers | |
| self.num_classes = num_classes | |
| self.input_channels = input_channels | |
| self.cardinality = cardinality | |
| self.base_width = base_width | |
| self.stem_width = stem_width | |
| self.stem_type = stem_type | |
| self.avg_down = avg_down | |
| <span class="hljs-built_in">super</span>().__init__(**kwargs)`,wrap:!1}}),X=new f({props:{code:"cmVzbmV0NTBkX2NvbmZpZyUyMCUzRCUyMFJlc25ldENvbmZpZyhibG9ja190eXBlJTNEJTIyYm90dGxlbmVjayUyMiUyQyUyMHN0ZW1fd2lkdGglM0QzMiUyQyUyMHN0ZW1fdHlwZSUzRCUyMmRlZXAlMjIlMkMlMjBhdmdfZG93biUzRFRydWUpJTBBcmVzbmV0NTBkX2NvbmZpZy5zYXZlX3ByZXRyYWluZWQoJTIyY3VzdG9tLXJlc25ldCUyMik=",highlighted:`resnet50d_config = ResnetConfig(block_type=<span class="hljs-string">"bottleneck"</span>, stem_width=<span class="hljs-number">32</span>, stem_type=<span class="hljs-string">"deep"</span>, avg_down=<span class="hljs-literal">True</span>) | |
| resnet50d_config.save_pretrained(<span class="hljs-string">"custom-resnet"</span>)`,wrap:!1}}),q=new f({props:{code:"cmVzbmV0NTBkX2NvbmZpZyUyMCUzRCUyMFJlc25ldENvbmZpZy5mcm9tX3ByZXRyYWluZWQoJTIyY3VzdG9tLXJlc25ldCUyMik=",highlighted:'resnet50d_config = ResnetConfig.from_pretrained(<span class="hljs-string">"custom-resnet"</span>)',wrap:!1}}),V=new Ne({props:{title:"Escrevendo um modelo customizado",local:"escrevendo-um-modelo-customizado",headingTag:"h2"}}),Y=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFByZVRyYWluZWRNb2RlbCUwQWZyb20lMjB0aW1tLm1vZGVscy5yZXNuZXQlMjBpbXBvcnQlMjBCYXNpY0Jsb2NrJTJDJTIwQm90dGxlbmVjayUyQyUyMFJlc05ldCUwQWZyb20lMjAuY29uZmlndXJhdGlvbl9yZXNuZXQlMjBpbXBvcnQlMjBSZXNuZXRDb25maWclMEElMEElMEFCTE9DS19NQVBQSU5HJTIwJTNEJTIwJTdCJTIyYmFzaWMlMjIlM0ElMjBCYXNpY0Jsb2NrJTJDJTIwJTIyYm90dGxlbmVjayUyMiUzQSUyMEJvdHRsZW5lY2slN0QlMEElMEElMEFjbGFzcyUyMFJlc25ldE1vZGVsKFByZVRyYWluZWRNb2RlbCklM0ElMEElMjAlMjAlMjAlMjBjb25maWdfY2xhc3MlMjAlM0QlMjBSZXNuZXRDb25maWclMEElMEElMjAlMjAlMjAlMjBkZWYlMjBfX2luaXRfXyhzZWxmJTJDJTIwY29uZmlnKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN1cGVyKCkuX19pbml0X18oY29uZmlnKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJsb2NrX2xheWVyJTIwJTNEJTIwQkxPQ0tfTUFQUElORyU1QmNvbmZpZy5ibG9ja190eXBlJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5tb2RlbCUyMCUzRCUyMFJlc05ldCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBibG9ja19sYXllciUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbmZpZy5sYXllcnMlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fY2xhc3NlcyUzRGNvbmZpZy5udW1fY2xhc3NlcyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGluX2NoYW5zJTNEY29uZmlnLmlucHV0X2NoYW5uZWxzJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FyZGluYWxpdHklM0Rjb25maWcuY2FyZGluYWxpdHklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiYXNlX3dpZHRoJTNEY29uZmlnLmJhc2Vfd2lkdGglMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGVtX3dpZHRoJTNEY29uZmlnLnN0ZW1fd2lkdGglMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGVtX3R5cGUlM0Rjb25maWcuc3RlbV90eXBlJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXZnX2Rvd24lM0Rjb25maWcuYXZnX2Rvd24lMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwZm9yd2FyZChzZWxmJTJDJTIwdGVuc29yKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMHNlbGYubW9kZWwuZm9yd2FyZF9mZWF0dXJlcyh0ZW5zb3Ip",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> PreTrainedModel | |
| <span class="hljs-keyword">from</span> timm.models.resnet <span class="hljs-keyword">import</span> BasicBlock, Bottleneck, ResNet | |
| <span class="hljs-keyword">from</span> .configuration_resnet <span class="hljs-keyword">import</span> ResnetConfig | |
| BLOCK_MAPPING = {<span class="hljs-string">"basic"</span>: BasicBlock, <span class="hljs-string">"bottleneck"</span>: Bottleneck} | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">ResnetModel</span>(<span class="hljs-title class_ inherited__">PreTrainedModel</span>): | |
| config_class = ResnetConfig | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, config</span>): | |
| <span class="hljs-built_in">super</span>().__init__(config) | |
| block_layer = BLOCK_MAPPING[config.block_type] | |
| self.model = ResNet( | |
| block_layer, | |
| config.layers, | |
| num_classes=config.num_classes, | |
| in_chans=config.input_channels, | |
| cardinality=config.cardinality, | |
| base_width=config.base_width, | |
| stem_width=config.stem_width, | |
| stem_type=config.stem_type, | |
| avg_down=config.avg_down, | |
| ) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, tensor</span>): | |
| <span class="hljs-keyword">return</span> self.model.forward_features(tensor)`,wrap:!1}}),H=new f({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEElMEFjbGFzcyUyMFJlc25ldE1vZGVsRm9ySW1hZ2VDbGFzc2lmaWNhdGlvbihQcmVUcmFpbmVkTW9kZWwpJTNBJTBBJTIwJTIwJTIwJTIwY29uZmlnX2NsYXNzJTIwJTNEJTIwUmVzbmV0Q29uZmlnJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwX19pbml0X18oc2VsZiUyQyUyMGNvbmZpZyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdXBlcigpLl9faW5pdF9fKGNvbmZpZyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBibG9ja19sYXllciUyMCUzRCUyMEJMT0NLX01BUFBJTkclNUJjb25maWcuYmxvY2tfdHlwZSU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYubW9kZWwlMjAlM0QlMjBSZXNOZXQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmxvY2tfbGF5ZXIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb25maWcubGF5ZXJzJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX2NsYXNzZXMlM0Rjb25maWcubnVtX2NsYXNzZXMlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbl9jaGFucyUzRGNvbmZpZy5pbnB1dF9jaGFubmVscyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNhcmRpbmFsaXR5JTNEY29uZmlnLmNhcmRpbmFsaXR5JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmFzZV93aWR0aCUzRGNvbmZpZy5iYXNlX3dpZHRoJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RlbV93aWR0aCUzRGNvbmZpZy5zdGVtX3dpZHRoJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RlbV90eXBlJTNEY29uZmlnLnN0ZW1fdHlwZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGF2Z19kb3duJTNEY29uZmlnLmF2Z19kb3duJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMGZvcndhcmQoc2VsZiUyQyUyMHRlbnNvciUyQyUyMGxhYmVscyUzRE5vbmUpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9naXRzJTIwJTNEJTIwc2VsZi5tb2RlbCh0ZW5zb3IpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsYWJlbHMlMjBpcyUyMG5vdCUyME5vbmUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwdG9yY2gubm4uZnVuY3Rpb25hbC5jcm9zc19lbnRyb3B5KGxvZ2l0cyUyQyUyMGxhYmVscyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMjJsb3NzJTIyJTNBJTIwbG9zcyUyQyUyMCUyMmxvZ2l0cyUyMiUzQSUyMGxvZ2l0cyU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMCU3QiUyMmxvZ2l0cyUyMiUzQSUyMGxvZ2l0cyU3RA==",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">ResnetModelForImageClassification</span>(<span class="hljs-title class_ inherited__">PreTrainedModel</span>): | |
| config_class = ResnetConfig | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, config</span>): | |
| <span class="hljs-built_in">super</span>().__init__(config) | |
| block_layer = BLOCK_MAPPING[config.block_type] | |
| self.model = ResNet( | |
| block_layer, | |
| config.layers, | |
| num_classes=config.num_classes, | |
| in_chans=config.input_channels, | |
| cardinality=config.cardinality, | |
| base_width=config.base_width, | |
| stem_width=config.stem_width, | |
| stem_type=config.stem_type, | |
| avg_down=config.avg_down, | |
| ) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, tensor, labels=<span class="hljs-literal">None</span></span>): | |
| logits = self.model(tensor) | |
| <span class="hljs-keyword">if</span> labels <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>: | |
| loss = torch.nn.functional.cross_entropy(logits, labels) | |
| <span class="hljs-keyword">return</span> {<span class="hljs-string">"loss"</span>: loss, <span class="hljs-string">"logits"</span>: logits} | |
| <span class="hljs-keyword">return</span> {<span class="hljs-string">"logits"</span>: logits}`,wrap:!1}}),U=new Ss({props:{$$slots:{default:[Fl]},$$scope:{ctx:w}}}),P=new f({props:{code:"cmVzbmV0NTBkJTIwJTNEJTIwUmVzbmV0TW9kZWxGb3JJbWFnZUNsYXNzaWZpY2F0aW9uKHJlc25ldDUwZF9jb25maWcp",highlighted:"resnet50d = ResnetModelForImageClassification(resnet50d_config)",wrap:!1}}),O=new f({props:{code:"aW1wb3J0JTIwdGltbSUwQSUwQXByZXRyYWluZWRfbW9kZWwlMjAlM0QlMjB0aW1tLmNyZWF0ZV9tb2RlbCglMjJyZXNuZXQ1MGQlMjIlMkMlMjBwcmV0cmFpbmVkJTNEVHJ1ZSklMEFyZXNuZXQ1MGQubW9kZWwubG9hZF9zdGF0ZV9kaWN0KHByZXRyYWluZWRfbW9kZWwuc3RhdGVfZGljdCgpKQ==",highlighted:`<span class="hljs-keyword">import</span> timm | |
| pretrained_model = timm.create_model(<span class="hljs-string">"resnet50d"</span>, pretrained=<span class="hljs-literal">True</span>) | |
| resnet50d.model.load_state_dict(pretrained_model.state_dict())`,wrap:!1}}),se=new Ne({props:{title:"Enviando o código para o Hub",local:"enviando-o-código-para-o-hub",headingTag:"h2"}}),b=new Ss({props:{warning:!0,$$slots:{default:[Sl]},$$scope:{ctx:w}}}),te=new f({props:{code:"LiUwQSVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCUyMHJlc25ldF9tb2RlbCUwQSUyMCUyMCUyMCUyMCVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMF9faW5pdF9fLnB5JTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwY29uZmlndXJhdGlvbl9yZXNuZXQucHklMEElMjAlMjAlMjAlMjAlRTIlOTQlOTQlRTIlOTQlODAlRTIlOTQlODAlMjBtb2RlbGluZ19yZXNuZXQucHk=",highlighted:`. | |
| └── resnet_model | |
| ├── __init__.<span class="hljs-keyword">py</span> | |
| ├── configuration_resnet.<span class="hljs-keyword">py</span> | |
| └── modeling_resnet.<span class="hljs-keyword">py</span>`,wrap:!1}}),C=new Ss({props:{warning:!0,$$slots:{default:[Ll]},$$scope:{ctx:w}}}),ie=new f({props:{code:"ZnJvbSUyMHJlc25ldF9tb2RlbC5jb25maWd1cmF0aW9uX3Jlc25ldCUyMGltcG9ydCUyMFJlc25ldENvbmZpZyUwQWZyb20lMjByZXNuZXRfbW9kZWwubW9kZWxpbmdfcmVzbmV0JTIwaW1wb3J0JTIwUmVzbmV0TW9kZWwlMkMlMjBSZXNuZXRNb2RlbEZvckltYWdlQ2xhc3NpZmljYXRpb24=",highlighted:`<span class="hljs-keyword">from</span> resnet_model.configuration_resnet <span class="hljs-keyword">import</span> ResnetConfig | |
| <span class="hljs-keyword">from</span> resnet_model.modeling_resnet <span class="hljs-keyword">import</span> ResnetModel, ResnetModelForImageClassification`,wrap:!1}}),re=new f({props:{code:"UmVzbmV0Q29uZmlnLnJlZ2lzdGVyX2Zvcl9hdXRvX2NsYXNzKCklMEFSZXNuZXRNb2RlbC5yZWdpc3Rlcl9mb3JfYXV0b19jbGFzcyglMjJBdXRvTW9kZWwlMjIpJTBBUmVzbmV0TW9kZWxGb3JJbWFnZUNsYXNzaWZpY2F0aW9uLnJlZ2lzdGVyX2Zvcl9hdXRvX2NsYXNzKCUyMkF1dG9Nb2RlbEZvckltYWdlQ2xhc3NpZmljYXRpb24lMjIp",highlighted:`ResnetConfig.register_for_auto_class() | |
| ResnetModel.register_for_auto_class(<span class="hljs-string">"AutoModel"</span>) | |
| ResnetModelForImageClassification.register_for_auto_class(<span class="hljs-string">"AutoModelForImageClassification"</span>)`,wrap:!1}}),ce=new f({props:{code:"cmVzbmV0NTBkX2NvbmZpZyUyMCUzRCUyMFJlc25ldENvbmZpZyhibG9ja190eXBlJTNEJTIyYm90dGxlbmVjayUyMiUyQyUyMHN0ZW1fd2lkdGglM0QzMiUyQyUyMHN0ZW1fdHlwZSUzRCUyMmRlZXAlMjIlMkMlMjBhdmdfZG93biUzRFRydWUpJTBBcmVzbmV0NTBkJTIwJTNEJTIwUmVzbmV0TW9kZWxGb3JJbWFnZUNsYXNzaWZpY2F0aW9uKHJlc25ldDUwZF9jb25maWcpJTBBJTBBcHJldHJhaW5lZF9tb2RlbCUyMCUzRCUyMHRpbW0uY3JlYXRlX21vZGVsKCUyMnJlc25ldDUwZCUyMiUyQyUyMHByZXRyYWluZWQlM0RUcnVlKSUwQXJlc25ldDUwZC5tb2RlbC5sb2FkX3N0YXRlX2RpY3QocHJldHJhaW5lZF9tb2RlbC5zdGF0ZV9kaWN0KCkp",highlighted:`resnet50d_config = ResnetConfig(block_type=<span class="hljs-string">"bottleneck"</span>, stem_width=<span class="hljs-number">32</span>, stem_type=<span class="hljs-string">"deep"</span>, avg_down=<span class="hljs-literal">True</span>) | |
| resnet50d = ResnetModelForImageClassification(resnet50d_config) | |
| pretrained_model = timm.create_model(<span class="hljs-string">"resnet50d"</span>, pretrained=<span class="hljs-literal">True</span>) | |
| resnet50d.model.load_state_dict(pretrained_model.state_dict())`,wrap:!1}}),ue=new f({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}}),Je=new f({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login | |
| notebook_login()`,wrap:!1}}),je=new f({props:{code:"cmVzbmV0NTBkLnB1c2hfdG9faHViKCUyMmN1c3RvbS1yZXNuZXQ1MGQlMjIp",highlighted:'resnet50d.push_to_hub(<span class="hljs-string">"custom-resnet50d"</span>)',wrap:!1}}),Ue=new Ne({props:{title:"Usando um modelo com código customizado",local:"usando-um-modelo-com-código-customizado",headingTag:"h2"}}),Ce=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvckltYWdlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvckltYWdlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMnNndWdnZXIlMkZjdXN0b20tcmVzbmV0NTBkJTIyJTJDJTIwdHJ1c3RfcmVtb3RlX2NvZGUlM0RUcnVlKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForImageClassification | |
| model = AutoModelForImageClassification.from_pretrained(<span class="hljs-string">"sgugger/custom-resnet50d"</span>, trust_remote_code=<span class="hljs-literal">True</span>)`,wrap:!1}}),Ie=new f({props:{code:"Y29tbWl0X2hhc2glMjAlM0QlMjAlMjJlZDk0YTdjNjI0N2Q4YWVkY2U0NjQ3ZjAwZjIwZGU2ODc1YjViMjkyJTIyJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JJbWFnZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJzZ3VnZ2VyJTJGY3VzdG9tLXJlc25ldDUwZCUyMiUyQyUyMHRydXN0X3JlbW90ZV9jb2RlJTNEVHJ1ZSUyQyUyMHJldmlzaW9uJTNEY29tbWl0X2hhc2glMEEp",highlighted:`commit_hash = <span class="hljs-string">"ed94a7c6247d8aedce4647f00f20de6875b5b292"</span> | |
| model = AutoModelForImageClassification.from_pretrained( | |
| <span class="hljs-string">"sgugger/custom-resnet50d"</span>, trust_remote_code=<span class="hljs-literal">True</span>, revision=commit_hash | |
| )`,wrap:!1}}),Ze=new Ne({props:{title:"Registrando um modelo com código customizado para as classes automáticas",local:"registrando-um-modelo-com-código-customizado-para-as-classes-automáticas",headingTag:"h2"}}),Ae=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Db25maWclMkMlMjBBdXRvTW9kZWwlMkMlMjBBdXRvTW9kZWxGb3JJbWFnZUNsYXNzaWZpY2F0aW9uJTBBJTBBQXV0b0NvbmZpZy5yZWdpc3RlciglMjJyZXNuZXQlMjIlMkMlMjBSZXNuZXRDb25maWcpJTBBQXV0b01vZGVsLnJlZ2lzdGVyKFJlc25ldENvbmZpZyUyQyUyMFJlc25ldE1vZGVsKSUwQUF1dG9Nb2RlbEZvckltYWdlQ2xhc3NpZmljYXRpb24ucmVnaXN0ZXIoUmVzbmV0Q29uZmlnJTJDJTIwUmVzbmV0TW9kZWxGb3JJbWFnZUNsYXNzaWZpY2F0aW9uKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoConfig, AutoModel, AutoModelForImageClassification | |
| AutoConfig.register(<span class="hljs-string">"resnet"</span>, ResnetConfig) | |
| AutoModel.register(ResnetConfig, ResnetModel) | |
| AutoModelForImageClassification.register(ResnetConfig, ResnetModelForImageClassification)`,wrap:!1}}),ke=new Hl({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/pt/custom_models.md"}}),{c(){r=n("meta"),j=a(),J=n("p"),T=a(),d(g.$$.fragment),Be=a(),I=n("p"),I.textContent=Ps,We=a(),v=n("p"),v.textContent=Ds,Xe=a(),Z=n("p"),Z.innerHTML=Ks,ze=a(),d(_.$$.fragment),qe=a(),h=n("p"),h.innerHTML=Os,xe=a(),A=n("p"),A.textContent=el,Ve=a(),d($.$$.fragment),Ge=a(),k=n("p"),k.textContent=sl,Ee=a(),N=n("ul"),N.innerHTML=ll,Ye=a(),R=n("p"),R.innerHTML=tl,Qe=a(),B=n("p"),B.innerHTML=al,He=a(),W=n("p"),W.textContent=ol,Fe=a(),d(X.$$.fragment),Se=a(),z=n("p"),z.innerHTML=nl,Le=a(),d(q.$$.fragment),Pe=a(),x=n("p"),x.innerHTML=il,De=a(),d(V.$$.fragment),Ke=a(),G=n("p"),G.innerHTML=ml,Oe=a(),E=n("p"),E.innerHTML=rl,es=a(),d(Y.$$.fragment),ss=a(),Q=n("p"),Q.textContent=dl,ls=a(),d(H.$$.fragment),ts=a(),F=n("p"),F.innerHTML=pl,as=a(),d(U.$$.fragment),os=a(),S=n("p"),S.innerHTML=cl,ns=a(),L=n("p"),L.textContent=Ml,is=a(),d(P.$$.fragment),ms=a(),D=n("p"),D.innerHTML=ul,rs=a(),K=n("p"),K.textContent=yl,ds=a(),d(O.$$.fragment),ps=a(),ee=n("p"),ee.innerHTML=Jl,cs=a(),d(se.$$.fragment),Ms=a(),d(b.$$.fragment),us=a(),le=n("p"),le.innerHTML=fl,ys=a(),d(te.$$.fragment),Js=a(),ae=n("p"),ae.innerHTML=jl,fs=a(),d(C.$$.fragment),js=a(),oe=n("p"),oe.textContent=Tl,Ts=a(),ne=n("p"),ne.textContent=wl,ws=a(),d(ie.$$.fragment),Us=a(),me=n("p"),me.innerHTML=Ul,bs=a(),d(re.$$.fragment),Cs=a(),de=n("p"),de.innerHTML=bl,gs=a(),pe=n("p"),pe.textContent=Cl,Is=a(),d(ce.$$.fragment),vs=a(),Me=n("p"),Me.textContent=gl,Zs=a(),d(ue.$$.fragment),_s=a(),ye=n("p"),ye.textContent=Il,hs=a(),d(Je.$$.fragment),As=a(),fe=n("p"),fe.textContent=vl,$s=a(),d(je.$$.fragment),ks=a(),Te=n("p"),Te.innerHTML=Zl,Ns=a(),we=n("p"),we.innerHTML=_l,Rs=a(),d(Ue.$$.fragment),Bs=a(),be=n("p"),be.innerHTML=hl,Ws=a(),d(Ce.$$.fragment),Xs=a(),ge=n("p"),ge.innerHTML=Al,zs=a(),d(Ie.$$.fragment),qs=a(),ve=n("p"),ve.textContent=$l,xs=a(),d(Ze.$$.fragment),Vs=a(),_e=n("p"),_e.textContent=kl,Gs=a(),he=n("p"),he.innerHTML=Nl,Es=a(),d(Ae.$$.fragment),Ys=a(),$e=n("p"),$e.innerHTML=Rl,Qs=a(),d(ke.$$.fragment),Hs=a(),Re=n("p"),this.h()},l(e){const s=Yl("svelte-u9bgzb",document.head);r=i(s,"META",{name:!0,content:!0}),s.forEach(l),j=o(e),J=i(e,"P",{}),zl(J).forEach(l),T=o(e),p(g.$$.fragment,e),Be=o(e),I=i(e,"P",{"data-svelte-h":!0}),m(I)!=="svelte-odiyj7"&&(I.textContent=Ps),We=o(e),v=i(e,"P",{"data-svelte-h":!0}),m(v)!=="svelte-1o4wy9k"&&(v.textContent=Ds),Xe=o(e),Z=i(e,"P",{"data-svelte-h":!0}),m(Z)!=="svelte-tgk9jt"&&(Z.innerHTML=Ks),ze=o(e),p(_.$$.fragment,e),qe=o(e),h=i(e,"P",{"data-svelte-h":!0}),m(h)!=="svelte-n7s4gj"&&(h.innerHTML=Os),xe=o(e),A=i(e,"P",{"data-svelte-h":!0}),m(A)!=="svelte-1u9z9q5"&&(A.textContent=el),Ve=o(e),p($.$$.fragment,e),Ge=o(e),k=i(e,"P",{"data-svelte-h":!0}),m(k)!=="svelte-195qvkc"&&(k.textContent=sl),Ee=o(e),N=i(e,"UL",{"data-svelte-h":!0}),m(N)!=="svelte-150dyji"&&(N.innerHTML=ll),Ye=o(e),R=i(e,"P",{"data-svelte-h":!0}),m(R)!=="svelte-n05z3r"&&(R.innerHTML=tl),Qe=o(e),B=i(e,"P",{"data-svelte-h":!0}),m(B)!=="svelte-n89pvb"&&(B.innerHTML=al),He=o(e),W=i(e,"P",{"data-svelte-h":!0}),m(W)!=="svelte-1kfbx3q"&&(W.textContent=ol),Fe=o(e),p(X.$$.fragment,e),Se=o(e),z=i(e,"P",{"data-svelte-h":!0}),m(z)!=="svelte-1fiw1ms"&&(z.innerHTML=nl),Le=o(e),p(q.$$.fragment,e),Pe=o(e),x=i(e,"P",{"data-svelte-h":!0}),m(x)!=="svelte-1xlg64w"&&(x.innerHTML=il),De=o(e),p(V.$$.fragment,e),Ke=o(e),G=i(e,"P",{"data-svelte-h":!0}),m(G)!=="svelte-1y2nbkn"&&(G.innerHTML=ml),Oe=o(e),E=i(e,"P",{"data-svelte-h":!0}),m(E)!=="svelte-cr4a22"&&(E.innerHTML=rl),es=o(e),p(Y.$$.fragment,e),ss=o(e),Q=i(e,"P",{"data-svelte-h":!0}),m(Q)!=="svelte-10i1rll"&&(Q.textContent=dl),ls=o(e),p(H.$$.fragment,e),ts=o(e),F=i(e,"P",{"data-svelte-h":!0}),m(F)!=="svelte-1harvsn"&&(F.innerHTML=pl),as=o(e),p(U.$$.fragment,e),os=o(e),S=i(e,"P",{"data-svelte-h":!0}),m(S)!=="svelte-z9klot"&&(S.innerHTML=cl),ns=o(e),L=i(e,"P",{"data-svelte-h":!0}),m(L)!=="svelte-9hgxrt"&&(L.textContent=Ml),is=o(e),p(P.$$.fragment,e),ms=o(e),D=i(e,"P",{"data-svelte-h":!0}),m(D)!=="svelte-1jg8tw5"&&(D.innerHTML=ul),rs=o(e),K=i(e,"P",{"data-svelte-h":!0}),m(K)!=="svelte-hmddx9"&&(K.textContent=yl),ds=o(e),p(O.$$.fragment,e),ps=o(e),ee=i(e,"P",{"data-svelte-h":!0}),m(ee)!=="svelte-1665ct6"&&(ee.innerHTML=Jl),cs=o(e),p(se.$$.fragment,e),Ms=o(e),p(b.$$.fragment,e),us=o(e),le=i(e,"P",{"data-svelte-h":!0}),m(le)!=="svelte-el90vp"&&(le.innerHTML=fl),ys=o(e),p(te.$$.fragment,e),Js=o(e),ae=i(e,"P",{"data-svelte-h":!0}),m(ae)!=="svelte-zqclvb"&&(ae.innerHTML=jl),fs=o(e),p(C.$$.fragment,e),js=o(e),oe=i(e,"P",{"data-svelte-h":!0}),m(oe)!=="svelte-m6y568"&&(oe.textContent=Tl),Ts=o(e),ne=i(e,"P",{"data-svelte-h":!0}),m(ne)!=="svelte-qtwbi0"&&(ne.textContent=wl),ws=o(e),p(ie.$$.fragment,e),Us=o(e),me=i(e,"P",{"data-svelte-h":!0}),m(me)!=="svelte-ox5gse"&&(me.innerHTML=Ul),bs=o(e),p(re.$$.fragment,e),Cs=o(e),de=i(e,"P",{"data-svelte-h":!0}),m(de)!=="svelte-ymh6m7"&&(de.innerHTML=bl),gs=o(e),pe=i(e,"P",{"data-svelte-h":!0}),m(pe)!=="svelte-1383i6p"&&(pe.textContent=Cl),Is=o(e),p(ce.$$.fragment,e),vs=o(e),Me=i(e,"P",{"data-svelte-h":!0}),m(Me)!=="svelte-j2swg9"&&(Me.textContent=gl),Zs=o(e),p(ue.$$.fragment,e),_s=o(e),ye=i(e,"P",{"data-svelte-h":!0}),m(ye)!=="svelte-19mmy5v"&&(ye.textContent=Il),hs=o(e),p(Je.$$.fragment,e),As=o(e),fe=i(e,"P",{"data-svelte-h":!0}),m(fe)!=="svelte-i7vys3"&&(fe.textContent=vl),$s=o(e),p(je.$$.fragment,e),ks=o(e),Te=i(e,"P",{"data-svelte-h":!0}),m(Te)!=="svelte-o997h4"&&(Te.innerHTML=Zl),Ns=o(e),we=i(e,"P",{"data-svelte-h":!0}),m(we)!=="svelte-1z72sv"&&(we.innerHTML=_l),Rs=o(e),p(Ue.$$.fragment,e),Bs=o(e),be=i(e,"P",{"data-svelte-h":!0}),m(be)!=="svelte-qgau1t"&&(be.innerHTML=hl),Ws=o(e),p(Ce.$$.fragment,e),Xs=o(e),ge=i(e,"P",{"data-svelte-h":!0}),m(ge)!=="svelte-wb5hdk"&&(ge.innerHTML=Al),zs=o(e),p(Ie.$$.fragment,e),qs=o(e),ve=i(e,"P",{"data-svelte-h":!0}),m(ve)!=="svelte-a3oim0"&&(ve.textContent=$l),xs=o(e),p(Ze.$$.fragment,e),Vs=o(e),_e=i(e,"P",{"data-svelte-h":!0}),m(_e)!=="svelte-1w5mftt"&&(_e.textContent=kl),Gs=o(e),he=i(e,"P",{"data-svelte-h":!0}),m(he)!=="svelte-43b6sj"&&(he.innerHTML=Nl),Es=o(e),p(Ae.$$.fragment,e),Ys=o(e),$e=i(e,"P",{"data-svelte-h":!0}),m($e)!=="svelte-quvwuu"&&($e.innerHTML=Rl),Qs=o(e),p(ke.$$.fragment,e),Hs=o(e),Re=i(e,"P",{}),zl(Re).forEach(l),this.h()},h(){ql(r,"name","hf:doc:metadata"),ql(r,"content",Dl)},m(e,s){Ql(document.head,r),t(e,j,s),t(e,J,s),t(e,T,s),c(g,e,s),t(e,Be,s),t(e,I,s),t(e,We,s),t(e,v,s),t(e,Xe,s),t(e,Z,s),t(e,ze,s),c(_,e,s),t(e,qe,s),t(e,h,s),t(e,xe,s),t(e,A,s),t(e,Ve,s),c($,e,s),t(e,Ge,s),t(e,k,s),t(e,Ee,s),t(e,N,s),t(e,Ye,s),t(e,R,s),t(e,Qe,s),t(e,B,s),t(e,He,s),t(e,W,s),t(e,Fe,s),c(X,e,s),t(e,Se,s),t(e,z,s),t(e,Le,s),c(q,e,s),t(e,Pe,s),t(e,x,s),t(e,De,s),c(V,e,s),t(e,Ke,s),t(e,G,s),t(e,Oe,s),t(e,E,s),t(e,es,s),c(Y,e,s),t(e,ss,s),t(e,Q,s),t(e,ls,s),c(H,e,s),t(e,ts,s),t(e,F,s),t(e,as,s),c(U,e,s),t(e,os,s),t(e,S,s),t(e,ns,s),t(e,L,s),t(e,is,s),c(P,e,s),t(e,ms,s),t(e,D,s),t(e,rs,s),t(e,K,s),t(e,ds,s),c(O,e,s),t(e,ps,s),t(e,ee,s),t(e,cs,s),c(se,e,s),t(e,Ms,s),c(b,e,s),t(e,us,s),t(e,le,s),t(e,ys,s),c(te,e,s),t(e,Js,s),t(e,ae,s),t(e,fs,s),c(C,e,s),t(e,js,s),t(e,oe,s),t(e,Ts,s),t(e,ne,s),t(e,ws,s),c(ie,e,s),t(e,Us,s),t(e,me,s),t(e,bs,s),c(re,e,s),t(e,Cs,s),t(e,de,s),t(e,gs,s),t(e,pe,s),t(e,Is,s),c(ce,e,s),t(e,vs,s),t(e,Me,s),t(e,Zs,s),c(ue,e,s),t(e,_s,s),t(e,ye,s),t(e,hs,s),c(Je,e,s),t(e,As,s),t(e,fe,s),t(e,$s,s),c(je,e,s),t(e,ks,s),t(e,Te,s),t(e,Ns,s),t(e,we,s),t(e,Rs,s),c(Ue,e,s),t(e,Bs,s),t(e,be,s),t(e,Ws,s),c(Ce,e,s),t(e,Xs,s),t(e,ge,s),t(e,zs,s),c(Ie,e,s),t(e,qs,s),t(e,ve,s),t(e,xs,s),c(Ze,e,s),t(e,Vs,s),t(e,_e,s),t(e,Gs,s),t(e,he,s),t(e,Es,s),c(Ae,e,s),t(e,Ys,s),t(e,$e,s),t(e,Qs,s),c(ke,e,s),t(e,Hs,s),t(e,Re,s),Fs=!0},p(e,[s]){const Bl={};s&2&&(Bl.$$scope={dirty:s,ctx:e}),U.$set(Bl);const Wl={};s&2&&(Wl.$$scope={dirty:s,ctx:e}),b.$set(Wl);const Xl={};s&2&&(Xl.$$scope={dirty:s,ctx:e}),C.$set(Xl)},i(e){Fs||(M(g.$$.fragment,e),M(_.$$.fragment,e),M($.$$.fragment,e),M(X.$$.fragment,e),M(q.$$.fragment,e),M(V.$$.fragment,e),M(Y.$$.fragment,e),M(H.$$.fragment,e),M(U.$$.fragment,e),M(P.$$.fragment,e),M(O.$$.fragment,e),M(se.$$.fragment,e),M(b.$$.fragment,e),M(te.$$.fragment,e),M(C.$$.fragment,e),M(ie.$$.fragment,e),M(re.$$.fragment,e),M(ce.$$.fragment,e),M(ue.$$.fragment,e),M(Je.$$.fragment,e),M(je.$$.fragment,e),M(Ue.$$.fragment,e),M(Ce.$$.fragment,e),M(Ie.$$.fragment,e),M(Ze.$$.fragment,e),M(Ae.$$.fragment,e),M(ke.$$.fragment,e),Fs=!0)},o(e){u(g.$$.fragment,e),u(_.$$.fragment,e),u($.$$.fragment,e),u(X.$$.fragment,e),u(q.$$.fragment,e),u(V.$$.fragment,e),u(Y.$$.fragment,e),u(H.$$.fragment,e),u(U.$$.fragment,e),u(P.$$.fragment,e),u(O.$$.fragment,e),u(se.$$.fragment,e),u(b.$$.fragment,e),u(te.$$.fragment,e),u(C.$$.fragment,e),u(ie.$$.fragment,e),u(re.$$.fragment,e),u(ce.$$.fragment,e),u(ue.$$.fragment,e),u(Je.$$.fragment,e),u(je.$$.fragment,e),u(Ue.$$.fragment,e),u(Ce.$$.fragment,e),u(Ie.$$.fragment,e),u(Ze.$$.fragment,e),u(Ae.$$.fragment,e),u(ke.$$.fragment,e),Fs=!1},d(e){e&&(l(j),l(J),l(T),l(Be),l(I),l(We),l(v),l(Xe),l(Z),l(ze),l(qe),l(h),l(xe),l(A),l(Ve),l(Ge),l(k),l(Ee),l(N),l(Ye),l(R),l(Qe),l(B),l(He),l(W),l(Fe),l(Se),l(z),l(Le),l(Pe),l(x),l(De),l(Ke),l(G),l(Oe),l(E),l(es),l(ss),l(Q),l(ls),l(ts),l(F),l(as),l(os),l(S),l(ns),l(L),l(is),l(ms),l(D),l(rs),l(K),l(ds),l(ps),l(ee),l(cs),l(Ms),l(us),l(le),l(ys),l(Js),l(ae),l(fs),l(js),l(oe),l(Ts),l(ne),l(ws),l(Us),l(me),l(bs),l(Cs),l(de),l(gs),l(pe),l(Is),l(vs),l(Me),l(Zs),l(_s),l(ye),l(hs),l(As),l(fe),l($s),l(ks),l(Te),l(Ns),l(we),l(Rs),l(Bs),l(be),l(Ws),l(Xs),l(ge),l(zs),l(qs),l(ve),l(xs),l(Vs),l(_e),l(Gs),l(he),l(Es),l(Ys),l($e),l(Qs),l(Hs),l(Re)),l(r),y(g,e),y(_,e),y($,e),y(X,e),y(q,e),y(V,e),y(Y,e),y(H,e),y(U,e),y(P,e),y(O,e),y(se,e),y(b,e),y(te,e),y(C,e),y(ie,e),y(re,e),y(ce,e),y(ue,e),y(Je,e),y(je,e),y(Ue,e),y(Ce,e),y(Ie,e),y(Ze,e),y(Ae,e),y(ke,e)}}}const Dl='{"title":"Compartilhando modelos customizados","local":"compartilhando-modelos-customizados","sections":[{"title":"Escrevendo uma configuração customizada","local":"escrevendo-uma-configuração-customizada","sections":[],"depth":2},{"title":"Escrevendo um modelo customizado","local":"escrevendo-um-modelo-customizado","sections":[],"depth":2},{"title":"Enviando o código para o Hub","local":"enviando-o-código-para-o-hub","sections":[],"depth":2},{"title":"Usando um modelo com código customizado","local":"usando-um-modelo-com-código-customizado","sections":[],"depth":2},{"title":"Registrando um modelo com código customizado para as classes automáticas","local":"registrando-um-modelo-com-código-customizado-para-as-classes-automáticas","sections":[],"depth":2}],"depth":1}';function Kl(w){return Vl(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class at extends Gl{constructor(r){super(),El(this,r,Kl,Pl,xl,{})}}export{at as component}; | |
Xet Storage Details
- Size:
- 43.9 kB
- Xet hash:
- 2fc70173595434892231f940694b798ff309b98dd22bac757390c34bb203af10
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.