import{S as El,i as Tl,s as Cl,e as o,k as m,w as b,t,M as Zl,c as r,d as a,m as c,a as i,x as M,h as n,b as u,G as s,g as p,y as v,q as J,o as $,B as U,v as Il}from"../../chunks/vendor-hf-doc-builder.js";import{T as Ds}from"../../chunks/Tip-hf-doc-builder.js";import{Y as kl}from"../../chunks/Youtube-hf-doc-builder.js";import{I as Na}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as Z}from"../../chunks/CodeBlock-hf-doc-builder.js";function Gl(V){let d,w,f,g,j;return{c(){d=o("p"),w=t("Consulta la "),f=o("a"),g=t("p\xE1gina de la tarea"),j=t(" de clasificaci\xF3n de im\xE1genes para obtener m\xE1s informaci\xF3n sobre sus modelos, datasets y m\xE9tricas asociadas."),this.h()},l(h){d=r(h,"P",{});var y=i(d);w=n(y,"Consulta la "),f=r(y,"A",{href:!0,rel:!0});var _=i(f);g=n(_,"p\xE1gina de la tarea"),_.forEach(a),j=n(y," de clasificaci\xF3n de im\xE1genes para obtener m\xE1s informaci\xF3n sobre sus modelos, datasets y m\xE9tricas asociadas."),y.forEach(a),this.h()},h(){u(f,"href","https://huggingface.co/tasks/audio-classification"),u(f,"rel","nofollow")},m(h,y){p(h,d,y),s(d,w),s(d,f),s(f,g),s(d,j)},d(h){h&&a(d)}}}function zl(V){let d,w,f,g,j,h,y,_;return{c(){d=o("p"),w=t("Si no est\xE1s familiarizado con el fine-tuning de un modelo con el "),f=o("code"),g=t("Trainer"),j=t(", echa un vistazo al tutorial b\xE1sico "),h=o("a"),y=t("aqu\xED"),_=t("!"),this.h()},l(W){d=r(W,"P",{});var T=i(d);w=n(T,"Si no est\xE1s familiarizado con el fine-tuning de un modelo con el "),f=r(T,"CODE",{});var I=i(f);g=n(I,"Trainer"),I.forEach(a),j=n(T,", echa un vistazo al tutorial b\xE1sico "),h=r(T,"A",{href:!0});var L=i(h);y=n(L,"aqu\xED"),L.forEach(a),_=n(T,"!"),T.forEach(a),this.h()},h(){u(h,"href","../training#finetune-with-trainer")},m(W,T){p(W,d,T),s(d,w),s(d,f),s(f,g),s(d,j),s(d,h),s(h,y),s(d,_)},d(W){W&&a(d)}}}function Wl(V){let d,w,f,g,j;return{c(){d=o("p"),w=t("Para ver un ejemplo m\xE1s a profundidad de c\xF3mo hacer fine-tune a un modelo para clasificaci\xF3n de im\xE1genes, echa un vistazo al correspondiente "),f=o("a"),g=t("PyTorch notebook"),j=t("."),this.h()},l(h){d=r(h,"P",{});var y=i(d);w=n(y,"Para ver un ejemplo m\xE1s a profundidad de c\xF3mo hacer fine-tune a un modelo para clasificaci\xF3n de im\xE1genes, echa un vistazo al correspondiente "),f=r(y,"A",{href:!0,rel:!0});var _=i(f);g=n(_,"PyTorch notebook"),_.forEach(a),j=n(y,"."),y.forEach(a),this.h()},h(){u(f,"href","https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb"),u(f,"rel","nofollow")},m(h,y){p(h,d,y),s(d,w),s(d,f),s(f,g),s(d,j)},d(h){h&&a(d)}}}function Rl(V){let d,w,f,g,j,h,y,_,W,T,I,L,ve,Ba,Oe,k,qa,O,Ya,Da,K,Xa,xa,Ke,A,ea,R,N,Ze,ee,Sa,Ie,Pa,aa,Je,Ha,sa,ae,la,$e,La,ta,se,na,Ue,Oa,oa,le,ra,G,Ka,ke,es,as,Ge,ss,ls,ia,te,pa,je,ts,ma,ne,ca,B,ns,ze,os,rs,da,Q,q,We,oe,is,Re,ps,fa,we,ms,ua,re,ha,Y,cs,ie,Qe,ds,fs,ya,pe,ga,D,us,Fe,hs,ys,ba,me,Ma,X,gs,ce,Ve,bs,Ms,va,de,Ja,x,vs,Ae,Js,$s,$a,fe,Ua,F,S,Ne,ue,Us,Be,js,ja,he,wa,P,_a,_e,ws,Ea,z,E,_s,qe,Es,Ts,Ye,Cs,Zs,De,Is,ks,Xe,Gs,zs,xe,Ws,Rs,Qs,ye,Fs,Se,Vs,As,Ns,ge,Bs,Pe,qs,Ys,Ta,be,Ca,H,Za;return h=new Na({}),I=new kl({props:{id:"tjAIM7BOYhw"}}),A=new Ds({props:{$$slots:{default:[Gl]},$$scope:{ctx:V}}}),ee=new Na({}),ae=new Z({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBZm9vZCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJmb29kMTAxJTIyJTJDJTIwc3BsaXQlM0QlMjJ0cmFpbiU1QiUzQTUwMDAlNUQlMjIp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

<span class="hljs-meta">&gt;&gt;&gt; </span>food = load_dataset(<span class="hljs-string">&quot;food101&quot;</span>, split=<span class="hljs-string">&quot;train[:5000]&quot;</span>)`}}),se=new Z({props:{code:"Zm9vZCUyMCUzRCUyMGZvb2QudHJhaW5fdGVzdF9zcGxpdCh0ZXN0X3NpemUlM0QwLjIp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>food = food.train_test_split(test_size=<span class="hljs-number">0.2</span>)'}}),le=new Z({props:{code:"Zm9vZCU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RA==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>food[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>]
{<span class="hljs-string">&#x27;image&#x27;</span>: &lt;PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x512 at <span class="hljs-number">0x7F52AFC8AC50</span>&gt;,
 <span class="hljs-string">&#x27;label&#x27;</span>: <span class="hljs-number">79</span>}`}}),te=new Z({props:{code:"bGFiZWxzJTIwJTNEJTIwZm9vZCU1QiUyMnRyYWluJTIyJTVELmZlYXR1cmVzJTVCJTIybGFiZWwlMjIlNUQubmFtZXMlMEFsYWJlbDJpZCUyQyUyMGlkMmxhYmVsJTIwJTNEJTIwZGljdCgpJTJDJTIwZGljdCgpJTBBZm9yJTIwaSUyQyUyMGxhYmVsJTIwaW4lMjBlbnVtZXJhdGUobGFiZWxzKSUzQSUwQSUyMCUyMCUyMCUyMGxhYmVsMmlkJTVCbGFiZWwlNUQlMjAlM0QlMjBzdHIoaSklMEElMjAlMjAlMjAlMjBpZDJsYWJlbCU1QnN0cihpKSU1RCUyMCUzRCUyMGxhYmVs",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>labels = food[<span class="hljs-string">&quot;train&quot;</span>].features[<span class="hljs-string">&quot;label&quot;</span>].names
<span class="hljs-meta">&gt;&gt;&gt; </span>label2id, id2label = <span class="hljs-built_in">dict</span>(), <span class="hljs-built_in">dict</span>()
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">for</span> i, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(labels):
<span class="hljs-meta">... </span>    label2id[label] = <span class="hljs-built_in">str</span>(i)
<span class="hljs-meta">... </span>    id2label[<span class="hljs-built_in">str</span>(i)] = label`}}),ne=new Z({props:{code:"aWQybGFiZWwlNUJzdHIoNzkpJTVE",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>id2label[<span class="hljs-built_in">str</span>(<span class="hljs-number">79</span>)]
<span class="hljs-string">&#x27;prime_rib&#x27;</span>`}}),oe=new Na({}),re=new Z({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9JbWFnZVByb2Nlc3NvciUwQSUwQWltYWdlX3Byb2Nlc3NvciUyMCUzRCUyMEF1dG9JbWFnZVByb2Nlc3Nvci5mcm9tX3ByZXRyYWluZWQoJTIyZ29vZ2xlJTJGdml0LWJhc2UtcGF0Y2gxNi0yMjQtaW4yMWslMjIp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoImageProcessor

<span class="hljs-meta">&gt;&gt;&gt; </span>image_processor = AutoImageProcessor.from_pretrained(<span class="hljs-string">&quot;google/vit-base-patch16-224-in21k&quot;</span>)`}}),pe=new Z({props:{code:"ZnJvbSUyMHRvcmNodmlzaW9uLnRyYW5zZm9ybXMlMjBpbXBvcnQlMjBSYW5kb21SZXNpemVkQ3JvcCUyQyUyMENvbXBvc2UlMkMlMjBOb3JtYWxpemUlMkMlMjBUb1RlbnNvciUwQSUwQW5vcm1hbGl6ZSUyMCUzRCUyME5vcm1hbGl6ZShtZWFuJTNEaW1hZ2VfcHJvY2Vzc29yLmltYWdlX21lYW4lMkMlMjBzdGQlM0RpbWFnZV9wcm9jZXNzb3IuaW1hZ2Vfc3RkKSUwQV90cmFuc2Zvcm1zJTIwJTNEJTIwQ29tcG9zZSglNUJSYW5kb21SZXNpemVkQ3JvcChpbWFnZV9wcm9jZXNzb3Iuc2l6ZSU1QiUyMmhlaWdodCUyMiU1RCklMkMlMjBUb1RlbnNvcigpJTJDJTIwbm9ybWFsaXplJTVEKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> torchvision.transforms <span class="hljs-keyword">import</span> RandomResizedCrop, Compose, Normalize, ToTensor

<span class="hljs-meta">&gt;&gt;&gt; </span>normalize = Normalize(mean=image_processor.image_mean, std=image_processor.image_std)
<span class="hljs-meta">&gt;&gt;&gt; </span>_transforms = Compose([RandomResizedCrop(image_processor.size[<span class="hljs-string">&quot;height&quot;</span>]), ToTensor(), normalize])`}}),me=new Z({props:{code:"ZGVmJTIwdHJhbnNmb3JtcyhleGFtcGxlcyklM0ElMEElMjAlMjAlMjAlMjBleGFtcGxlcyU1QiUyMnBpeGVsX3ZhbHVlcyUyMiU1RCUyMCUzRCUyMCU1Ql90cmFuc2Zvcm1zKGltZy5jb252ZXJ0KCUyMlJHQiUyMikpJTIwZm9yJTIwaW1nJTIwaW4lMjBleGFtcGxlcyU1QiUyMmltYWdlJTIyJTVEJTVEJTBBJTIwJTIwJTIwJTIwZGVsJTIwZXhhbXBsZXMlNUIlMjJpbWFnZSUyMiU1RCUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGV4YW1wbGVz",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">def</span> <span class="hljs-title function_">transforms</span>(<span class="hljs-params">examples</span>):
<span class="hljs-meta">... </span>    examples[<span class="hljs-string">&quot;pixel_values&quot;</span>] = [_transforms(img.convert(<span class="hljs-string">&quot;RGB&quot;</span>)) <span class="hljs-keyword">for</span> img <span class="hljs-keyword">in</span> examples[<span class="hljs-string">&quot;image&quot;</span>]]
<span class="hljs-meta">... </span>    <span class="hljs-keyword">del</span> examples[<span class="hljs-string">&quot;image&quot;</span>]
<span class="hljs-meta">... </span>    <span class="hljs-keyword">return</span> examples`}}),de=new Z({props:{code:"Zm9vZCUyMCUzRCUyMGZvb2Qud2l0aF90cmFuc2Zvcm0odHJhbnNmb3Jtcyk=",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>food = food.with_transform(transforms)'}}),fe=new Z({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERlZmF1bHREYXRhQ29sbGF0b3IlMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGVmYXVsdERhdGFDb2xsYXRvcigp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DefaultDataCollator

<span class="hljs-meta">&gt;&gt;&gt; </span>data_collator = DefaultDataCollator()`}}),ue=new Na({}),he=new Z({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvckltYWdlQ2xhc3NpZmljYXRpb24lMkMlMjBUcmFpbmluZ0FyZ3VtZW50cyUyQyUyMFRyYWluZXIlMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvckltYWdlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMmdvb2dsZSUyRnZpdC1iYXNlLXBhdGNoMTYtMjI0LWluMjFrJTIyJTJDJTBBJTIwJTIwJTIwJTIwbnVtX2xhYmVscyUzRGxlbihsYWJlbHMpJTJDJTBBJTIwJTIwJTIwJTIwaWQybGFiZWwlM0RpZDJsYWJlbCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsMmlkJTNEbGFiZWwyaWQlMkMlMEEp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForImageClassification, TrainingArguments, Trainer

<span class="hljs-meta">&gt;&gt;&gt; </span>model = AutoModelForImageClassification.from_pretrained(
<span class="hljs-meta">... </span>    <span class="hljs-string">&quot;google/vit-base-patch16-224-in21k&quot;</span>,
<span class="hljs-meta">... </span>    num_labels=<span class="hljs-built_in">len</span>(labels),
<span class="hljs-meta">... </span>    id2label=id2label,
<span class="hljs-meta">... </span>    label2id=label2id,
<span class="hljs-meta">... </span>)`}}),P=new Ds({props:{$$slots:{default:[zl]},$$scope:{ctx:V}}}),be=new Z({props:{code:"dHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUwQSUyMCUyMCUyMCUyMG91dHB1dF9kaXIlM0QlMjIuJTJGcmVzdWx0cyUyMiUyQyUwQSUyMCUyMCUyMCUyMHBlcl9kZXZpY2VfdHJhaW5fYmF0Y2hfc2l6ZSUzRDE2JTJDJTBBJTIwJTIwJTIwJTIwZXZhbHVhdGlvbl9zdHJhdGVneSUzRCUyMnN0ZXBzJTIyJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluX2Vwb2NocyUzRDQlMkMlMEElMjAlMjAlMjAlMjBmcDE2JTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMHNhdmVfc3RlcHMlM0QxMDAlMkMlMEElMjAlMjAlMjAlMjBldmFsX3N0ZXBzJTNEMTAwJTJDJTBBJTIwJTIwJTIwJTIwbG9nZ2luZ19zdGVwcyUzRDEwJTJDJTBBJTIwJTIwJTIwJTIwbGVhcm5pbmdfcmF0ZSUzRDJlLTQlMkMlMEElMjAlMjAlMjAlMjBzYXZlX3RvdGFsX2xpbWl0JTNEMiUyQyUwQSUyMCUyMCUyMCUyMHJlbW92ZV91bnVzZWRfY29sdW1ucyUzREZhbHNlJTJDJTBBKSUwQSUwQXRyYWluZXIlMjAlM0QlMjBUcmFpbmVyKCUwQSUyMCUyMCUyMCUyMG1vZGVsJTNEbW9kZWwlMkMlMEElMjAlMjAlMjAlMjBhcmdzJTNEdHJhaW5pbmdfYXJncyUyQyUwQSUyMCUyMCUyMCUyMGRhdGFfY29sbGF0b3IlM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwdHJhaW5fZGF0YXNldCUzRGZvb2QlNUIlMjJ0cmFpbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfZGF0YXNldCUzRGZvb2QlNUIlMjJ0ZXN0JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVyJTNEaW1hZ2VfcHJvY2Vzc29yJTJDJTBBKSUwQSUwQXRyYWluZXIudHJhaW4oKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>training_args = TrainingArguments(
<span class="hljs-meta">... </span>    output_dir=<span class="hljs-string">&quot;./results&quot;</span>,
<span class="hljs-meta">... </span>    per_device_train_batch_size=<span class="hljs-number">16</span>,
<span class="hljs-meta">... </span>    evaluation_strategy=<span class="hljs-string">&quot;steps&quot;</span>,
<span class="hljs-meta">... </span>    num_train_epochs=<span class="hljs-number">4</span>,
<span class="hljs-meta">... </span>    fp16=<span class="hljs-literal">True</span>,
<span class="hljs-meta">... </span>    save_steps=<span class="hljs-number">100</span>,
<span class="hljs-meta">... </span>    eval_steps=<span class="hljs-number">100</span>,
<span class="hljs-meta">... </span>    logging_steps=<span class="hljs-number">10</span>,
<span class="hljs-meta">... </span>    learning_rate=<span class="hljs-number">2e-4</span>,
<span class="hljs-meta">... </span>    save_total_limit=<span class="hljs-number">2</span>,
<span class="hljs-meta">... </span>    remove_unused_columns=<span class="hljs-literal">False</span>,
<span class="hljs-meta">... </span>)

<span class="hljs-meta">&gt;&gt;&gt; </span>trainer = Trainer(
<span class="hljs-meta">... </span>    model=model,
<span class="hljs-meta">... </span>    args=training_args,
<span class="hljs-meta">... </span>    data_collator=data_collator,
<span class="hljs-meta">... </span>    train_dataset=food[<span class="hljs-string">&quot;train&quot;</span>],
<span class="hljs-meta">... </span>    eval_dataset=food[<span class="hljs-string">&quot;test&quot;</span>],
<span class="hljs-meta">... </span>    tokenizer=image_processor,
<span class="hljs-meta">... </span>)

<span class="hljs-meta">&gt;&gt;&gt; </span>trainer.train()`}}),H=new Ds({props:{$$slots:{default:[Wl]},$$scope:{ctx:V}}}),{c(){d=o("meta"),w=m(),f=o("h1"),g=o("a"),j=o("span"),b(h.$$.fragment),y=m(),_=o("span"),W=t("Clasificaci\xF3n de im\xE1genes"),T=m(),b(I.$$.fragment),L=m(),ve=o("p"),Ba=t("La clasificaci\xF3n de im\xE1genes asigna una etiqueta o clase a una imagen. A diferencia de la clasificaci\xF3n de texto o audio, las entradas son los valores de los p\xEDxeles que representan una imagen. La clasificaci\xF3n de im\xE1genes tiene muchos usos, como la detecci\xF3n de da\xF1os tras una cat\xE1strofe, el control de la salud de los cultivos o la b\xFAsqueda de signos de enfermedad en im\xE1genes m\xE9dicas."),Oe=m(),k=o("p"),qa=t("Esta gu\xEDa te mostrar\xE1 como hacer fine-tune al "),O=o("a"),Ya=t("ViT"),Da=t(" en el dataset "),K=o("a"),Xa=t("Food-101"),xa=t(" para clasificar un alimento en una imagen."),Ke=m(),b(A.$$.fragment),ea=m(),R=o("h2"),N=o("a"),Ze=o("span"),b(ee.$$.fragment),Sa=m(),Ie=o("span"),Pa=t("Carga el dataset Food-101"),aa=m(),Je=o("p"),Ha=t("Carga solo las primeras 5000 im\xE1genes del dataset Food-101 de la biblioteca \u{1F917} de Datasets ya que es bastante grande:"),sa=m(),b(ae.$$.fragment),la=m(),$e=o("p"),La=t("Divide el dataset en un train y un test set:"),ta=m(),b(se.$$.fragment),na=m(),Ue=o("p"),Oa=t("A continuaci\xF3n, observa un ejemplo:"),oa=m(),b(le.$$.fragment),ra=m(),G=o("p"),Ka=t("El campo "),ke=o("code"),es=t("image"),as=t(" contiene una imagen PIL, y cada "),Ge=o("code"),ss=t("label"),ls=t(" es un n\xFAmero entero que representa una clase. Crea un diccionario que asigne un nombre de label a un entero y viceversa. El mapeo ayudar\xE1 al modelo a recuperar el nombre de label a partir del n\xFAmero de la misma:"),ia=m(),b(te.$$.fragment),pa=m(),je=o("p"),ts=t("Ahora puedes convertir el n\xFAmero de label en un nombre de label para obtener m\xE1s informaci\xF3n:"),ma=m(),b(ne.$$.fragment),ca=m(),B=o("p"),ns=t("Cada clase de alimento - o label - corresponde a un n\xFAmero; "),ze=o("code"),os=t("79"),rs=t(" indica una costilla de primera en el ejemplo anterior."),da=m(),Q=o("h2"),q=o("a"),We=o("span"),b(oe.$$.fragment),is=m(),Re=o("span"),ps=t("Preprocesa"),fa=m(),we=o("p"),ms=t("Carga el image processor de ViT para procesar la imagen en un tensor:"),ua=m(),b(re.$$.fragment),ha=m(),Y=o("p"),cs=t("Aplica varias transformaciones de imagen al dataset para hacer el modelo m\xE1s robusto contra el overfitting. En este caso se utilizar\xE1 el m\xF3dulo "),ie=o("a"),Qe=o("code"),ds=t("transforms"),fs=t(" de torchvision. Recorta una parte aleatoria de la imagen, cambia su tama\xF1o y normal\xEDzala con la media y la desviaci\xF3n est\xE1ndar de la imagen:"),ya=m(),b(pe.$$.fragment),ga=m(),D=o("p"),us=t("Crea una funci\xF3n de preprocesamiento que aplique las transformaciones y devuelva los "),Fe=o("code"),hs=t("pixel_values"),ys=t(" - los inputs al modelo - de la imagen:"),ba=m(),b(me.$$.fragment),Ma=m(),X=o("p"),gs=t("Utiliza el m\xE9todo "),ce=o("a"),Ve=o("code"),bs=t("with_transform"),Ms=t(" de \u{1F917} Dataset para aplicar las transformaciones sobre todo el dataset. Las transformaciones se aplican sobre la marcha cuando se carga un elemento del dataset:"),va=m(),b(de.$$.fragment),Ja=m(),x=o("p"),vs=t("Utiliza "),Ae=o("code"),Js=t("DefaultDataCollator"),$s=t(" para crear un batch de ejemplos. A diferencia de otros data collators en \u{1F917} Transformers, el DefaultDataCollator no aplica un preprocesamiento adicional como el padding."),$a=m(),b(fe.$$.fragment),Ua=m(),F=o("h2"),S=o("a"),Ne=o("span"),b(ue.$$.fragment),Us=m(),Be=o("span"),js=t("Entrena"),ja=t(`

Carga ViT con \`AutoModelForImageClassification\`. Especifica el n\xFAmero de labels, y pasa al modelo el mapping entre el n\xFAmero de label y la clase de label:

	`),b(he.$$.fragment),wa=m(),b(P.$$.fragment),_a=m(),_e=o("p"),ws=t("Al llegar a este punto, solo quedan tres pasos:"),Ea=m(),z=o("ol"),E=o("li"),_s=t("Define tus hiperpar\xE1metros de entrenamiento en "),qe=o("code"),Es=t("TrainingArguments"),Ts=t(". Es importante que no elimines las columnas que no se utilicen, ya que esto har\xE1 que desaparezca la columna "),Ye=o("code"),Cs=t("image"),Zs=t(". Sin la columna "),De=o("code"),Is=t("image"),ks=t(" no puedes crear "),Xe=o("code"),Gs=t("pixel_values"),zs=t(". Establece "),xe=o("code"),Ws=t("remove_unused_columns=False"),Rs=t(" para evitar este comportamiento."),Qs=m(),ye=o("li"),Fs=t("Pasa los training arguments al "),Se=o("code"),Vs=t("Trainer"),As=t(" junto con el modelo, los datasets, tokenizer y data collator."),Ns=m(),ge=o("li"),Bs=t("Llama "),Pe=o("code"),qs=t("train()"),Ys=t(" para hacer fine-tune de tu modelo."),Ta=m(),b(be.$$.fragment),Ca=m(),b(H.$$.fragment),this.h()},l(e){const l=Zl('[data-svelte="svelte-1phssyn"]',document.head);d=r(l,"META",{name:!0,content:!0}),l.forEach(a),w=c(e),f=r(e,"H1",{class:!0});var Me=i(f);g=r(Me,"A",{id:!0,class:!0,href:!0});var He=i(g);j=r(He,"SPAN",{});var Le=i(j);M(h.$$.fragment,Le),Le.forEach(a),He.forEach(a),y=c(Me),_=r(Me,"SPAN",{});var Xs=i(_);W=n(Xs,"Clasificaci\xF3n de im\xE1genes"),Xs.forEach(a),Me.forEach(a),T=c(e),M(I.$$.fragment,e),L=c(e),ve=r(e,"P",{});var xs=i(ve);Ba=n(xs,"La clasificaci\xF3n de im\xE1genes asigna una etiqueta o clase a una imagen. A diferencia de la clasificaci\xF3n de texto o audio, las entradas son los valores de los p\xEDxeles que representan una imagen. La clasificaci\xF3n de im\xE1genes tiene muchos usos, como la detecci\xF3n de da\xF1os tras una cat\xE1strofe, el control de la salud de los cultivos o la b\xFAsqueda de signos de enfermedad en im\xE1genes m\xE9dicas."),xs.forEach(a),Oe=c(e),k=r(e,"P",{});var Ee=i(k);qa=n(Ee,"Esta gu\xEDa te mostrar\xE1 como hacer fine-tune al "),O=r(Ee,"A",{href:!0,rel:!0});var Ss=i(O);Ya=n(Ss,"ViT"),Ss.forEach(a),Da=n(Ee," en el dataset "),K=r(Ee,"A",{href:!0,rel:!0});var Ps=i(K);Xa=n(Ps,"Food-101"),Ps.forEach(a),xa=n(Ee," para clasificar un alimento en una imagen."),Ee.forEach(a),Ke=c(e),M(A.$$.fragment,e),ea=c(e),R=r(e,"H2",{class:!0});var Ia=i(R);N=r(Ia,"A",{id:!0,class:!0,href:!0});var Hs=i(N);Ze=r(Hs,"SPAN",{});var Ls=i(Ze);M(ee.$$.fragment,Ls),Ls.forEach(a),Hs.forEach(a),Sa=c(Ia),Ie=r(Ia,"SPAN",{});var Os=i(Ie);Pa=n(Os,"Carga el dataset Food-101"),Os.forEach(a),Ia.forEach(a),aa=c(e),Je=r(e,"P",{});var Ks=i(Je);Ha=n(Ks,"Carga solo las primeras 5000 im\xE1genes del dataset Food-101 de la biblioteca \u{1F917} de Datasets ya que es bastante grande:"),Ks.forEach(a),sa=c(e),M(ae.$$.fragment,e),la=c(e),$e=r(e,"P",{});var el=i($e);La=n(el,"Divide el dataset en un train y un test set:"),el.forEach(a),ta=c(e),M(se.$$.fragment,e),na=c(e),Ue=r(e,"P",{});var al=i(Ue);Oa=n(al,"A continuaci\xF3n, observa un ejemplo:"),al.forEach(a),oa=c(e),M(le.$$.fragment,e),ra=c(e),G=r(e,"P",{});var Te=i(G);Ka=n(Te,"El campo "),ke=r(Te,"CODE",{});var sl=i(ke);es=n(sl,"image"),sl.forEach(a),as=n(Te," contiene una imagen PIL, y cada "),Ge=r(Te,"CODE",{});var ll=i(Ge);ss=n(ll,"label"),ll.forEach(a),ls=n(Te," es un n\xFAmero entero que representa una clase. Crea un diccionario que asigne un nombre de label a un entero y viceversa. El mapeo ayudar\xE1 al modelo a recuperar el nombre de label a partir del n\xFAmero de la misma:"),Te.forEach(a),ia=c(e),M(te.$$.fragment,e),pa=c(e),je=r(e,"P",{});var tl=i(je);ts=n(tl,"Ahora puedes convertir el n\xFAmero de label en un nombre de label para obtener m\xE1s informaci\xF3n:"),tl.forEach(a),ma=c(e),M(ne.$$.fragment,e),ca=c(e),B=r(e,"P",{});var ka=i(B);ns=n(ka,"Cada clase de alimento - o label - corresponde a un n\xFAmero; "),ze=r(ka,"CODE",{});var nl=i(ze);os=n(nl,"79"),nl.forEach(a),rs=n(ka," indica una costilla de primera en el ejemplo anterior."),ka.forEach(a),da=c(e),Q=r(e,"H2",{class:!0});var Ga=i(Q);q=r(Ga,"A",{id:!0,class:!0,href:!0});var ol=i(q);We=r(ol,"SPAN",{});var rl=i(We);M(oe.$$.fragment,rl),rl.forEach(a),ol.forEach(a),is=c(Ga),Re=r(Ga,"SPAN",{});var il=i(Re);ps=n(il,"Preprocesa"),il.forEach(a),Ga.forEach(a),fa=c(e),we=r(e,"P",{});var pl=i(we);ms=n(pl,"Carga el image processor de ViT para procesar la imagen en un tensor:"),pl.forEach(a),ua=c(e),M(re.$$.fragment,e),ha=c(e),Y=r(e,"P",{});var za=i(Y);cs=n(za,"Aplica varias transformaciones de imagen al dataset para hacer el modelo m\xE1s robusto contra el overfitting. En este caso se utilizar\xE1 el m\xF3dulo "),ie=r(za,"A",{href:!0,rel:!0});var ml=i(ie);Qe=r(ml,"CODE",{});var cl=i(Qe);ds=n(cl,"transforms"),cl.forEach(a),ml.forEach(a),fs=n(za," de torchvision. Recorta una parte aleatoria de la imagen, cambia su tama\xF1o y normal\xEDzala con la media y la desviaci\xF3n est\xE1ndar de la imagen:"),za.forEach(a),ya=c(e),M(pe.$$.fragment,e),ga=c(e),D=r(e,"P",{});var Wa=i(D);us=n(Wa,"Crea una funci\xF3n de preprocesamiento que aplique las transformaciones y devuelva los "),Fe=r(Wa,"CODE",{});var dl=i(Fe);hs=n(dl,"pixel_values"),dl.forEach(a),ys=n(Wa," - los inputs al modelo - de la imagen:"),Wa.forEach(a),ba=c(e),M(me.$$.fragment,e),Ma=c(e),X=r(e,"P",{});var Ra=i(X);gs=n(Ra,"Utiliza el m\xE9todo "),ce=r(Ra,"A",{href:!0,rel:!0});var fl=i(ce);Ve=r(fl,"CODE",{});var ul=i(Ve);bs=n(ul,"with_transform"),ul.forEach(a),fl.forEach(a),Ms=n(Ra," de \u{1F917} Dataset para aplicar las transformaciones sobre todo el dataset. Las transformaciones se aplican sobre la marcha cuando se carga un elemento del dataset:"),Ra.forEach(a),va=c(e),M(de.$$.fragment,e),Ja=c(e),x=r(e,"P",{});var Qa=i(x);vs=n(Qa,"Utiliza "),Ae=r(Qa,"CODE",{});var hl=i(Ae);Js=n(hl,"DefaultDataCollator"),hl.forEach(a),$s=n(Qa," para crear un batch de ejemplos. A diferencia de otros data collators en \u{1F917} Transformers, el DefaultDataCollator no aplica un preprocesamiento adicional como el padding."),Qa.forEach(a),$a=c(e),M(fe.$$.fragment,e),Ua=c(e),F=r(e,"H2",{class:!0});var Fa=i(F);S=r(Fa,"A",{id:!0,class:!0,href:!0});var yl=i(S);Ne=r(yl,"SPAN",{});var gl=i(Ne);M(ue.$$.fragment,gl),gl.forEach(a),yl.forEach(a),Us=c(Fa),Be=r(Fa,"SPAN",{});var bl=i(Be);js=n(bl,"Entrena"),bl.forEach(a),Fa.forEach(a),ja=n(e,`

Carga ViT con \`AutoModelForImageClassification\`. Especifica el n\xFAmero de labels, y pasa al modelo el mapping entre el n\xFAmero de label y la clase de label:

	`),M(he.$$.fragment,e),wa=c(e),M(P.$$.fragment,e),_a=c(e),_e=r(e,"P",{});var Ml=i(_e);ws=n(Ml,"Al llegar a este punto, solo quedan tres pasos:"),Ml.forEach(a),Ea=c(e),z=r(e,"OL",{});var Ce=i(z);E=r(Ce,"LI",{});var C=i(E);_s=n(C,"Define tus hiperpar\xE1metros de entrenamiento en "),qe=r(C,"CODE",{});var vl=i(qe);Es=n(vl,"TrainingArguments"),vl.forEach(a),Ts=n(C,". Es importante que no elimines las columnas que no se utilicen, ya que esto har\xE1 que desaparezca la columna "),Ye=r(C,"CODE",{});var Jl=i(Ye);Cs=n(Jl,"image"),Jl.forEach(a),Zs=n(C,". Sin la columna "),De=r(C,"CODE",{});var $l=i(De);Is=n($l,"image"),$l.forEach(a),ks=n(C," no puedes crear "),Xe=r(C,"CODE",{});var Ul=i(Xe);Gs=n(Ul,"pixel_values"),Ul.forEach(a),zs=n(C,". Establece "),xe=r(C,"CODE",{});var jl=i(xe);Ws=n(jl,"remove_unused_columns=False"),jl.forEach(a),Rs=n(C," para evitar este comportamiento."),C.forEach(a),Qs=c(Ce),ye=r(Ce,"LI",{});var Va=i(ye);Fs=n(Va,"Pasa los training arguments al "),Se=r(Va,"CODE",{});var wl=i(Se);Vs=n(wl,"Trainer"),wl.forEach(a),As=n(Va," junto con el modelo, los datasets, tokenizer y data collator."),Va.forEach(a),Ns=c(Ce),ge=r(Ce,"LI",{});var Aa=i(ge);Bs=n(Aa,"Llama "),Pe=r(Aa,"CODE",{});var _l=i(Pe);qs=n(_l,"train()"),_l.forEach(a),Ys=n(Aa," para hacer fine-tune de tu modelo."),Aa.forEach(a),Ce.forEach(a),Ta=c(e),M(be.$$.fragment,e),Ca=c(e),M(H.$$.fragment,e),this.h()},h(){u(d,"name","hf:doc:metadata"),u(d,"content",JSON.stringify(Ql)),u(g,"id","clasificacin-de-imgenes"),u(g,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),u(g,"href","#clasificacin-de-imgenes"),u(f,"class","relative group"),u(O,"href","https://huggingface.co/docs/transformers/v4.16.2/en/model_doc/vit"),u(O,"rel","nofollow"),u(K,"href","https://huggingface.co/datasets/food101"),u(K,"rel","nofollow"),u(N,"id","carga-el-dataset-food101"),u(N,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),u(N,"href","#carga-el-dataset-food101"),u(R,"class","relative group"),u(q,"id","preprocesa"),u(q,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),u(q,"href","#preprocesa"),u(Q,"class","relative group"),u(ie,"href","https://pytorch.org/vision/stable/transforms.html"),u(ie,"rel","nofollow"),u(ce,"href","https://huggingface.co/docs/datasets/package_reference/main_classes.html?#datasets.Dataset.with_transform"),u(ce,"rel","nofollow"),u(S,"id","entrena"),u(S,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),u(S,"href","#entrena"),u(F,"class","relative group")},m(e,l){s(document.head,d),p(e,w,l),p(e,f,l),s(f,g),s(g,j),v(h,j,null),s(f,y),s(f,_),s(_,W),p(e,T,l),v(I,e,l),p(e,L,l),p(e,ve,l),s(ve,Ba),p(e,Oe,l),p(e,k,l),s(k,qa),s(k,O),s(O,Ya),s(k,Da),s(k,K),s(K,Xa),s(k,xa),p(e,Ke,l),v(A,e,l),p(e,ea,l),p(e,R,l),s(R,N),s(N,Ze),v(ee,Ze,null),s(R,Sa),s(R,Ie),s(Ie,Pa),p(e,aa,l),p(e,Je,l),s(Je,Ha),p(e,sa,l),v(ae,e,l),p(e,la,l),p(e,$e,l),s($e,La),p(e,ta,l),v(se,e,l),p(e,na,l),p(e,Ue,l),s(Ue,Oa),p(e,oa,l),v(le,e,l),p(e,ra,l),p(e,G,l),s(G,Ka),s(G,ke),s(ke,es),s(G,as),s(G,Ge),s(Ge,ss),s(G,ls),p(e,ia,l),v(te,e,l),p(e,pa,l),p(e,je,l),s(je,ts),p(e,ma,l),v(ne,e,l),p(e,ca,l),p(e,B,l),s(B,ns),s(B,ze),s(ze,os),s(B,rs),p(e,da,l),p(e,Q,l),s(Q,q),s(q,We),v(oe,We,null),s(Q,is),s(Q,Re),s(Re,ps),p(e,fa,l),p(e,we,l),s(we,ms),p(e,ua,l),v(re,e,l),p(e,ha,l),p(e,Y,l),s(Y,cs),s(Y,ie),s(ie,Qe),s(Qe,ds),s(Y,fs),p(e,ya,l),v(pe,e,l),p(e,ga,l),p(e,D,l),s(D,us),s(D,Fe),s(Fe,hs),s(D,ys),p(e,ba,l),v(me,e,l),p(e,Ma,l),p(e,X,l),s(X,gs),s(X,ce),s(ce,Ve),s(Ve,bs),s(X,Ms),p(e,va,l),v(de,e,l),p(e,Ja,l),p(e,x,l),s(x,vs),s(x,Ae),s(Ae,Js),s(x,$s),p(e,$a,l),v(fe,e,l),p(e,Ua,l),p(e,F,l),s(F,S),s(S,Ne),v(ue,Ne,null),s(F,Us),s(F,Be),s(Be,js),p(e,ja,l),v(he,e,l),p(e,wa,l),v(P,e,l),p(e,_a,l),p(e,_e,l),s(_e,ws),p(e,Ea,l),p(e,z,l),s(z,E),s(E,_s),s(E,qe),s(qe,Es),s(E,Ts),s(E,Ye),s(Ye,Cs),s(E,Zs),s(E,De),s(De,Is),s(E,ks),s(E,Xe),s(Xe,Gs),s(E,zs),s(E,xe),s(xe,Ws),s(E,Rs),s(z,Qs),s(z,ye),s(ye,Fs),s(ye,Se),s(Se,Vs),s(ye,As),s(z,Ns),s(z,ge),s(ge,Bs),s(ge,Pe),s(Pe,qs),s(ge,Ys),p(e,Ta,l),v(be,e,l),p(e,Ca,l),v(H,e,l),Za=!0},p(e,[l]){const Me={};l&2&&(Me.$$scope={dirty:l,ctx:e}),A.$set(Me);const He={};l&2&&(He.$$scope={dirty:l,ctx:e}),P.$set(He);const Le={};l&2&&(Le.$$scope={dirty:l,ctx:e}),H.$set(Le)},i(e){Za||(J(h.$$.fragment,e),J(I.$$.fragment,e),J(A.$$.fragment,e),J(ee.$$.fragment,e),J(ae.$$.fragment,e),J(se.$$.fragment,e),J(le.$$.fragment,e),J(te.$$.fragment,e),J(ne.$$.fragment,e),J(oe.$$.fragment,e),J(re.$$.fragment,e),J(pe.$$.fragment,e),J(me.$$.fragment,e),J(de.$$.fragment,e),J(fe.$$.fragment,e),J(ue.$$.fragment,e),J(he.$$.fragment,e),J(P.$$.fragment,e),J(be.$$.fragment,e),J(H.$$.fragment,e),Za=!0)},o(e){$(h.$$.fragment,e),$(I.$$.fragment,e),$(A.$$.fragment,e),$(ee.$$.fragment,e),$(ae.$$.fragment,e),$(se.$$.fragment,e),$(le.$$.fragment,e),$(te.$$.fragment,e),$(ne.$$.fragment,e),$(oe.$$.fragment,e),$(re.$$.fragment,e),$(pe.$$.fragment,e),$(me.$$.fragment,e),$(de.$$.fragment,e),$(fe.$$.fragment,e),$(ue.$$.fragment,e),$(he.$$.fragment,e),$(P.$$.fragment,e),$(be.$$.fragment,e),$(H.$$.fragment,e),Za=!1},d(e){a(d),e&&a(w),e&&a(f),U(h),e&&a(T),U(I,e),e&&a(L),e&&a(ve),e&&a(Oe),e&&a(k),e&&a(Ke),U(A,e),e&&a(ea),e&&a(R),U(ee),e&&a(aa),e&&a(Je),e&&a(sa),U(ae,e),e&&a(la),e&&a($e),e&&a(ta),U(se,e),e&&a(na),e&&a(Ue),e&&a(oa),U(le,e),e&&a(ra),e&&a(G),e&&a(ia),U(te,e),e&&a(pa),e&&a(je),e&&a(ma),U(ne,e),e&&a(ca),e&&a(B),e&&a(da),e&&a(Q),U(oe),e&&a(fa),e&&a(we),e&&a(ua),U(re,e),e&&a(ha),e&&a(Y),e&&a(ya),U(pe,e),e&&a(ga),e&&a(D),e&&a(ba),U(me,e),e&&a(Ma),e&&a(X),e&&a(va),U(de,e),e&&a(Ja),e&&a(x),e&&a($a),U(fe,e),e&&a(Ua),e&&a(F),U(ue),e&&a(ja),U(he,e),e&&a(wa),U(P,e),e&&a(_a),e&&a(_e),e&&a(Ea),e&&a(z),e&&a(Ta),U(be,e),e&&a(Ca),U(H,e)}}}const Ql={local:"clasificacin-de-imgenes",sections:[{local:"carga-el-dataset-food101",title:"Carga el dataset Food-101"},{local:"preprocesa",title:"Preprocesa"},{local:"entrena",title:"Entrena"}],title:"Clasificaci\xF3n de im\xE1genes"};function Fl(V){return Il(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Yl extends El{constructor(d){super();Tl(this,d,Fl,Rl,Cl,{})}}export{Yl as default,Ql as metadata};
