Buckets:
| import{s as Hs,o as Ns,n as ns}from"../chunks/scheduler.36a0863c.js";import{S as As,i as qs,g as r,s as l,r as i,A as Ls,h as p,f as a,c as n,j as $,u as o,x as f,k as pt,y as j,a as s,v as m,d as c,t as d,w as u}from"../chunks/index.f891bdb2.js";import{T as ls}from"../chunks/Tip.a8272f7f.js";import{Y as Ka}from"../chunks/Youtube.0cbacd3d.js";import{C as g}from"../chunks/CodeBlock.3ec784ea.js";import{D as Qs}from"../chunks/DocNotebookDropdown.81c1f0fb.js";import{H as b,E as Ss}from"../chunks/EditOnGithub.a58e27a9.js";function Ps(v){let h,y=`Verás una advertencia acerca de que algunos de los pesos pre-entrenados no están siendo utilizados y que algunos pesos están siendo inicializados al azar. No te preocupes, esto es completamente normal. | |
| El head/cabezal pre-entrenado del modelo BERT se descarta y se sustituye por un head de clasificación inicializado aleatoriamente. Puedes aplicar fine-tuning a este nuevo head del modelo en tu tarea de clasificación de secuencias haciendo transfer learning del modelo pre-entrenado.`;return{c(){h=r("p"),h.textContent=y},l(M){h=p(M,"P",{"data-svelte-h":!0}),f(h)!=="svelte-gf8b5f"&&(h.textContent=y)},m(M,T){s(M,h,T)},p:ns,d(M){M&&a(h)}}}function Ds(v){let h,y="<code>Trainer</code> utiliza <code>DataCollatorWithPadding</code> por defecto por lo que no es necesario especificar explícitamente un intercalador de datos (data collator, en inglés).";return{c(){h=r("p"),h.innerHTML=y},l(M){h=p(M,"P",{"data-svelte-h":!0}),f(h)!=="svelte-zlpg6n"&&(h.innerHTML=y)},m(M,T){s(M,h,T)},p:ns,d(M){M&&a(h)}}}function Ks(v){let h,y='Consigue acceso gratuito a una GPU en la nube si es que no tienes este recurso de forma local con un notebook alojado en <a href="https://colab.research.google.com/" rel="nofollow">Colaboratory</a> o <a href="https://studiolab.sagemaker.aws/" rel="nofollow">SageMaker StudioLab</a>.';return{c(){h=r("p"),h.innerHTML=y},l(M){h=p(M,"P",{"data-svelte-h":!0}),f(h)!=="svelte-tbi2js"&&(h.innerHTML=y)},m(M,T){s(M,h,T)},p:ns,d(M){M&&a(h)}}}function Os(v){let h,y,M,T,C,Mt,U,bt,I,rs="El uso de un modelo pre-entrenado tiene importantes ventajas. Reduce los costos de computación, la huella de carbono y te permite utilizar modelos de última generación sin tener que entrenar uno desde cero.",yt,R,ps="<li>Fine-tuning a un modelo pre-entrenado con 🤗 Transformers <code>Trainer</code>.</li> <li>Fine-tuning a un modelo pre-entrenado en TensorFlow con Keras.</li> <li>Fine-tuning a un modelo pre-entrenado en PyTorch nativo.</li>",jt,it,$t,G,Tt,W,wt,X,is="Antes de aplicar fine-tuning a un modelo pre-entrenado, descarga un dataset y prepáralo para el entrenamiento. El tutorial anterior nos enseñó cómo procesar los datos para el entrenamiento, y ahora es la oportunidad de poner a prueba estas habilidades.",Jt,z,os='Comienza cargando el dataset de <a href="https://huggingface.co/datasets/yelp_review_full" rel="nofollow">Yelp Reviews</a>:',vt,F,kt,x,ms="Como ya sabes, necesitas un tokenizador para procesar el texto e incluir una estrategia para el padding y el truncamiento para manejar cualquier longitud de secuencia variable. Para procesar tu dataset en un solo paso, utiliza el método de 🤗 Datasets map para aplicar una función de preprocesamiento sobre todo el dataset:",Zt,E,_t,B,cs="Si lo deseas, puedes crear un subconjunto más pequeño del dataset completo para aplicarle fine-tuning y así reducir el tiempo.",Ct,Y,Ut,ot,It,V,Rt,H,Gt,N,ds="🤗 Transformers proporciona una clase <code>Trainer</code> optimizada para el entrenamiento de modelos de 🤗 Transformers, haciendo más fácil el inicio del entrenamiento sin necesidad de escribir manualmente tu propio ciclo. La API del <code>Trainer</code> soporta una amplia gama de opciones de entrenamiento y características como el logging, el gradient accumulation y el mixed precision.",Wt,A,us='Comienza cargando tu modelo y especifica el número de labels previstas. A partir del <a href="https://huggingface.co/datasets/yelp_review_full#data-fields" rel="nofollow">Card Dataset</a> de Yelp Review, que como ya sabemos tiene 5 labels:',Xt,q,zt,k,Ft,L,xt,Q,fs='A continuación, crea una clase <code>TrainingArguments</code> que contenga todos los hiperparámetros que puedes ajustar así como los indicadores para activar las diferentes opciones de entrenamiento. Para este tutorial puedes empezar con los <a href="https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments" rel="nofollow">hiperparámetros</a> de entrenamiento por defecto, pero siéntete libre de experimentar con ellos para encontrar tu configuración óptima.',Et,S,hs="Especifica dónde vas a guardar los checkpoints de tu entrenamiento:",Bt,P,Yt,D,Vt,K,gs='El <code>Trainer</code> no evalúa automáticamente el rendimiento del modelo durante el entrenamiento. Tendrás que pasarle a <code>Trainer</code> una función para calcular y hacer un reporte de las métricas. La biblioteca de 🤗 Datasets proporciona una función de <a href="https://huggingface.co/metrics/accuracy" rel="nofollow"><code>accuracy</code></a> simple que puedes cargar con la función <code>load_metric</code> (ver este <a href="https://huggingface.co/docs/datasets/metrics" rel="nofollow">tutorial</a> para más información):',Ht,O,Nt,ee,Ms="Define la función <code>compute</code> en <code>metric</code> para calcular el accuracy de tus predicciones. Antes de pasar tus predicciones a <code>compute</code>, necesitas convertir las predicciones a logits (recuerda que todos los modelos de 🤗 Transformers devuelven logits).",At,te,qt,ae,bs="Si quieres controlar tus métricas de evaluación durante el fine-tuning, especifica el parámetro <code>eval_strategy</code> en tus argumentos de entrenamiento para que el modelo tenga en cuenta la métrica de evaluación al final de cada época:",Lt,se,Qt,le,St,ne,ys="Crea un objeto <code>Trainer</code> con tu modelo, argumentos de entrenamiento, datasets de entrenamiento y de prueba, y tu función de evaluación:",Pt,re,Dt,pe,js="A continuación, aplica fine-tuning a tu modelo llamando <code>train()</code>:",Kt,ie,Ot,mt,ea,oe,ta,me,aa,ce,$s="Los modelos de 🤗 Transformers también permiten realizar el entrenamiento en TensorFlow con la API de Keras. Solo es necesario hacer algunos cambios antes de hacer fine-tuning.",sa,de,la,ue,Ts="El <code>DefaultDataCollator</code> junta los tensores en un batch para que el modelo se entrene en él. Asegúrate de especificar <code>return_tensors</code> para devolver los tensores de TensorFlow:",na,fe,ra,Z,pa,he,ws='A continuación, convierte los datasets tokenizados en datasets de TensorFlow con el método <a href="https://huggingface.co/docs/datasets/package_reference/main_classes#datasets.Dataset.to_tf_dataset" rel="nofollow"><code>to_tf_dataset</code></a>. Especifica tus entradas en <code>columns</code> y tu etiqueta en <code>label_cols</code>:',ia,ge,oa,Me,ma,be,Js="Carguemos un modelo TensorFlow con el número esperado de labels:",ca,ye,da,je,vs='A continuación, compila y aplica fine-tuning a tu modelo con <a href="https://keras.io/api/models/model_training_apis/" rel="nofollow"><code>fit</code></a> como lo harías con cualquier otro modelo de Keras:',ua,$e,fa,ct,ha,Te,ga,we,Ma,Je,ks="El <code>Trainer</code> se encarga del ciclo de entrenamiento y permite aplicar fine-tuning a un modelo en una sola línea de código. Para los que prefieran escribir su propio ciclo de entrenamiento, también pueden aplicar fine-tuning a un modelo de 🤗 Transformers en PyTorch nativo.",ba,ve,Zs="En este punto, es posible que necesites reiniciar tu notebook o ejecutar el siguiente código para liberar algo de memoria:",ya,ke,ja,Ze,_s="A continuación, haremos un post-procesamiento manual al <code>tokenized_dataset</code> y así prepararlo para el entrenamiento.",$a,w,_e,dt,Cs="Elimina la columna de <code>text</code> porque el modelo no acepta texto en crudo como entrada:",Oa,Ce,es,Ue,ut,Us="Cambia el nombre de la columna de <code>label</code> a <code>labels</code> porque el modelo espera que el argumento se llame <code>labels</code>:",ts,Ie,as,Re,ft,Is="Establece el formato del dataset para devolver tensores PyTorch en lugar de listas:",ss,Ge,Ta,We,Rs="A continuación, crea un subconjunto más pequeño del dataset como se ha mostrado anteriormente para acelerar el fine-tuning:",wa,Xe,Ja,ze,va,Fe,Gs="Crea un <code>DataLoader</code> para tus datasets de entrenamiento y de prueba para poder iterar sobre batches de datos:",ka,xe,Za,Ee,Ws="Carga tu modelo con el número de labels previstas:",_a,Be,Ca,Ye,Ua,Ve,Xs='Crea un optimizador y el learning rate para aplicar fine-tuning al modelo. Vamos a utilizar el optimizador <a href="https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html" rel="nofollow"><code>AdamW</code></a> de PyTorch:',Ia,He,Ra,Ne,zs="Crea el learning rate desde el <code>Trainer</code>:",Ga,Ae,Wa,qe,Fs="Por último, especifica el <code>device</code> o entorno de ejecución para utilizar una GPU si tienes acceso a una. De lo contrario, el entrenamiento en una CPU puede llevarte varias horas en lugar de un par de minutos.",Xa,Le,za,_,Fa,Qe,xs="Genial, ¡ahora podemos entrenar! 🥳",xa,Se,Ea,Pe,Es='Para hacer un seguimiento al progreso del entrenamiento, utiliza la biblioteca <a href="https://tqdm.github.io/" rel="nofollow">tqdm</a> para añadir una barra de progreso sobre el número de pasos de entrenamiento:',Ba,De,Ya,Ke,Va,Oe,Bs='De la misma manera que necesitas añadir una función de evaluación al <code>Trainer</code>, necesitas hacer lo mismo cuando escribas tu propio ciclo de entrenamiento. Pero en lugar de calcular y reportar la métrica al final de cada época, esta vez acumularás todos los batches con <a href="https://huggingface.co/docs/datasets/package_reference/main_classes?highlight=add_batch#datasets.Metric.add_batch" rel="nofollow"><code>add_batch</code></a> y calcularás la métrica al final.',Ha,et,Na,ht,Aa,tt,qa,at,Ys="Para más ejemplos de fine-tuning consulta:",La,st,Vs=`<li><p><a href="https://github.com/huggingface/transformers/tree/main/examples" rel="nofollow">🤗 Transformers Examples</a> incluye scripts | |
| para entrenar tareas comunes de NLP en PyTorch y TensorFlow.</p></li> <li><p><a href="notebooks">🤗 Transformers Notebooks</a> contiene varios notebooks sobre cómo aplicar fine-tuning a un modelo para tareas específicas en PyTorch y TensorFlow.</p></li>`,Qa,lt,Sa,gt,Pa;return C=new b({props:{title:"Fine-tuning a un modelo pre-entrenado",local:"fine-tuning-a-un-modelo-pre-entrenado",headingTag:"h1"}}),U=new Qs({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Mixed",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/transformers_doc/es/training.ipynb"},{label:"PyTorch",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/transformers_doc/es/pytorch/training.ipynb"},{label:"TensorFlow",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/transformers_doc/es/tensorflow/training.ipynb"},{label:"Mixed",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/transformers_doc/es/training.ipynb"},{label:"PyTorch",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/transformers_doc/es/pytorch/training.ipynb"},{label:"TensorFlow",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/transformers_doc/es/tensorflow/training.ipynb"}]}}),G=new b({props:{title:"Prepara un dataset",local:"prepara-un-dataset",headingTag:"h2"}}),W=new Ka({props:{id:"_BZearw7f0w"}}),F=new g({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBZGF0YXNldCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJ5ZWxwX3Jldmlld19mdWxsJTIyKSUwQWRhdGFzZXQlNUIxMDAlNUQ=",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| <span class="hljs-meta">>>> </span>dataset = load_dataset(<span class="hljs-string">"yelp_review_full"</span>) | |
| <span class="hljs-meta">>>> </span>dataset[<span class="hljs-number">100</span>] | |
| {<span class="hljs-string">'label'</span>: <span class="hljs-number">0</span>, | |
| <span class="hljs-string">'text'</span>: <span class="hljs-string">'My expectations for McDonalds are t rarely high. But for one to still fail so spectacularly...that takes something special!\\\\nThe cashier took my friends\\'s order, then promptly ignored me. I had to force myself in front of a cashier who opened his register to wait on the person BEHIND me. I waited over five minutes for a gigantic order that included precisely one kid\\'s meal. After watching two people who ordered after me be handed their food, I asked where mine was. The manager started yelling at the cashiers for \\\\"serving off their orders\\\\" when they didn\\'t have their food. But neither cashier was anywhere near those controls, and the manager was the one serving food to customers and clearing the boards.\\\\nThe manager was rude when giving me my order. She didn\\'t make sure that I had everything ON MY RECEIPT, and never even had the decency to apologize that I felt I was getting poor service.\\\\nI\\'ve eaten at various McDonalds restaurants for over 30 years. I\\'ve worked at more than one location. I expect bad days, bad moods, and the occasional mistake. But I have yet to have a decent experience at this store. It will remain a place I avoid unless someone in my party needs to avoid illness from low blood sugar. Perhaps I should go back to the racially biased service of Steak n Shake instead!'</span>}`,wrap:!1}}),E=new g({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJnb29nbGUtYmVydCUyRmJlcnQtYmFzZS1jYXNlZCUyMiklMEElMEElMEFkZWYlMjB0b2tlbml6ZV9mdW5jdGlvbihleGFtcGxlcyklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjB0b2tlbml6ZXIoZXhhbXBsZXMlNUIlMjJ0ZXh0JTIyJTVEJTJDJTIwcGFkZGluZyUzRCUyMm1heF9sZW5ndGglMjIlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSklMEElMEElMEF0b2tlbml6ZWRfZGF0YXNldHMlMjAlM0QlMjBkYXRhc2V0Lm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKQ==",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| <span class="hljs-meta">>>> </span>tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"google-bert/bert-base-cased"</span>) | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">examples</span>): | |
| <span class="hljs-meta">... </span> <span class="hljs-keyword">return</span> tokenizer(examples[<span class="hljs-string">"text"</span>], padding=<span class="hljs-string">"max_length"</span>, truncation=<span class="hljs-literal">True</span>) | |
| <span class="hljs-meta">>>> </span>tokenized_datasets = dataset.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>)`,wrap:!1}}),Y=new g({props:{code:"c21hbGxfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELnNodWZmbGUoc2VlZCUzRDQyKS5zZWxlY3QocmFuZ2UoMTAwMCkpJTBBc21hbGxfZXZhbF9kYXRhc2V0JTIwJTNEJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydGVzdCUyMiU1RC5zaHVmZmxlKHNlZWQlM0Q0Mikuc2VsZWN0KHJhbmdlKDEwMDApKQ==",highlighted:`<span class="hljs-meta">>>> </span>small_train_dataset = tokenized_datasets[<span class="hljs-string">"train"</span>].shuffle(seed=<span class="hljs-number">42</span>).select(<span class="hljs-built_in">range</span>(<span class="hljs-number">1000</span>)) | |
| <span class="hljs-meta">>>> </span>small_eval_dataset = tokenized_datasets[<span class="hljs-string">"test"</span>].shuffle(seed=<span class="hljs-number">42</span>).select(<span class="hljs-built_in">range</span>(<span class="hljs-number">1000</span>))`,wrap:!1}}),V=new b({props:{title:"Fine-tuning con Trainer",local:"fine-tuning-con-trainer",headingTag:"h2"}}),H=new Ka({props:{id:"nvBXf7s7vTI"}}),q=new g({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMmdvb2dsZS1iZXJ0JTJGYmVydC1iYXNlLWNhc2VkJTIyJTJDJTIwbnVtX2xhYmVscyUzRDUp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification | |
| <span class="hljs-meta">>>> </span>model = AutoModelForSequenceClassification.from_pretrained(<span class="hljs-string">"google-bert/bert-base-cased"</span>, num_labels=<span class="hljs-number">5</span>)`,wrap:!1}}),k=new ls({props:{$$slots:{default:[Ps]},$$scope:{ctx:v}}}),L=new b({props:{title:"Hiperparámetros de entrenamiento",local:"hiperparámetros-de-entrenamiento",headingTag:"h3"}}),P=new g({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBdHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKG91dHB1dF9kaXIlM0QlMjJ0ZXN0X3RyYWluZXIlMjIp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments | |
| <span class="hljs-meta">>>> </span>training_args = TrainingArguments(output_dir=<span class="hljs-string">"test_trainer"</span>)`,wrap:!1}}),D=new b({props:{title:"Métricas",local:"métricas",headingTag:"h3"}}),O=new g({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9tZXRyaWMlMEElMEFtZXRyaWMlMjAlM0QlMjBsb2FkX21ldHJpYyglMjJhY2N1cmFjeSUyMik=",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_metric | |
| <span class="hljs-meta">>>> </span>metric = load_metric(<span class="hljs-string">"accuracy"</span>)`,wrap:!1}}),te=new g({props:{code:"ZGVmJTIwY29tcHV0ZV9tZXRyaWNzKGV2YWxfcHJlZCklM0ElMEElMjAlMjAlMjAlMjBsb2dpdHMlMkMlMjBsYWJlbHMlMjAlM0QlMjBldmFsX3ByZWQlMEElMjAlMjAlMjAlMjBwcmVkaWN0aW9ucyUyMCUzRCUyMG5wLmFyZ21heChsb2dpdHMlMkMlMjBheGlzJTNELTEpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwbWV0cmljLmNvbXB1dGUocHJlZGljdGlvbnMlM0RwcmVkaWN0aW9ucyUyQyUyMHJlZmVyZW5jZXMlM0RsYWJlbHMp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">eval_pred</span>): | |
| <span class="hljs-meta">... </span> logits, labels = eval_pred | |
| <span class="hljs-meta">... </span> predictions = np.argmax(logits, axis=-<span class="hljs-number">1</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-keyword">return</span> metric.compute(predictions=predictions, references=labels)`,wrap:!1}}),se=new g({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBdHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKG91dHB1dF9kaXIlM0QlMjJ0ZXN0X3RyYWluZXIlMjIlMkMlMjBldmFsX3N0cmF0ZWd5JTNEJTIyZXBvY2glMjIp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments | |
| <span class="hljs-meta">>>> </span>training_args = TrainingArguments(output_dir=<span class="hljs-string">"test_trainer"</span>, eval_strategy=<span class="hljs-string">"epoch"</span>)`,wrap:!1}}),le=new b({props:{title:"Trainer",local:"trainer",headingTag:"h3"}}),re=new g({props:{code:"dHJhaW5lciUyMCUzRCUyMFRyYWluZXIoJTBBJTIwJTIwJTIwJTIwbW9kZWwlM0Rtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMGFyZ3MlM0R0cmFpbmluZ19hcmdzJTJDJTBBJTIwJTIwJTIwJTIwdHJhaW5fZGF0YXNldCUzRHNtYWxsX3RyYWluX2RhdGFzZXQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0RzbWFsbF9ldmFsX2RhdGFzZXQlMkMlMEElMjAlMjAlMjAlMjBjb21wdXRlX21ldHJpY3MlM0Rjb21wdXRlX21ldHJpY3MlMkMlMEEp",highlighted:`<span class="hljs-meta">>>> </span>trainer = Trainer( | |
| <span class="hljs-meta">... </span> model=model, | |
| <span class="hljs-meta">... </span> args=training_args, | |
| <span class="hljs-meta">... </span> train_dataset=small_train_dataset, | |
| <span class="hljs-meta">... </span> eval_dataset=small_eval_dataset, | |
| <span class="hljs-meta">... </span> compute_metrics=compute_metrics, | |
| <span class="hljs-meta">... </span>)`,wrap:!1}}),ie=new g({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:'<span class="hljs-meta">>>> </span>trainer.train()',wrap:!1}}),oe=new b({props:{title:"Fine-tuning con Keras",local:"fine-tuning-con-keras",headingTag:"h2"}}),me=new Ka({props:{id:"rnTGBy2ax1c"}}),de=new b({props:{title:"Convierte el dataset al formato de TensorFlow",local:"convierte-el-dataset-al-formato-de-tensorflow",headingTag:"h3"}}),fe=new g({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERlZmF1bHREYXRhQ29sbGF0b3IlMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGVmYXVsdERhdGFDb2xsYXRvcihyZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKQ==",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DefaultDataCollator | |
| <span class="hljs-meta">>>> </span>data_collator = DefaultDataCollator(return_tensors=<span class="hljs-string">"tf"</span>)`,wrap:!1}}),Z=new ls({props:{$$slots:{default:[Ds]},$$scope:{ctx:v}}}),ge=new g({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHNtYWxsX3RyYWluX2RhdGFzZXQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsX2NvbHMlM0QlMjJsYWJlbHMlMjIlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMEEpJTBBJTBBdGZfdmFsaWRhdGlvbl9kYXRhc2V0JTIwJTNEJTIwc21hbGxfZXZhbF9kYXRhc2V0LnRvX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwY29sdW1ucyUzRCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTJDJTIwJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIydG9rZW5fdHlwZV9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBsYWJlbF9jb2xzJTNEJTIybGFiZWxzJTIyJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzREZhbHNlJTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEOCUyQyUwQSk=",highlighted:`<span class="hljs-meta">>>> </span>tf_train_dataset = small_train_dataset.to_tf_dataset( | |
| <span class="hljs-meta">... </span> columns=[<span class="hljs-string">"attention_mask"</span>, <span class="hljs-string">"input_ids"</span>, <span class="hljs-string">"token_type_ids"</span>], | |
| <span class="hljs-meta">... </span> label_cols=<span class="hljs-string">"labels"</span>, | |
| <span class="hljs-meta">... </span> shuffle=<span class="hljs-literal">True</span>, | |
| <span class="hljs-meta">... </span> collate_fn=data_collator, | |
| <span class="hljs-meta">... </span> batch_size=<span class="hljs-number">8</span>, | |
| <span class="hljs-meta">... </span>) | |
| <span class="hljs-meta">>>> </span>tf_validation_dataset = small_eval_dataset.to_tf_dataset( | |
| <span class="hljs-meta">... </span> columns=[<span class="hljs-string">"attention_mask"</span>, <span class="hljs-string">"input_ids"</span>, <span class="hljs-string">"token_type_ids"</span>], | |
| <span class="hljs-meta">... </span> label_cols=<span class="hljs-string">"labels"</span>, | |
| <span class="hljs-meta">... </span> shuffle=<span class="hljs-literal">False</span>, | |
| <span class="hljs-meta">... </span> collate_fn=data_collator, | |
| <span class="hljs-meta">... </span> batch_size=<span class="hljs-number">8</span>, | |
| <span class="hljs-meta">... </span>)`,wrap:!1}}),Me=new b({props:{title:"Compila y ajusta",local:"compila-y-ajusta",headingTag:"h3"}}),ye=new g({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwVEZBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTBBJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMmdvb2dsZS1iZXJ0JTJGYmVydC1iYXNlLWNhc2VkJTIyJTJDJTIwbnVtX2xhYmVscyUzRDUp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForSequenceClassification | |
| <span class="hljs-meta">>>> </span>model = TFAutoModelForSequenceClassification.from_pretrained(<span class="hljs-string">"google-bert/bert-base-cased"</span>, num_labels=<span class="hljs-number">5</span>)`,wrap:!1}}),$e=new g({props:{code:"bW9kZWwuY29tcGlsZSglMEElMjAlMjAlMjAlMjBvcHRpbWl6ZXIlM0R0Zi5rZXJhcy5vcHRpbWl6ZXJzLkFkYW0obGVhcm5pbmdfcmF0ZSUzRDVlLTUpJTJDJTBBJTIwJTIwJTIwJTIwbG9zcyUzRHRmLmtlcmFzLmxvc3Nlcy5TcGFyc2VDYXRlZ29yaWNhbENyb3NzZW50cm9weShmcm9tX2xvZ2l0cyUzRFRydWUpJTJDJTBBJTIwJTIwJTIwJTIwbWV0cmljcyUzRHRmLm1ldHJpY3MuU3BhcnNlQ2F0ZWdvcmljYWxBY2N1cmFjeSgpJTJDJTBBKSUwQSUwQW1vZGVsLmZpdCh0Zl90cmFpbl9kYXRhc2V0JTJDJTIwdmFsaWRhdGlvbl9kYXRhJTNEdGZfdmFsaWRhdGlvbl9kYXRhc2V0JTJDJTIwZXBvY2hzJTNEMyk=",highlighted:`<span class="hljs-meta">>>> </span>model.<span class="hljs-built_in">compile</span>( | |
| <span class="hljs-meta">... </span> optimizer=tf.keras.optimizers.Adam(learning_rate=<span class="hljs-number">5e-5</span>), | |
| <span class="hljs-meta">... </span> loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=<span class="hljs-literal">True</span>), | |
| <span class="hljs-meta">... </span> metrics=tf.metrics.SparseCategoricalAccuracy(), | |
| <span class="hljs-meta">... </span>) | |
| <span class="hljs-meta">>>> </span>model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=<span class="hljs-number">3</span>)`,wrap:!1}}),Te=new b({props:{title:"Fine-tune en PyTorch nativo",local:"fine-tune-en-pytorch-nativo",headingTag:"h2"}}),we=new Ka({props:{id:"Dh9CL8fyG80"}}),ke=new g({props:{code:"ZGVsJTIwbW9kZWwlMEFkZWwlMjBweXRvcmNoX21vZGVsJTBBZGVsJTIwdHJhaW5lciUwQXRvcmNoLmN1ZGEuZW1wdHlfY2FjaGUoKQ==",highlighted:`<span class="hljs-keyword">del</span> model | |
| <span class="hljs-keyword">del</span> pytorch_model | |
| <span class="hljs-keyword">del</span> trainer | |
| torch.cuda.empty_cache()`,wrap:!1}}),Ce=new g({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwdG9rZW5pemVkX2RhdGFzZXRzLnJlbW92ZV9jb2x1bW5zKCU1QiUyMnRleHQlMjIlNUQp",highlighted:'<span class="hljs-meta">>>> </span>tokenized_datasets = tokenized_datasets.remove_columns([<span class="hljs-string">"text"</span>])',wrap:!1}}),Ie=new g({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwdG9rZW5pemVkX2RhdGFzZXRzLnJlbmFtZV9jb2x1bW4oJTIybGFiZWwlMjIlMkMlMjAlMjJsYWJlbHMlMjIp",highlighted:'<span class="hljs-meta">>>> </span>tokenized_datasets = tokenized_datasets.rename_column(<span class="hljs-string">"label"</span>, <span class="hljs-string">"labels"</span>)',wrap:!1}}),Ge=new g({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzLnNldF9mb3JtYXQoJTIydG9yY2glMjIp",highlighted:'<span class="hljs-meta">>>> </span>tokenized_datasets.set_format(<span class="hljs-string">"torch"</span>)',wrap:!1}}),Xe=new g({props:{code:"c21hbGxfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELnNodWZmbGUoc2VlZCUzRDQyKS5zZWxlY3QocmFuZ2UoMTAwMCkpJTBBc21hbGxfZXZhbF9kYXRhc2V0JTIwJTNEJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydGVzdCUyMiU1RC5zaHVmZmxlKHNlZWQlM0Q0Mikuc2VsZWN0KHJhbmdlKDEwMDApKQ==",highlighted:`<span class="hljs-meta">>>> </span>small_train_dataset = tokenized_datasets[<span class="hljs-string">"train"</span>].shuffle(seed=<span class="hljs-number">42</span>).select(<span class="hljs-built_in">range</span>(<span class="hljs-number">1000</span>)) | |
| <span class="hljs-meta">>>> </span>small_eval_dataset = tokenized_datasets[<span class="hljs-string">"test"</span>].shuffle(seed=<span class="hljs-number">42</span>).select(<span class="hljs-built_in">range</span>(<span class="hljs-number">1000</span>))`,wrap:!1}}),ze=new b({props:{title:"DataLoader",local:"dataloader",headingTag:"h3"}}),xe=new g({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBJTBBdHJhaW5fZGF0YWxvYWRlciUyMCUzRCUyMERhdGFMb2FkZXIoc21hbGxfdHJhaW5fZGF0YXNldCUyQyUyMHNodWZmbGUlM0RUcnVlJTJDJTIwYmF0Y2hfc2l6ZSUzRDgpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlcihzbWFsbF9ldmFsX2RhdGFzZXQlMkMlMjBiYXRjaF9zaXplJTNEOCk=",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader | |
| <span class="hljs-meta">>>> </span>train_dataloader = DataLoader(small_train_dataset, shuffle=<span class="hljs-literal">True</span>, batch_size=<span class="hljs-number">8</span>) | |
| <span class="hljs-meta">>>> </span>eval_dataloader = DataLoader(small_eval_dataset, batch_size=<span class="hljs-number">8</span>)`,wrap:!1}}),Be=new g({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMmdvb2dsZS1iZXJ0JTJGYmVydC1iYXNlLWNhc2VkJTIyJTJDJTIwbnVtX2xhYmVscyUzRDUp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification | |
| <span class="hljs-meta">>>> </span>model = AutoModelForSequenceClassification.from_pretrained(<span class="hljs-string">"google-bert/bert-base-cased"</span>, num_labels=<span class="hljs-number">5</span>)`,wrap:!1}}),Ye=new b({props:{title:"Optimiza y programa el learning rate",local:"optimiza-y-programa-el-learning-rate",headingTag:"h3"}}),He=new g({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDVlLTUp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW | |
| <span class="hljs-meta">>>> </span>optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">5e-5</span>)`,wrap:!1}}),Ae=new g({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV90cmFpbmluZ19zdGVwcyUyMCUzRCUyMG51bV9lcG9jaHMlMjAqJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbHJfc2NoZWR1bGVyJTIwJTNEJTIwZ2V0X3NjaGVkdWxlciglMEElMjAlMjAlMjAlMjBuYW1lJTNEJTIybGluZWFyJTIyJTJDJTIwb3B0aW1pemVyJTNEb3B0aW1pemVyJTJDJTIwbnVtX3dhcm11cF9zdGVwcyUzRDAlMkMlMjBudW1fdHJhaW5pbmdfc3RlcHMlM0RudW1fdHJhaW5pbmdfc3RlcHMlMEEp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler | |
| <span class="hljs-meta">>>> </span>num_epochs = <span class="hljs-number">3</span> | |
| <span class="hljs-meta">>>> </span>num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dataloader) | |
| <span class="hljs-meta">>>> </span>lr_scheduler = get_scheduler( | |
| <span class="hljs-meta">... </span> name=<span class="hljs-string">"linear"</span>, optimizer=optimizer, num_warmup_steps=<span class="hljs-number">0</span>, num_training_steps=num_training_steps | |
| <span class="hljs-meta">... </span>)`,wrap:!1}}),Le=new g({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwdG9yY2guZGV2aWNlKCUyMmNwdSUyMiklMEFtb2RlbC50byhkZXZpY2Up",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">import</span> torch | |
| <span class="hljs-meta">>>> </span>device = torch.device(<span class="hljs-string">"cuda"</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">"cpu"</span>) | |
| <span class="hljs-meta">>>> </span>model.to(device)`,wrap:!1}}),_=new ls({props:{$$slots:{default:[Ks]},$$scope:{ctx:v}}}),Se=new b({props:{title:"Ciclo de entrenamiento",local:"ciclo-de-entrenamiento",headingTag:"h3"}}),De=new g({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEElMEFwcm9ncmVzc19iYXIlMjAlM0QlMjB0cWRtKHJhbmdlKG51bV90cmFpbmluZ19zdGVwcykpJTBBJTBBbW9kZWwudHJhaW4oKSUwQWZvciUyMGVwb2NoJTIwaW4lMjByYW5nZShudW1fZXBvY2hzKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGJhdGNoJTIwaW4lMjB0cmFpbl9kYXRhbG9hZGVyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwdi50byhkZXZpY2UpJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zcy5iYWNrd2FyZCgpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm | |
| <span class="hljs-meta">>>> </span>progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps)) | |
| <span class="hljs-meta">>>> </span>model.train() | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs): | |
| <span class="hljs-meta">... </span> <span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader: | |
| <span class="hljs-meta">... </span> batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()} | |
| <span class="hljs-meta">... </span> outputs = model(**batch) | |
| <span class="hljs-meta">... </span> loss = outputs.loss | |
| <span class="hljs-meta">... </span> loss.backward() | |
| <span class="hljs-meta">... </span> optimizer.step() | |
| <span class="hljs-meta">... </span> lr_scheduler.step() | |
| <span class="hljs-meta">... </span> optimizer.zero_grad() | |
| <span class="hljs-meta">... </span> progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),Ke=new b({props:{title:"Métricas",local:"métricas",headingTag:"h3"}}),et=new g({props:{code:"bWV0cmljJTIwJTNEJTIwbG9hZF9tZXRyaWMoJTIyYWNjdXJhY3klMjIpJTBBbW9kZWwuZXZhbCgpJTBBZm9yJTIwYmF0Y2glMjBpbiUyMGV2YWxfZGF0YWxvYWRlciUzQSUwQSUyMCUyMCUyMCUyMGJhdGNoJTIwJTNEJTIwJTdCayUzQSUyMHYudG8oZGV2aWNlKSUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBiYXRjaC5pdGVtcygpJTdEJTBBJTIwJTIwJTIwJTIwd2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUwQSUyMCUyMCUyMCUyMGxvZ2l0cyUyMCUzRCUyMG91dHB1dHMubG9naXRzJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjB0b3JjaC5hcmdtYXgobG9naXRzJTJDJTIwZGltJTNELTEpJTBBJTIwJTIwJTIwJTIwbWV0cmljLmFkZF9iYXRjaChwcmVkaWN0aW9ucyUzRHByZWRpY3Rpb25zJTJDJTIwcmVmZXJlbmNlcyUzRGJhdGNoJTVCJTIybGFiZWxzJTIyJTVEKSUwQSUwQW1ldHJpYy5jb21wdXRlKCk=",highlighted:`<span class="hljs-meta">>>> </span>metric = load_metric(<span class="hljs-string">"accuracy"</span>) | |
| <span class="hljs-meta">>>> </span>model.<span class="hljs-built_in">eval</span>() | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> eval_dataloader: | |
| <span class="hljs-meta">... </span> batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()} | |
| <span class="hljs-meta">... </span> <span class="hljs-keyword">with</span> torch.no_grad(): | |
| <span class="hljs-meta">... </span> outputs = model(**batch) | |
| <span class="hljs-meta">... </span> logits = outputs.logits | |
| <span class="hljs-meta">... </span> predictions = torch.argmax(logits, dim=-<span class="hljs-number">1</span>) | |
| <span class="hljs-meta">... </span> metric.add_batch(predictions=predictions, references=batch[<span class="hljs-string">"labels"</span>]) | |
| <span class="hljs-meta">>>> </span>metric.compute()`,wrap:!1}}),tt=new b({props:{title:"Recursos adicionales",local:"recursos-adicionales",headingTag:"h2"}}),lt=new Ss({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/es/training.md"}}),{c(){h=r("meta"),y=l(),M=r("p"),T=l(),i(C.$$.fragment),Mt=l(),i(U.$$.fragment),bt=l(),I=r("p"),I.textContent=rs,yt=l(),R=r("ul"),R.innerHTML=ps,jt=l(),it=r("a"),$t=l(),i(G.$$.fragment),Tt=l(),i(W.$$.fragment),wt=l(),X=r("p"),X.textContent=is,Jt=l(),z=r("p"),z.innerHTML=os,vt=l(),i(F.$$.fragment),kt=l(),x=r("p"),x.textContent=ms,Zt=l(),i(E.$$.fragment),_t=l(),B=r("p"),B.textContent=cs,Ct=l(),i(Y.$$.fragment),Ut=l(),ot=r("a"),It=l(),i(V.$$.fragment),Rt=l(),i(H.$$.fragment),Gt=l(),N=r("p"),N.innerHTML=ds,Wt=l(),A=r("p"),A.innerHTML=us,Xt=l(),i(q.$$.fragment),zt=l(),i(k.$$.fragment),Ft=l(),i(L.$$.fragment),xt=l(),Q=r("p"),Q.innerHTML=fs,Et=l(),S=r("p"),S.textContent=hs,Bt=l(),i(P.$$.fragment),Yt=l(),i(D.$$.fragment),Vt=l(),K=r("p"),K.innerHTML=gs,Ht=l(),i(O.$$.fragment),Nt=l(),ee=r("p"),ee.innerHTML=Ms,At=l(),i(te.$$.fragment),qt=l(),ae=r("p"),ae.innerHTML=bs,Lt=l(),i(se.$$.fragment),Qt=l(),i(le.$$.fragment),St=l(),ne=r("p"),ne.innerHTML=ys,Pt=l(),i(re.$$.fragment),Dt=l(),pe=r("p"),pe.innerHTML=js,Kt=l(),i(ie.$$.fragment),Ot=l(),mt=r("a"),ea=l(),i(oe.$$.fragment),ta=l(),i(me.$$.fragment),aa=l(),ce=r("p"),ce.textContent=$s,sa=l(),i(de.$$.fragment),la=l(),ue=r("p"),ue.innerHTML=Ts,na=l(),i(fe.$$.fragment),ra=l(),i(Z.$$.fragment),pa=l(),he=r("p"),he.innerHTML=ws,ia=l(),i(ge.$$.fragment),oa=l(),i(Me.$$.fragment),ma=l(),be=r("p"),be.textContent=Js,ca=l(),i(ye.$$.fragment),da=l(),je=r("p"),je.innerHTML=vs,ua=l(),i($e.$$.fragment),fa=l(),ct=r("a"),ha=l(),i(Te.$$.fragment),ga=l(),i(we.$$.fragment),Ma=l(),Je=r("p"),Je.innerHTML=ks,ba=l(),ve=r("p"),ve.textContent=Zs,ya=l(),i(ke.$$.fragment),ja=l(),Ze=r("p"),Ze.innerHTML=_s,$a=l(),w=r("ol"),_e=r("li"),dt=r("p"),dt.innerHTML=Cs,Oa=l(),i(Ce.$$.fragment),es=l(),Ue=r("li"),ut=r("p"),ut.innerHTML=Us,ts=l(),i(Ie.$$.fragment),as=l(),Re=r("li"),ft=r("p"),ft.textContent=Is,ss=l(),i(Ge.$$.fragment),Ta=l(),We=r("p"),We.textContent=Rs,wa=l(),i(Xe.$$.fragment),Ja=l(),i(ze.$$.fragment),va=l(),Fe=r("p"),Fe.innerHTML=Gs,ka=l(),i(xe.$$.fragment),Za=l(),Ee=r("p"),Ee.textContent=Ws,_a=l(),i(Be.$$.fragment),Ca=l(),i(Ye.$$.fragment),Ua=l(),Ve=r("p"),Ve.innerHTML=Xs,Ia=l(),i(He.$$.fragment),Ra=l(),Ne=r("p"),Ne.innerHTML=zs,Ga=l(),i(Ae.$$.fragment),Wa=l(),qe=r("p"),qe.innerHTML=Fs,Xa=l(),i(Le.$$.fragment),za=l(),i(_.$$.fragment),Fa=l(),Qe=r("p"),Qe.textContent=xs,xa=l(),i(Se.$$.fragment),Ea=l(),Pe=r("p"),Pe.innerHTML=Es,Ba=l(),i(De.$$.fragment),Ya=l(),i(Ke.$$.fragment),Va=l(),Oe=r("p"),Oe.innerHTML=Bs,Ha=l(),i(et.$$.fragment),Na=l(),ht=r("a"),Aa=l(),i(tt.$$.fragment),qa=l(),at=r("p"),at.textContent=Ys,La=l(),st=r("ul"),st.innerHTML=Vs,Qa=l(),i(lt.$$.fragment),Sa=l(),gt=r("p"),this.h()},l(e){const t=Ls("svelte-u9bgzb",document.head);h=p(t,"META",{name:!0,content:!0}),t.forEach(a),y=n(e),M=p(e,"P",{}),$(M).forEach(a),T=n(e),o(C.$$.fragment,e),Mt=n(e),o(U.$$.fragment,e),bt=n(e),I=p(e,"P",{"data-svelte-h":!0}),f(I)!=="svelte-1buid90"&&(I.textContent=rs),yt=n(e),R=p(e,"UL",{"data-svelte-h":!0}),f(R)!=="svelte-ig3005"&&(R.innerHTML=ps),jt=n(e),it=p(e,"A",{id:!0}),$(it).forEach(a),$t=n(e),o(G.$$.fragment,e),Tt=n(e),o(W.$$.fragment,e),wt=n(e),X=p(e,"P",{"data-svelte-h":!0}),f(X)!=="svelte-w3kxlj"&&(X.textContent=is),Jt=n(e),z=p(e,"P",{"data-svelte-h":!0}),f(z)!=="svelte-1tawjjo"&&(z.innerHTML=os),vt=n(e),o(F.$$.fragment,e),kt=n(e),x=p(e,"P",{"data-svelte-h":!0}),f(x)!=="svelte-67e30w"&&(x.textContent=ms),Zt=n(e),o(E.$$.fragment,e),_t=n(e),B=p(e,"P",{"data-svelte-h":!0}),f(B)!=="svelte-s4lbad"&&(B.textContent=cs),Ct=n(e),o(Y.$$.fragment,e),Ut=n(e),ot=p(e,"A",{id:!0}),$(ot).forEach(a),It=n(e),o(V.$$.fragment,e),Rt=n(e),o(H.$$.fragment,e),Gt=n(e),N=p(e,"P",{"data-svelte-h":!0}),f(N)!=="svelte-voi579"&&(N.innerHTML=ds),Wt=n(e),A=p(e,"P",{"data-svelte-h":!0}),f(A)!=="svelte-aja07e"&&(A.innerHTML=us),Xt=n(e),o(q.$$.fragment,e),zt=n(e),o(k.$$.fragment,e),Ft=n(e),o(L.$$.fragment,e),xt=n(e),Q=p(e,"P",{"data-svelte-h":!0}),f(Q)!=="svelte-k49oxq"&&(Q.innerHTML=fs),Et=n(e),S=p(e,"P",{"data-svelte-h":!0}),f(S)!=="svelte-qk98nd"&&(S.textContent=hs),Bt=n(e),o(P.$$.fragment,e),Yt=n(e),o(D.$$.fragment,e),Vt=n(e),K=p(e,"P",{"data-svelte-h":!0}),f(K)!=="svelte-e3e7hq"&&(K.innerHTML=gs),Ht=n(e),o(O.$$.fragment,e),Nt=n(e),ee=p(e,"P",{"data-svelte-h":!0}),f(ee)!=="svelte-1o2d1nd"&&(ee.innerHTML=Ms),At=n(e),o(te.$$.fragment,e),qt=n(e),ae=p(e,"P",{"data-svelte-h":!0}),f(ae)!=="svelte-mm383i"&&(ae.innerHTML=bs),Lt=n(e),o(se.$$.fragment,e),Qt=n(e),o(le.$$.fragment,e),St=n(e),ne=p(e,"P",{"data-svelte-h":!0}),f(ne)!=="svelte-hqyfsb"&&(ne.innerHTML=ys),Pt=n(e),o(re.$$.fragment,e),Dt=n(e),pe=p(e,"P",{"data-svelte-h":!0}),f(pe)!=="svelte-1kgdd01"&&(pe.innerHTML=js),Kt=n(e),o(ie.$$.fragment,e),Ot=n(e),mt=p(e,"A",{id:!0}),$(mt).forEach(a),ea=n(e),o(oe.$$.fragment,e),ta=n(e),o(me.$$.fragment,e),aa=n(e),ce=p(e,"P",{"data-svelte-h":!0}),f(ce)!=="svelte-7ow6xu"&&(ce.textContent=$s),sa=n(e),o(de.$$.fragment,e),la=n(e),ue=p(e,"P",{"data-svelte-h":!0}),f(ue)!=="svelte-1o5ba62"&&(ue.innerHTML=Ts),na=n(e),o(fe.$$.fragment,e),ra=n(e),o(Z.$$.fragment,e),pa=n(e),he=p(e,"P",{"data-svelte-h":!0}),f(he)!=="svelte-1f0hli3"&&(he.innerHTML=ws),ia=n(e),o(ge.$$.fragment,e),oa=n(e),o(Me.$$.fragment,e),ma=n(e),be=p(e,"P",{"data-svelte-h":!0}),f(be)!=="svelte-nyxf5n"&&(be.textContent=Js),ca=n(e),o(ye.$$.fragment,e),da=n(e),je=p(e,"P",{"data-svelte-h":!0}),f(je)!=="svelte-1k8sz6c"&&(je.innerHTML=vs),ua=n(e),o($e.$$.fragment,e),fa=n(e),ct=p(e,"A",{id:!0}),$(ct).forEach(a),ha=n(e),o(Te.$$.fragment,e),ga=n(e),o(we.$$.fragment,e),Ma=n(e),Je=p(e,"P",{"data-svelte-h":!0}),f(Je)!=="svelte-1e5fids"&&(Je.innerHTML=ks),ba=n(e),ve=p(e,"P",{"data-svelte-h":!0}),f(ve)!=="svelte-izthtk"&&(ve.textContent=Zs),ya=n(e),o(ke.$$.fragment,e),ja=n(e),Ze=p(e,"P",{"data-svelte-h":!0}),f(Ze)!=="svelte-k4uz55"&&(Ze.innerHTML=_s),$a=n(e),w=p(e,"OL",{});var J=$(w);_e=p(J,"LI",{});var nt=$(_e);dt=p(nt,"P",{"data-svelte-h":!0}),f(dt)!=="svelte-zx6r95"&&(dt.innerHTML=Cs),Oa=n(nt),o(Ce.$$.fragment,nt),nt.forEach(a),es=n(J),Ue=p(J,"LI",{});var rt=$(Ue);ut=p(rt,"P",{"data-svelte-h":!0}),f(ut)!=="svelte-kqcj8b"&&(ut.innerHTML=Us),ts=n(rt),o(Ie.$$.fragment,rt),rt.forEach(a),as=n(J),Re=p(J,"LI",{});var Da=$(Re);ft=p(Da,"P",{"data-svelte-h":!0}),f(ft)!=="svelte-1836e76"&&(ft.textContent=Is),ss=n(Da),o(Ge.$$.fragment,Da),Da.forEach(a),J.forEach(a),Ta=n(e),We=p(e,"P",{"data-svelte-h":!0}),f(We)!=="svelte-1aawh5m"&&(We.textContent=Rs),wa=n(e),o(Xe.$$.fragment,e),Ja=n(e),o(ze.$$.fragment,e),va=n(e),Fe=p(e,"P",{"data-svelte-h":!0}),f(Fe)!=="svelte-c0jmc2"&&(Fe.innerHTML=Gs),ka=n(e),o(xe.$$.fragment,e),Za=n(e),Ee=p(e,"P",{"data-svelte-h":!0}),f(Ee)!=="svelte-1ed0x50"&&(Ee.textContent=Ws),_a=n(e),o(Be.$$.fragment,e),Ca=n(e),o(Ye.$$.fragment,e),Ua=n(e),Ve=p(e,"P",{"data-svelte-h":!0}),f(Ve)!=="svelte-l209jc"&&(Ve.innerHTML=Xs),Ia=n(e),o(He.$$.fragment,e),Ra=n(e),Ne=p(e,"P",{"data-svelte-h":!0}),f(Ne)!=="svelte-nkntum"&&(Ne.innerHTML=zs),Ga=n(e),o(Ae.$$.fragment,e),Wa=n(e),qe=p(e,"P",{"data-svelte-h":!0}),f(qe)!=="svelte-1ni7zw3"&&(qe.innerHTML=Fs),Xa=n(e),o(Le.$$.fragment,e),za=n(e),o(_.$$.fragment,e),Fa=n(e),Qe=p(e,"P",{"data-svelte-h":!0}),f(Qe)!=="svelte-1z11csw"&&(Qe.textContent=xs),xa=n(e),o(Se.$$.fragment,e),Ea=n(e),Pe=p(e,"P",{"data-svelte-h":!0}),f(Pe)!=="svelte-102z8xq"&&(Pe.innerHTML=Es),Ba=n(e),o(De.$$.fragment,e),Ya=n(e),o(Ke.$$.fragment,e),Va=n(e),Oe=p(e,"P",{"data-svelte-h":!0}),f(Oe)!=="svelte-1foix32"&&(Oe.innerHTML=Bs),Ha=n(e),o(et.$$.fragment,e),Na=n(e),ht=p(e,"A",{id:!0}),$(ht).forEach(a),Aa=n(e),o(tt.$$.fragment,e),qa=n(e),at=p(e,"P",{"data-svelte-h":!0}),f(at)!=="svelte-p06dg2"&&(at.textContent=Ys),La=n(e),st=p(e,"UL",{"data-svelte-h":!0}),f(st)!=="svelte-hy4ewn"&&(st.innerHTML=Vs),Qa=n(e),o(lt.$$.fragment,e),Sa=n(e),gt=p(e,"P",{}),$(gt).forEach(a),this.h()},h(){pt(h,"name","hf:doc:metadata"),pt(h,"content",el),pt(it,"id","data-processing"),pt(ot,"id","trainer"),pt(mt,"id","keras"),pt(ct,"id","pytorch_native"),pt(ht,"id","additional-resources")},m(e,t){j(document.head,h),s(e,y,t),s(e,M,t),s(e,T,t),m(C,e,t),s(e,Mt,t),m(U,e,t),s(e,bt,t),s(e,I,t),s(e,yt,t),s(e,R,t),s(e,jt,t),s(e,it,t),s(e,$t,t),m(G,e,t),s(e,Tt,t),m(W,e,t),s(e,wt,t),s(e,X,t),s(e,Jt,t),s(e,z,t),s(e,vt,t),m(F,e,t),s(e,kt,t),s(e,x,t),s(e,Zt,t),m(E,e,t),s(e,_t,t),s(e,B,t),s(e,Ct,t),m(Y,e,t),s(e,Ut,t),s(e,ot,t),s(e,It,t),m(V,e,t),s(e,Rt,t),m(H,e,t),s(e,Gt,t),s(e,N,t),s(e,Wt,t),s(e,A,t),s(e,Xt,t),m(q,e,t),s(e,zt,t),m(k,e,t),s(e,Ft,t),m(L,e,t),s(e,xt,t),s(e,Q,t),s(e,Et,t),s(e,S,t),s(e,Bt,t),m(P,e,t),s(e,Yt,t),m(D,e,t),s(e,Vt,t),s(e,K,t),s(e,Ht,t),m(O,e,t),s(e,Nt,t),s(e,ee,t),s(e,At,t),m(te,e,t),s(e,qt,t),s(e,ae,t),s(e,Lt,t),m(se,e,t),s(e,Qt,t),m(le,e,t),s(e,St,t),s(e,ne,t),s(e,Pt,t),m(re,e,t),s(e,Dt,t),s(e,pe,t),s(e,Kt,t),m(ie,e,t),s(e,Ot,t),s(e,mt,t),s(e,ea,t),m(oe,e,t),s(e,ta,t),m(me,e,t),s(e,aa,t),s(e,ce,t),s(e,sa,t),m(de,e,t),s(e,la,t),s(e,ue,t),s(e,na,t),m(fe,e,t),s(e,ra,t),m(Z,e,t),s(e,pa,t),s(e,he,t),s(e,ia,t),m(ge,e,t),s(e,oa,t),m(Me,e,t),s(e,ma,t),s(e,be,t),s(e,ca,t),m(ye,e,t),s(e,da,t),s(e,je,t),s(e,ua,t),m($e,e,t),s(e,fa,t),s(e,ct,t),s(e,ha,t),m(Te,e,t),s(e,ga,t),m(we,e,t),s(e,Ma,t),s(e,Je,t),s(e,ba,t),s(e,ve,t),s(e,ya,t),m(ke,e,t),s(e,ja,t),s(e,Ze,t),s(e,$a,t),s(e,w,t),j(w,_e),j(_e,dt),j(_e,Oa),m(Ce,_e,null),j(w,es),j(w,Ue),j(Ue,ut),j(Ue,ts),m(Ie,Ue,null),j(w,as),j(w,Re),j(Re,ft),j(Re,ss),m(Ge,Re,null),s(e,Ta,t),s(e,We,t),s(e,wa,t),m(Xe,e,t),s(e,Ja,t),m(ze,e,t),s(e,va,t),s(e,Fe,t),s(e,ka,t),m(xe,e,t),s(e,Za,t),s(e,Ee,t),s(e,_a,t),m(Be,e,t),s(e,Ca,t),m(Ye,e,t),s(e,Ua,t),s(e,Ve,t),s(e,Ia,t),m(He,e,t),s(e,Ra,t),s(e,Ne,t),s(e,Ga,t),m(Ae,e,t),s(e,Wa,t),s(e,qe,t),s(e,Xa,t),m(Le,e,t),s(e,za,t),m(_,e,t),s(e,Fa,t),s(e,Qe,t),s(e,xa,t),m(Se,e,t),s(e,Ea,t),s(e,Pe,t),s(e,Ba,t),m(De,e,t),s(e,Ya,t),m(Ke,e,t),s(e,Va,t),s(e,Oe,t),s(e,Ha,t),m(et,e,t),s(e,Na,t),s(e,ht,t),s(e,Aa,t),m(tt,e,t),s(e,qa,t),s(e,at,t),s(e,La,t),s(e,st,t),s(e,Qa,t),m(lt,e,t),s(e,Sa,t),s(e,gt,t),Pa=!0},p(e,[t]){const J={};t&2&&(J.$$scope={dirty:t,ctx:e}),k.$set(J);const nt={};t&2&&(nt.$$scope={dirty:t,ctx:e}),Z.$set(nt);const rt={};t&2&&(rt.$$scope={dirty:t,ctx:e}),_.$set(rt)},i(e){Pa||(c(C.$$.fragment,e),c(U.$$.fragment,e),c(G.$$.fragment,e),c(W.$$.fragment,e),c(F.$$.fragment,e),c(E.$$.fragment,e),c(Y.$$.fragment,e),c(V.$$.fragment,e),c(H.$$.fragment,e),c(q.$$.fragment,e),c(k.$$.fragment,e),c(L.$$.fragment,e),c(P.$$.fragment,e),c(D.$$.fragment,e),c(O.$$.fragment,e),c(te.$$.fragment,e),c(se.$$.fragment,e),c(le.$$.fragment,e),c(re.$$.fragment,e),c(ie.$$.fragment,e),c(oe.$$.fragment,e),c(me.$$.fragment,e),c(de.$$.fragment,e),c(fe.$$.fragment,e),c(Z.$$.fragment,e),c(ge.$$.fragment,e),c(Me.$$.fragment,e),c(ye.$$.fragment,e),c($e.$$.fragment,e),c(Te.$$.fragment,e),c(we.$$.fragment,e),c(ke.$$.fragment,e),c(Ce.$$.fragment,e),c(Ie.$$.fragment,e),c(Ge.$$.fragment,e),c(Xe.$$.fragment,e),c(ze.$$.fragment,e),c(xe.$$.fragment,e),c(Be.$$.fragment,e),c(Ye.$$.fragment,e),c(He.$$.fragment,e),c(Ae.$$.fragment,e),c(Le.$$.fragment,e),c(_.$$.fragment,e),c(Se.$$.fragment,e),c(De.$$.fragment,e),c(Ke.$$.fragment,e),c(et.$$.fragment,e),c(tt.$$.fragment,e),c(lt.$$.fragment,e),Pa=!0)},o(e){d(C.$$.fragment,e),d(U.$$.fragment,e),d(G.$$.fragment,e),d(W.$$.fragment,e),d(F.$$.fragment,e),d(E.$$.fragment,e),d(Y.$$.fragment,e),d(V.$$.fragment,e),d(H.$$.fragment,e),d(q.$$.fragment,e),d(k.$$.fragment,e),d(L.$$.fragment,e),d(P.$$.fragment,e),d(D.$$.fragment,e),d(O.$$.fragment,e),d(te.$$.fragment,e),d(se.$$.fragment,e),d(le.$$.fragment,e),d(re.$$.fragment,e),d(ie.$$.fragment,e),d(oe.$$.fragment,e),d(me.$$.fragment,e),d(de.$$.fragment,e),d(fe.$$.fragment,e),d(Z.$$.fragment,e),d(ge.$$.fragment,e),d(Me.$$.fragment,e),d(ye.$$.fragment,e),d($e.$$.fragment,e),d(Te.$$.fragment,e),d(we.$$.fragment,e),d(ke.$$.fragment,e),d(Ce.$$.fragment,e),d(Ie.$$.fragment,e),d(Ge.$$.fragment,e),d(Xe.$$.fragment,e),d(ze.$$.fragment,e),d(xe.$$.fragment,e),d(Be.$$.fragment,e),d(Ye.$$.fragment,e),d(He.$$.fragment,e),d(Ae.$$.fragment,e),d(Le.$$.fragment,e),d(_.$$.fragment,e),d(Se.$$.fragment,e),d(De.$$.fragment,e),d(Ke.$$.fragment,e),d(et.$$.fragment,e),d(tt.$$.fragment,e),d(lt.$$.fragment,e),Pa=!1},d(e){e&&(a(y),a(M),a(T),a(Mt),a(bt),a(I),a(yt),a(R),a(jt),a(it),a($t),a(Tt),a(wt),a(X),a(Jt),a(z),a(vt),a(kt),a(x),a(Zt),a(_t),a(B),a(Ct),a(Ut),a(ot),a(It),a(Rt),a(Gt),a(N),a(Wt),a(A),a(Xt),a(zt),a(Ft),a(xt),a(Q),a(Et),a(S),a(Bt),a(Yt),a(Vt),a(K),a(Ht),a(Nt),a(ee),a(At),a(qt),a(ae),a(Lt),a(Qt),a(St),a(ne),a(Pt),a(Dt),a(pe),a(Kt),a(Ot),a(mt),a(ea),a(ta),a(aa),a(ce),a(sa),a(la),a(ue),a(na),a(ra),a(pa),a(he),a(ia),a(oa),a(ma),a(be),a(ca),a(da),a(je),a(ua),a(fa),a(ct),a(ha),a(ga),a(Ma),a(Je),a(ba),a(ve),a(ya),a(ja),a(Ze),a($a),a(w),a(Ta),a(We),a(wa),a(Ja),a(va),a(Fe),a(ka),a(Za),a(Ee),a(_a),a(Ca),a(Ua),a(Ve),a(Ia),a(Ra),a(Ne),a(Ga),a(Wa),a(qe),a(Xa),a(za),a(Fa),a(Qe),a(xa),a(Ea),a(Pe),a(Ba),a(Ya),a(Va),a(Oe),a(Ha),a(Na),a(ht),a(Aa),a(qa),a(at),a(La),a(st),a(Qa),a(Sa),a(gt)),a(h),u(C,e),u(U,e),u(G,e),u(W,e),u(F,e),u(E,e),u(Y,e),u(V,e),u(H,e),u(q,e),u(k,e),u(L,e),u(P,e),u(D,e),u(O,e),u(te,e),u(se,e),u(le,e),u(re,e),u(ie,e),u(oe,e),u(me,e),u(de,e),u(fe,e),u(Z,e),u(ge,e),u(Me,e),u(ye,e),u($e,e),u(Te,e),u(we,e),u(ke,e),u(Ce),u(Ie),u(Ge),u(Xe,e),u(ze,e),u(xe,e),u(Be,e),u(Ye,e),u(He,e),u(Ae,e),u(Le,e),u(_,e),u(Se,e),u(De,e),u(Ke,e),u(et,e),u(tt,e),u(lt,e)}}}const el='{"title":"Fine-tuning a un modelo pre-entrenado","local":"fine-tuning-a-un-modelo-pre-entrenado","sections":[{"title":"Prepara un dataset","local":"prepara-un-dataset","sections":[],"depth":2},{"title":"Fine-tuning con Trainer","local":"fine-tuning-con-trainer","sections":[{"title":"Hiperparámetros de entrenamiento","local":"hiperparámetros-de-entrenamiento","sections":[],"depth":3},{"title":"Métricas","local":"métricas","sections":[],"depth":3},{"title":"Trainer","local":"trainer","sections":[],"depth":3}],"depth":2},{"title":"Fine-tuning con Keras","local":"fine-tuning-con-keras","sections":[{"title":"Convierte el dataset al formato de TensorFlow","local":"convierte-el-dataset-al-formato-de-tensorflow","sections":[],"depth":3},{"title":"Compila y ajusta","local":"compila-y-ajusta","sections":[],"depth":3}],"depth":2},{"title":"Fine-tune en PyTorch nativo","local":"fine-tune-en-pytorch-nativo","sections":[{"title":"DataLoader","local":"dataloader","sections":[],"depth":3},{"title":"Optimiza y programa el learning rate","local":"optimiza-y-programa-el-learning-rate","sections":[],"depth":3},{"title":"Ciclo de entrenamiento","local":"ciclo-de-entrenamiento","sections":[],"depth":3},{"title":"Métricas","local":"métricas","sections":[],"depth":3}],"depth":2},{"title":"Recursos adicionales","local":"recursos-adicionales","sections":[],"depth":2}],"depth":1}';function tl(v){return Ns(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ol extends As{constructor(h){super(),qs(this,h,tl,Os,Hs,{})}}export{ol as component}; | |
Xet Storage Details
- Size:
- 51.6 kB
- Xet hash:
- 4e4278a0db5ee5eac4d692d0d38610603f9f554a0d887a6f5dbb5762a0dae15e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.