Buckets:
| import{s as vt,o as Rt,n as Zt}from"../chunks/scheduler.37c15a92.js";import{S as Wt,i as Ct,g as i,s as n,r as c,A as Ht,h as p,f as l,c as a,j as Ut,u as d,x as o,k as _t,y as Ft,a as s,v as m,d as M,t as f,w as u}from"../chunks/index.2bf4358c.js";import{T as Gt}from"../chunks/Tip.363c041f.js";import{Y as Et}from"../chunks/Youtube.1e50a667.js";import{C as $}from"../chunks/CodeBlock.4e987730.js";import{C as It}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{F as Xt}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as tt,E as zt}from"../chunks/getInferenceSnippets.24b50994.js";function Vt(w){let r,T='💡 Если вы хотите автоматически загружать модель на Hub во время обучения, передайте аргумент <code>push_to_hub=True</code> в <code>TrainingArguments</code>. Мы больше узнаем об этом в <a href="../chapter4/3">главе 4</a>.';return{c(){r=i("p"),r.innerHTML=T},l(b){r=p(b,"P",{"data-svelte-h":!0}),o(r)!=="svelte-qnhlgc"&&(r.innerHTML=T)},m(b,y){s(b,r,y)},p:Zt,d(b){b&&l(r)}}}function Bt(w){let r,T="✏️ <strong>Попробуйте!</strong> Произведите fine-tuning модели на датасете GLUE SST-2 с использованием препроцессинга из раздела 2.";return{c(){r=i("p"),r.innerHTML=T},l(b){r=p(b,"P",{"data-svelte-h":!0}),o(r)!=="svelte-c1qr45"&&(r.innerHTML=T)},m(b,y){s(b,r,y)},p:Zt,d(b){b&&l(r)}}}function Yt(w){let r,T,b,y,j,de,g,me,k,Me,U,fe,_,lt='Библиотека 🤗 Transformers предоставляет класс <code>Trainer</code>, который помогает произвести fine-tuning любой предобученной модели на вашем датасете. После предобработки данных, сделанных в прошлом разделе, вам останется сделать несколько шагов для определения <code>Trainer</code>. Самая сложная часть – подготовить окружение для запуска <code>Trainer.train()</code>, т.к. она медленно работает на центральном процессоре. Если у вас нет видеокарты, вы можете бесплатно воспользоваться сервисом <a href="https://colab.research.google.com/" rel="nofollow">Google Colab</a>, который предоставляет доступ к вычислениям с использованием GPU и TPU.',ue,G,st="Фрагменты кода ниже предполагают, что вы выполнили код из предыдущего раздела. Ниже приведено краткое резюме того, что вам нужно:",be,Z,$e,v,Te,R,nt="Первый шаг перед определением <code>Trainer</code>, задание класса <code>TrainingArguments</code>, который будет содержать все гиперпараметры для <code>Trainer</code> (для процессов обучения и валидации). Единственный аргумент, который вы должны задать — это каталог, в котором будет сохранена обученная модель, а также контрольные точки. Для всего остального вы можете оставить значения по умолчанию, которые должны подойти для базового fine-tuning.",ye,W,je,J,Je,C,at='Второй шаг – задание модели. Так же, как и в <a href="../chapter2/1">предыдущей главе</a>, мы будем использовать класс <code>AutoModelForSequenceClassification</code> с двумя лейблами:',he,H,we,F,it='После создания экземпляра предобученной модели будет распечатано предупреждение (в <a href="../chapter2/1">главе 2</a> мы с таким не сталкивались). Это происходит потому, что BERT не был предобучен для задачи классификации пар предложений, его последний слой не будет использован, вместо него будет добавлен слой, позволяющий работать с такой задачей. Предупреждения сообщают, что некоторые веса не будут использованы (как раз тех слоев, которые не будут использоваться) и для новых будут инициализированы случайные веса. В заключении предлагается обучить модель, что мы и сделаем прямо сейчас.',ge,E,pt="После того, как мы загрузили модель, мы можем определить <code>Trainer</code> и передать туда нужные объекты: <code>model</code>, <code>training_args</code>, обучающую и валидационную выборки, <code>data_collator</code> и <code>tokenizer</code>",ke,I,Ue,X,rt="Заметьте, когда вы передали <code>tokenizer</code> как в примере выше, значение по умолчанию для <code>data_collator</code> в <code>Trainer</code> будет <code>DataCollatorWithPadding</code> таким, как определено выше, так что эту строку (<code>data_collator=data_collator</code>) можно пропустить в этом вызове.",_e,z,ot="Для fine-tuning модели на нашем датасете мы просто должны вызвать метод <code>train()</code> у <code>Trainer</code>:",Ge,V,Ze,B,ct="Это запустит процесс дообучения (который должен занять несколько минут на GPU) и будет распечатывать значение лосса каждые 500 итераций. Однако эти значения не скажут нам, насколько хорошо или плохо модель работает. И вот почему:",ve,Y,dt="<li>Мы не сообщили <code>Trainer</code>, что необходимо проводить валидацию: для этого нужно присвоить аргументу <code>evaluation_strategy</code> значение <code>"steps"</code> (валидировать каждые <code>eval_steps</code>) или <code>"epoch"</code> (валидировать по окончании каждой эпохи).</li> <li>Мы не указали <code>Trainer</code> аргумент <code>compute_metrics()</code> – функцию для вычисления метрики на валидационной части (в таком случае в процессе валидации будет только распечатываться значение лосса, что не очень информативно).</li>",Re,x,We,A,mt="Давайте посмотрим как мы можем создать и использовать в процессе обучения полезную функцию <code>compute_metrics()</code>. Функция должна принимать на вход объект <code>EvalPrediction</code> (именованный кортеж с полями <code>predictions</code> и <code>label_ids</code>) и возвращать словарь, где ключи - названия метрик, а значения - оценки этих метрик. Чтобы получить предсказания, мы можем использовать функцию <code>Trainer.predict()</code>:",Ce,N,He,Q,Fe,L,Mt="Результат функции <code>predict()</code> - другой именованный кортеж с полями <code>predictions</code>, <code>label_ids</code> и <code>metrics</code>. Поле <code>metrics</code> будет содержать значение лосса на нашем датасете и значения метрик. После реализации функции <code>compute_metrics()</code> и передачи ее в <code>Trainer</code> поле <code>metrics</code> также будет содержать результат функции <code>compute_metrics()</code>.",Ee,q,ft='Как можно заметить, <code>predictions</code> - массив 408 х 2 (408 - число элементов в датасете, который мы использовали). Это логиты для каждого элемента нашего датасета, переданного в <code>predict()</code> (как вы видели в <a href="../chapter2/1">предыдущей главе</a> все модели Трансформеров возвращают логиты). Чтобы превратить их в предсказания и сравнить с нашими лейблами, нам необходимо узнать индекс максимального элемента второй оси:',Ie,P,Xe,S,ut='Теперь мы можем сравнить эти предсказания с лейблами. Для создания функции <code>compute_metric()</code> мы воспользуемся метриками из библиотеки 🤗 <a href="https://github.com/huggingface/evaluate/" rel="nofollow">Evaluate</a>. Мы можем загрузить подходящие для датасета MRPC метрики так же просто, как мы загрузили датасет, но на этот раз с помощью функции <code>evaluate.load()</code>. Возвращаемый объект имеет метод <code>compute()</code>, который мы можем использовать для вычисления метрики:',ze,K,Ve,D,Be,O,bt='У вас эти результаты могут отличаться ввиду случайной инициализации параметров модели. Тут мы можем увидеть точность 85.78% и F1 89.97% на валидационной части выборки. Эти метрики используются для валидации результатов на MRPC датасете на бенчмарке GLUE. В таблице в статье о <a href="https://arxiv.org/pdf/1810.04805.pdf" rel="nofollow">BERT</a> указано значение F1 оценки в 88.9 для базовой модели. Это была оценка для варианта модели <code>uncased</code>, а мы использовали <code>cased</code>, этим и объясняется более хороший результат.',Ye,ee,$t="Собирая вместе все фрагменты выше, мы получим нашу функцию <code>compute_metrics()</code>:",xe,te,Ae,le,Tt="Чтобы увидеть эту функцию в действии после каждой эпохи ниже мы определим еще один <code>Trainer</code> с функцией <code>compute_metrics()</code>:",Ne,se,Qe,ne,yt="Обратите внимание, что мы создали новый объект <code>TrainingArguments</code> с собственным <code>evaluation_strategy</code> равным <code>"epoch"</code> и новой моделью - иначе мы бы продолжили обучать модель, которая уже является обученной. Чтобы запустить обучение заново, надо выполнить:",Le,ae,qe,ie,jt="На этот раз будет распечатываться валидационный лосс и метрики по окончанию каждой эпохи обучения. Напомним, что полученные значения точности и F1 могут не полностью совпадать с приведенными в примере из-за случайной инициализации слоев модели, но порядок должен быть примерно таким же.",Pe,pe,Jt="<code>Trainer</code> может работать с несколькими GPU или TPU и предоставляет множество опций, например применение техники mixed-precision (установите <code>fp16 = True</code> в аргументах). Подробно об опциях мы поговорим чуть в Главе 10.",Se,re,ht="На этом введение в fine-tuning с использованием API <code>Trainer</code> подошло к концу. Пример того, как сделать это же для наиболее распространенных задач NLP мы рассмотрим в Главе 7, а сейчас взглянем на то, как реализовать то же самое на чистом PyTorch.",Ke,h,De,oe,Oe,ce,et;return j=new Xt({props:{fw:w[0]}}),g=new tt({props:{title:"Fine-tuning модели с использованием Trainer API",local:"fine-tuning-модели-с-использованием-trainer-api",headingTag:"h1"}}),k=new It({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ru/chapter3/section3.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ru/chapter3/section3.ipynb"}]}}),U=new Et({props:{id:"nvBXf7s7vTI"}}),Z=new $({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyUwQSUwQXJhd19kYXRhc2V0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQSUwQSUwQWRlZiUyMHRva2VuaXplX2Z1bmN0aW9uKGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVyKGV4YW1wbGUlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMjBleGFtcGxlJTVCJTIyc2VudGVuY2UyJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyh0b2tlbml6ZXIlM0R0b2tlbml6ZXIp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, DataCollatorWithPadding | |
| raw_datasets = load_dataset(<span class="hljs-string">"glue"</span>, <span class="hljs-string">"mrpc"</span>) | |
| checkpoint = <span class="hljs-string">"bert-base-uncased"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>): | |
| <span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">"sentence1"</span>], example[<span class="hljs-string">"sentence2"</span>], truncation=<span class="hljs-literal">True</span>) | |
| tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>) | |
| data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),v=new tt({props:{title:"Обучение",local:"обучение",headingTag:"h3"}}),W=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBdHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUyMnRlc3QtdHJhaW5lciUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments | |
| training_args = TrainingArguments(<span class="hljs-string">"test-trainer"</span>)`,wrap:!1}}),J=new Gt({props:{$$slots:{default:[Vt]},$$scope:{ctx:w}}}),H=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification | |
| model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)`,wrap:!1}}),I=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMHRyYWluaW5nX2FyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZGF0YV9jb2xsYXRvciUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer | |
| trainer = Trainer( | |
| model, | |
| training_args, | |
| train_dataset=tokenized_datasets[<span class="hljs-string">"train"</span>], | |
| eval_dataset=tokenized_datasets[<span class="hljs-string">"validation"</span>], | |
| data_collator=data_collator, | |
| tokenizer=tokenizer, | |
| )`,wrap:!1}}),V=new $({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),x=new tt({props:{title:"Валидация",local:"валидация",headingTag:"h3"}}),N=new $({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjB0cmFpbmVyLnByZWRpY3QodG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCklMEFwcmludChwcmVkaWN0aW9ucy5wcmVkaWN0aW9ucy5zaGFwZSUyQyUyMHByZWRpY3Rpb25zLmxhYmVsX2lkcy5zaGFwZSk=",highlighted:`predictions = trainer.predict(tokenized_datasets[<span class="hljs-string">"validation"</span>]) | |
| <span class="hljs-built_in">print</span>(predictions.predictions.shape, predictions.label_ids.shape)`,wrap:!1}}),Q=new $({props:{code:"KDQwOCUyQyUyMDIpJTIwKDQwOCUyQyk=",highlighted:'(<span class="hljs-number">408</span>, <span class="hljs-number">2</span>) (<span class="hljs-number">408</span>,)',wrap:!1}}),P=new $({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBcHJlZHMlMjAlM0QlMjBucC5hcmdtYXgocHJlZGljdGlvbnMucHJlZGljdGlvbnMlMkMlMjBheGlzJTNELTEp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| preds = np.argmax(predictions.predictions, axis=-<span class="hljs-number">1</span>)`,wrap:!1}}),K=new $({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQW1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEcHJlZHMlMkMlMjByZWZlcmVuY2VzJTNEcHJlZGljdGlvbnMubGFiZWxfaWRzKQ==",highlighted:`<span class="hljs-keyword">import</span> evaluate | |
| metric = evaluate.load(<span class="hljs-string">"glue"</span>, <span class="hljs-string">"mrpc"</span>) | |
| metric.compute(predictions=preds, references=predictions.label_ids)`,wrap:!1}}),D=new $({props:{code:"JTdCJ2FjY3VyYWN5JyUzQSUyMDAuODU3ODQzMTM3MjU0OTAxOSUyQyUyMCdmMSclM0ElMjAwLjg5OTY1Mzk3OTIzODc1NDIlN0Q=",highlighted:'{<span class="hljs-string">'accuracy'</span>: <span class="hljs-number">0.8578431372549019</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">0.8996539792387542</span>}',wrap:!1}}),te=new $({props:{code:"ZGVmJTIwY29tcHV0ZV9tZXRyaWNzKGV2YWxfcHJlZHMpJTNBJTBBJTIwJTIwJTIwJTIwbWV0cmljJTIwJTNEJTIwZXZhbHVhdGUubG9hZCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEElMjAlMjAlMjAlMjBsb2dpdHMlMkMlMjBsYWJlbHMlMjAlM0QlMjBldmFsX3ByZWRzJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjBucC5hcmdtYXgobG9naXRzJTJDJTIwYXhpcyUzRC0xKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMG1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEcHJlZGljdGlvbnMlMkMlMjByZWZlcmVuY2VzJTNEbGFiZWxzKQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">eval_preds</span>): | |
| metric = evaluate.load(<span class="hljs-string">"glue"</span>, <span class="hljs-string">"mrpc"</span>) | |
| logits, labels = eval_preds | |
| predictions = np.argmax(logits, axis=-<span class="hljs-number">1</span>) | |
| <span class="hljs-keyword">return</span> metric.compute(predictions=predictions, references=labels)`,wrap:!1}}),se=new $({props:{code:"dHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUyMnRlc3QtdHJhaW5lciUyMiUyQyUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiklMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMiklMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMHRyYWluaW5nX2FyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZGF0YV9jb2xsYXRvciUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEElMjAlMjAlMjAlMjBjb21wdXRlX21ldHJpY3MlM0Rjb21wdXRlX21ldHJpY3MlMkMlMEEp",highlighted:`training_args = TrainingArguments(<span class="hljs-string">"test-trainer"</span>, evaluation_strategy=<span class="hljs-string">"epoch"</span>) | |
| model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>) | |
| trainer = Trainer( | |
| model, | |
| training_args, | |
| train_dataset=tokenized_datasets[<span class="hljs-string">"train"</span>], | |
| eval_dataset=tokenized_datasets[<span class="hljs-string">"validation"</span>], | |
| data_collator=data_collator, | |
| tokenizer=tokenizer, | |
| compute_metrics=compute_metrics, | |
| )`,wrap:!1}}),ae=new $({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:'trainer.trai<span class="hljs-meta">n</span>()',wrap:!1}}),h=new Gt({props:{$$slots:{default:[Bt]},$$scope:{ctx:w}}}),oe=new zt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter3/3.mdx"}}),{c(){r=i("meta"),T=n(),b=i("p"),y=n(),c(j.$$.fragment),de=n(),c(g.$$.fragment),me=n(),c(k.$$.fragment),Me=n(),c(U.$$.fragment),fe=n(),_=i("p"),_.innerHTML=lt,ue=n(),G=i("p"),G.textContent=st,be=n(),c(Z.$$.fragment),$e=n(),c(v.$$.fragment),Te=n(),R=i("p"),R.innerHTML=nt,ye=n(),c(W.$$.fragment),je=n(),c(J.$$.fragment),Je=n(),C=i("p"),C.innerHTML=at,he=n(),c(H.$$.fragment),we=n(),F=i("p"),F.innerHTML=it,ge=n(),E=i("p"),E.innerHTML=pt,ke=n(),c(I.$$.fragment),Ue=n(),X=i("p"),X.innerHTML=rt,_e=n(),z=i("p"),z.innerHTML=ot,Ge=n(),c(V.$$.fragment),Ze=n(),B=i("p"),B.textContent=ct,ve=n(),Y=i("ol"),Y.innerHTML=dt,Re=n(),c(x.$$.fragment),We=n(),A=i("p"),A.innerHTML=mt,Ce=n(),c(N.$$.fragment),He=n(),c(Q.$$.fragment),Fe=n(),L=i("p"),L.innerHTML=Mt,Ee=n(),q=i("p"),q.innerHTML=ft,Ie=n(),c(P.$$.fragment),Xe=n(),S=i("p"),S.innerHTML=ut,ze=n(),c(K.$$.fragment),Ve=n(),c(D.$$.fragment),Be=n(),O=i("p"),O.innerHTML=bt,Ye=n(),ee=i("p"),ee.innerHTML=$t,xe=n(),c(te.$$.fragment),Ae=n(),le=i("p"),le.innerHTML=Tt,Ne=n(),c(se.$$.fragment),Qe=n(),ne=i("p"),ne.innerHTML=yt,Le=n(),c(ae.$$.fragment),qe=n(),ie=i("p"),ie.textContent=jt,Pe=n(),pe=i("p"),pe.innerHTML=Jt,Se=n(),re=i("p"),re.innerHTML=ht,Ke=n(),c(h.$$.fragment),De=n(),c(oe.$$.fragment),Oe=n(),ce=i("p"),this.h()},l(e){const t=Ht("svelte-u9bgzb",document.head);r=p(t,"META",{name:!0,content:!0}),t.forEach(l),T=a(e),b=p(e,"P",{}),Ut(b).forEach(l),y=a(e),d(j.$$.fragment,e),de=a(e),d(g.$$.fragment,e),me=a(e),d(k.$$.fragment,e),Me=a(e),d(U.$$.fragment,e),fe=a(e),_=p(e,"P",{"data-svelte-h":!0}),o(_)!=="svelte-1ydyfc5"&&(_.innerHTML=lt),ue=a(e),G=p(e,"P",{"data-svelte-h":!0}),o(G)!=="svelte-zddvdi"&&(G.textContent=st),be=a(e),d(Z.$$.fragment,e),$e=a(e),d(v.$$.fragment,e),Te=a(e),R=p(e,"P",{"data-svelte-h":!0}),o(R)!=="svelte-189hckl"&&(R.innerHTML=nt),ye=a(e),d(W.$$.fragment,e),je=a(e),d(J.$$.fragment,e),Je=a(e),C=p(e,"P",{"data-svelte-h":!0}),o(C)!=="svelte-g2bimy"&&(C.innerHTML=at),he=a(e),d(H.$$.fragment,e),we=a(e),F=p(e,"P",{"data-svelte-h":!0}),o(F)!=="svelte-1fl1q8l"&&(F.innerHTML=it),ge=a(e),E=p(e,"P",{"data-svelte-h":!0}),o(E)!=="svelte-1s3gapf"&&(E.innerHTML=pt),ke=a(e),d(I.$$.fragment,e),Ue=a(e),X=p(e,"P",{"data-svelte-h":!0}),o(X)!=="svelte-1jzisoh"&&(X.innerHTML=rt),_e=a(e),z=p(e,"P",{"data-svelte-h":!0}),o(z)!=="svelte-159l1wi"&&(z.innerHTML=ot),Ge=a(e),d(V.$$.fragment,e),Ze=a(e),B=p(e,"P",{"data-svelte-h":!0}),o(B)!=="svelte-9n8hhe"&&(B.textContent=ct),ve=a(e),Y=p(e,"OL",{"data-svelte-h":!0}),o(Y)!=="svelte-1l6i09g"&&(Y.innerHTML=dt),Re=a(e),d(x.$$.fragment,e),We=a(e),A=p(e,"P",{"data-svelte-h":!0}),o(A)!=="svelte-w4t8m7"&&(A.innerHTML=mt),Ce=a(e),d(N.$$.fragment,e),He=a(e),d(Q.$$.fragment,e),Fe=a(e),L=p(e,"P",{"data-svelte-h":!0}),o(L)!=="svelte-185f6i7"&&(L.innerHTML=Mt),Ee=a(e),q=p(e,"P",{"data-svelte-h":!0}),o(q)!=="svelte-flcsdp"&&(q.innerHTML=ft),Ie=a(e),d(P.$$.fragment,e),Xe=a(e),S=p(e,"P",{"data-svelte-h":!0}),o(S)!=="svelte-n04ftp"&&(S.innerHTML=ut),ze=a(e),d(K.$$.fragment,e),Ve=a(e),d(D.$$.fragment,e),Be=a(e),O=p(e,"P",{"data-svelte-h":!0}),o(O)!=="svelte-1j9axbb"&&(O.innerHTML=bt),Ye=a(e),ee=p(e,"P",{"data-svelte-h":!0}),o(ee)!=="svelte-ap2krs"&&(ee.innerHTML=$t),xe=a(e),d(te.$$.fragment,e),Ae=a(e),le=p(e,"P",{"data-svelte-h":!0}),o(le)!=="svelte-ll5fb5"&&(le.innerHTML=Tt),Ne=a(e),d(se.$$.fragment,e),Qe=a(e),ne=p(e,"P",{"data-svelte-h":!0}),o(ne)!=="svelte-1l8jjkk"&&(ne.innerHTML=yt),Le=a(e),d(ae.$$.fragment,e),qe=a(e),ie=p(e,"P",{"data-svelte-h":!0}),o(ie)!=="svelte-1yj6bqb"&&(ie.textContent=jt),Pe=a(e),pe=p(e,"P",{"data-svelte-h":!0}),o(pe)!=="svelte-6ncnfr"&&(pe.innerHTML=Jt),Se=a(e),re=p(e,"P",{"data-svelte-h":!0}),o(re)!=="svelte-ozav2a"&&(re.innerHTML=ht),Ke=a(e),d(h.$$.fragment,e),De=a(e),d(oe.$$.fragment,e),Oe=a(e),ce=p(e,"P",{}),Ut(ce).forEach(l),this.h()},h(){_t(r,"name","hf:doc:metadata"),_t(r,"content",xt)},m(e,t){Ft(document.head,r),s(e,T,t),s(e,b,t),s(e,y,t),m(j,e,t),s(e,de,t),m(g,e,t),s(e,me,t),m(k,e,t),s(e,Me,t),m(U,e,t),s(e,fe,t),s(e,_,t),s(e,ue,t),s(e,G,t),s(e,be,t),m(Z,e,t),s(e,$e,t),m(v,e,t),s(e,Te,t),s(e,R,t),s(e,ye,t),m(W,e,t),s(e,je,t),m(J,e,t),s(e,Je,t),s(e,C,t),s(e,he,t),m(H,e,t),s(e,we,t),s(e,F,t),s(e,ge,t),s(e,E,t),s(e,ke,t),m(I,e,t),s(e,Ue,t),s(e,X,t),s(e,_e,t),s(e,z,t),s(e,Ge,t),m(V,e,t),s(e,Ze,t),s(e,B,t),s(e,ve,t),s(e,Y,t),s(e,Re,t),m(x,e,t),s(e,We,t),s(e,A,t),s(e,Ce,t),m(N,e,t),s(e,He,t),m(Q,e,t),s(e,Fe,t),s(e,L,t),s(e,Ee,t),s(e,q,t),s(e,Ie,t),m(P,e,t),s(e,Xe,t),s(e,S,t),s(e,ze,t),m(K,e,t),s(e,Ve,t),m(D,e,t),s(e,Be,t),s(e,O,t),s(e,Ye,t),s(e,ee,t),s(e,xe,t),m(te,e,t),s(e,Ae,t),s(e,le,t),s(e,Ne,t),m(se,e,t),s(e,Qe,t),s(e,ne,t),s(e,Le,t),m(ae,e,t),s(e,qe,t),s(e,ie,t),s(e,Pe,t),s(e,pe,t),s(e,Se,t),s(e,re,t),s(e,Ke,t),m(h,e,t),s(e,De,t),m(oe,e,t),s(e,Oe,t),s(e,ce,t),et=!0},p(e,[t]){const wt={};t&1&&(wt.fw=e[0]),j.$set(wt);const gt={};t&2&&(gt.$$scope={dirty:t,ctx:e}),J.$set(gt);const kt={};t&2&&(kt.$$scope={dirty:t,ctx:e}),h.$set(kt)},i(e){et||(M(j.$$.fragment,e),M(g.$$.fragment,e),M(k.$$.fragment,e),M(U.$$.fragment,e),M(Z.$$.fragment,e),M(v.$$.fragment,e),M(W.$$.fragment,e),M(J.$$.fragment,e),M(H.$$.fragment,e),M(I.$$.fragment,e),M(V.$$.fragment,e),M(x.$$.fragment,e),M(N.$$.fragment,e),M(Q.$$.fragment,e),M(P.$$.fragment,e),M(K.$$.fragment,e),M(D.$$.fragment,e),M(te.$$.fragment,e),M(se.$$.fragment,e),M(ae.$$.fragment,e),M(h.$$.fragment,e),M(oe.$$.fragment,e),et=!0)},o(e){f(j.$$.fragment,e),f(g.$$.fragment,e),f(k.$$.fragment,e),f(U.$$.fragment,e),f(Z.$$.fragment,e),f(v.$$.fragment,e),f(W.$$.fragment,e),f(J.$$.fragment,e),f(H.$$.fragment,e),f(I.$$.fragment,e),f(V.$$.fragment,e),f(x.$$.fragment,e),f(N.$$.fragment,e),f(Q.$$.fragment,e),f(P.$$.fragment,e),f(K.$$.fragment,e),f(D.$$.fragment,e),f(te.$$.fragment,e),f(se.$$.fragment,e),f(ae.$$.fragment,e),f(h.$$.fragment,e),f(oe.$$.fragment,e),et=!1},d(e){e&&(l(T),l(b),l(y),l(de),l(me),l(Me),l(fe),l(_),l(ue),l(G),l(be),l($e),l(Te),l(R),l(ye),l(je),l(Je),l(C),l(he),l(we),l(F),l(ge),l(E),l(ke),l(Ue),l(X),l(_e),l(z),l(Ge),l(Ze),l(B),l(ve),l(Y),l(Re),l(We),l(A),l(Ce),l(He),l(Fe),l(L),l(Ee),l(q),l(Ie),l(Xe),l(S),l(ze),l(Ve),l(Be),l(O),l(Ye),l(ee),l(xe),l(Ae),l(le),l(Ne),l(Qe),l(ne),l(Le),l(qe),l(ie),l(Pe),l(pe),l(Se),l(re),l(Ke),l(De),l(Oe),l(ce)),l(r),u(j,e),u(g,e),u(k,e),u(U,e),u(Z,e),u(v,e),u(W,e),u(J,e),u(H,e),u(I,e),u(V,e),u(x,e),u(N,e),u(Q,e),u(P,e),u(K,e),u(D,e),u(te,e),u(se,e),u(ae,e),u(h,e),u(oe,e)}}}const xt='{"title":"Fine-tuning модели с использованием Trainer API","local":"fine-tuning-модели-с-использованием-trainer-api","sections":[{"title":"Обучение","local":"обучение","sections":[],"depth":3},{"title":"Валидация","local":"валидация","sections":[],"depth":3}],"depth":1}';function At(w,r,T){let b="pt";return Rt(()=>{const y=new URLSearchParams(window.location.search);T(0,b=y.get("fw")||"pt")}),[b]}class Ot extends Wt{constructor(r){super(),Ct(this,r,At,Yt,vt,{})}}export{Ot as component}; | |
Xet Storage Details
- Size:
- 29.5 kB
- Xet hash:
- de1d4e89d3061d1c7be4133b6bbdb0a332495882ab85e74e968937fa4c8c1bb7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.