8-900-374-94-44
[email protected]
Slide Image
Меню

Тюнинг краза фото: Тюнинг советских грузовиков КрАЗ

Тюнинг советских грузовиков КрАЗ

Нынче КрАЗов на дорогах уже совсем мало осталось, а лет 10-20 назад, когда были сделаны большинство из этих фото, старые кременчугские грузовики еще вовсю использовались даже на дальнем бое.

Вот, например: 90-е годы, частный питерский КрАЗ-257Б привез доски в Москву (фото А.Новикова).

К деревянной кабине пристроен самодельный спальник, установлены доп. фары, просматривается неродной топливный бак, к правой стойке прикреплен камазовский воздухозаборник. Интересно теперь посчитать экономику тех перевозок – при «максималке» порядка 60 км/ч и расходе под полтинник…

А этот КрАЗ-257Б, переделанный под перевозку 20-футовых контейнеров, дожил до конца нулевых: фотка сделана в питерском порту Максом Чернявским в 2007 году.

Обратите внимание на самодельный «спальник»: сделано с претензией на дезигн! ))

А вот еще один суровый дальнобойщик с деревянной кабиной, да еще на основе «лаптежника» КрАЗ-255Б: его негабаритная ширина в начале девяностых еще никого не волновала.

Машина со ставропольской регистрацией снята Новиковым где-то в Москве. Суровый тюнинг: самодельный спальник, самодельный топливный бак, подвешенный на цепях и тяжеленный контейнер вместо кузова-фургона, съедающий добрую половину грузоподъемности шасси: зато груз целее будет…

Когда на «лаптежников» начались гонения за негабарит, их начали массово переделывать под обычную дорожную ошиновку.

Вот как раз такой переделанный КрАЗ-255В в Горном Алтае. Самодельный спальник наличествует )) Фотка Дениса Дементьева, 2008 г.

Чем был этот ульяновский дальнобойщик до глобальной переделки – гадать бесполезно, надо документы глядеть. Мог быть даже самосвалом.

Как бы то ни было, «хвост» ему изрядно купировали, переделав из 6х4 в 4х2, примастырили спальник, самодельные баки, чужой бампер с доп. фарами. Передний мост заменен на старый мазовский, задний – на рабовскую «планетарку». Фотка сделана Артемом Коноваловым в мае 2006 г.

Еще одна фотка от Артема – снова КрАЗ-«деревяшка», переделанный в седельник 4х2.

Над кабиной тут, правда, поработали более знатно: крыша поднята, сзади пристроен высокий спальный модуль, сделан самопальный бампер-«отвал» и верхний выхлоп. Фары, по-моему, от «Оки». И еще, кажется мне, что фотка этой машины лет двадцать назад мелькала в «Авторевю», когда та еще печаталась на простой газетной бумаге…

А это – пример нижегородского тюнинга. Фотка Олега Чалкова, 2005 год.

Исходник тут тоже был КрАЗ-«деревяшка», о чем наглядно свидетельствует старый передний мост. С этого ракурса не видно, на что заменили заднюю тележку: ступичных редукторов там нет, так что скорее всего от КамАЗа или «сто тридцать третьего» ЗИЛа. Кабина тут вообще самодельная, собранная с применением деталей от ГАЗ-66 и переделанного капота от КрАЗ-250

Довольно распространенный в прошлом вариант тюнинга КрАЗов – замена родной деревянной кабины на цельнометаллическую от Урала: вставала аки родная!

А этот КрАЗ «прокачали» на Кубе: вместо родной деревянной кабины, съеденной термитами, приделали металлическую кабинку от какого-то «американца»

Этот «лаптежник» сделали году в 2008-м на самом КрАЗе для использования в качестве шоу-мобиля на выставках.

Помню, что народ с ним фотографировался очень охотно! Здесь он на автосалоне в Киеве заснят Димой Гладким

Видимо, тоже очень старый КрАЗ на самом деле: крылья характерной формы выдают, что за основу взята кабина еще от 250-го.

Спальный отсек и высокая крыша – самопал, мосты заменены, бампер от СуперМАЗа. Фото Макса Чернявского, март 2007 г.

А это КрАЗ-6444 с родной удлиненной спальной кабиной, к которой хозяин приколхозил высокую крышу.

Суровая контейнеровозная сцепка из Твери на улицах Питера (Макс Чернявский, март 2007 г.).

КрАЗу нарастили кабину и поменяли тележку, а прицеп изначально был двухосным

Питерский тягач 4х2. Рецепт уже стандартный: доработана кабина, заменены мосты, переделаны баки… Фото Макса Чернявского, апрель 2006 г.

Ну, эту машину многие знают: СуперКрАЗ Роберта Ервандяна из Пскова.

Даже говорить ничего не буду, в «Авторевю» про него была огромная статья в свое время. Фотка снова от Макса Чернявского

А этот КрАЗ примечателен не только переделанной кабиной, но и своей общей длиной.

Там же еще на фото виднеется дышло прицепа – и, сдается мне, что суммарный габарит автопоезда окажется… не в габарите… Неужели 10 лет назад ему еще удавалось так достаточно спокойно ездить?! Фотка Артема Коновалова

Самосвальщикам тоже хочется комфорта ))

КрАЗ-6510 с неродной спальной кабиной с надстроенной высокой крышей и кузовом, к которому наварили дополнительные надставки, в 1,5 раза увеличив объем. Фотка Александра Говорухи

А вот вариант тюнинга из Беларуси ))

Снова высокая крыша и кузов, сваренный из двух стандартных. Фотка по-моему Сергея Липского

Ну и в довершение темы, для пущего колориту, так сказать, пара картинок других наших переделанных «капотников»:

Вот это дизельное дальнобойное чудище когда-то было бензиновым Уралом-375

А вот этот «американец» с «гофроспалкой» переделан из ЗИЛ-133Г4.

Фотка, сделана в июне 2009-го в Туле

Источник

Бортовой грузовик на шасси КрАЗ-250

Сибирский «тюнинг» КрАЗа

С. Ионес, фото Н. Селецкого

Участвовать в объявленном журналом конкурсе самодельных грузовиков решил и уроженец Усть-Кута Иркутской области Назар Селецкий. Его отец Василий Селецкий работает водителем в далеком сибирском городе. Несколько лет назад Василий Тарасович построил для себя бортовой грузовик на шасси КрАЗ-250.

Московскому водителю трудно представить, в каких условиях вынужден работать его коллега из сибирской глубинки. Про жестокие морозы, бесконечную зиму и очень короткое лето просто говорить не будем. Вместо дорог с асфальтовым покрытием – грунтовки, каменистые грейдеры и зимники. Расстояния, которые приходится преодолевать за обычный рейс, исчисляются сотнями километров. Подъемы и спуски растягиваются на сотни метров и даже на километры. Тяжелая техника в почете: выгодно возить за один рейс максимально возможный объем груза.

Первым собственным грузовиком Василия Тарасовича был списанный с автобазы серийный самосвал КрАЗ-256. Со временем он перестал устраивать владельца. Спрос на перевозку морских контейнеров и сортимента в Усть-Куте оказался выше, чем на доставку сыпучих грузов. Возить 6-метровый сортимент в кузове самосвала крайне неудобно, а морские контейнеры – невозможно.

Вероятно, Селецкий мог приобрести серийный бортовой грузовик или седельный тягач с полуприцепом. Но обстоятельства сложились иначе. Василий Тарасович купил доступный по цене аварийный автомобиль и восстановил его, попутно многое изменив.

Иногда человек ищет себе машину и покупает подходящий экземпляр. Но бывает и так, что автомобиль как будто сам находит нового владельца: однажды вам кто-то неожиданно предложит купить машину, соответствующую вашим запросам, а главное, представляющую выгодное сочетание цены и качества.

Купленной «по случаю» машиной стал кран на шасси КрАЗ-250, перевернувшийся по вине крановщика при подъеме груза. Краны, как и многие специальные автомобили, медленно «набирают» свои тысячи километров пробега. Их перегоняют с одной стройплощадки на другую, на относительно небольшие расстояния, а в основное время они работают , стоя на месте. Поэтому агрегаты шасси долго остаются в отличном состоянии.

За небольшие деньги Селецкий получил относительно «свежее» шасси, способное еще долго ездить, не доставляя проблем, плюс усиленная, как у любого крана, рама. На демонтированную крановую установку быстро нашелся покупатель, и появились деньги, необходимые для дальнейшей реконструкции машины. Поврежденную кабину Селецкий решил восстанавливать не «в оригинале», а переделать в соответствии со спецификой будущей работы. В тысячекилометровых рейсах кабина со «спальником» – отнюдь не роскошь. Владевший навыками кузовного ремонта хозяин занялся постройкой спального отсека.

В нашем журнале был рассказ о КрАЗе с самодельным «спальником». Водители из подмосковного города Электросталь Вячеслав Карпушенков и Алексей Шепелев пристроили сзади к кабине КрАЗ-250 спальный отсек прямоугольной формы. Штатную заднюю стенку кабины удалили совсем. КрАЗ внешне стал похож на американский магистральный тягач. В. Селецкий пошел другим путем. Он приобрел вторую кабину и из двух сделал одну, удлиненную на 70 см. От первой остались нижняя часть, моторный щит, капот с облицовкой, не пострадавшая при аварии дверь. От второй кабины в дело пошли «небитые» части: задняя стенка, проем ветрового стекла, вторая дверь. Из двух днищ получилось одно длинное. Боковины «спальника» пришлось выгибать из стального листа, повторяя форму панелей дверей – получилось как у других отечественных грузовиков, в семейство которых входят две кабины, короткая «дневная» и длинная – «спальная». Крыша от крана не годилась, и сварить длинную крышу из двух «кразовских» не получилось. Верхнюю панель Селецкий варил из крыш двух кабин от списанных «бамовских» самосвалов Magirus Deutz. А вентиляционный люк «с мясом» взят от кабины КамАЗа. Крышу создатель грузовика сделал покатую, задний край намного выше переднего. По сравнению с обычным КрАЗом передний край поднят на 30 см, а задний – на 70 см. С таким наклоном обычно делают обтекатели. «Спальник» получился высокий и просторный. Разместиться на ночлег в нем могут человека четыре.

Сибирский водитель не мог не оснастить построенный «для себя» грузовик эффективной системой отопления кабины. Штатный отопитель, конечно, остался, но ему одному не обогреть просторное помещение. Вторая «печка», установленная под сиденьем, взята от Magirus. Дизель у немецкого грузовика с воздушным охлаждением, и отопитель забирает тепло от нагретого моторного масла, а не от воды или тосола. В сильный мороз этого недостаточно. Третьим, самым мощным источником тепла стал водяной радиатор больших размеров, установленный у задней стенки «спальника». Он связан с системой охлаждения двигателя. Неожиданная для автомобиля, работающего в Сибири, деталь – вентиляционные лючки на боковинах между капотом и дверьми. Их прорубают на кабинах автомобилей «южного» исполнения. У крана, от которого остались боковины, эти лючки почему-то были.

Подвеска кабины к раме потребовала доработки. Для тяжелой «спальной» кабины заводское крепление слабовато. Вспоминается, что грузовик из Электростали создатели оснастили амортизаторными стойками передней подвески ВАЗ-2108/09. Хозяин сибирского КрАЗа выполнил узел сопряжения иначе. На его машине кабину и раму связывают резинометаллические подушки, взятые из подвески двигателя чешского грузовика Tatra.

Объемные крылья «гражданского» КрАЗа (такие мы видели на машине Карпушенкова и Шепелева) Селецкий заменил более простыми «военными» от полноприводного КрАЗ-260. Водители на севере полагают, что такие крылья практичнее. Кстати, кременчугские грузовики новых выпусков завод комплектует именно «260-ми» крыльями. На данной машине крылья дополнительно усилены: с боковинами их связывают прутья-укосины.

Платформа с не очень высокими бортами не самодельная. С первого взгляда видно, что это серийное заводское изделие. Ее сняли с четырехосного шасси военного вездехода. Даже цвет хаки остался! Длины такого кузова хватает для 6-метровых бревен и труб, вдоль бортов легко устанавливаются четыре съемные стойки, играющие роль коников. Тогда машина превращается в полноценный лесовоз или трубовоз.

Чтобы установить такую платформу на шасси КрАЗа, понадобилось удлинить на один метр задний свес рамы. Это далеко не единственное отличие шасси машины Селецкого от серийной модели.

Задняя подвеска усилена. В каждую рессору добавлено по три листа. Рессоры стали длиннее стандартных, поэтому пришлось выковывать новые стремянки, изготовлять новые крепежные гайки. По мнению хозяина машины, мощности серийных амортизаторов передней подвески не хватало. Их место заняли доработанные гидравлические цилиндры со штоками – рабочие цилиндры усилителя руля грузовика «Урал». Диаметр отверстий, просверленных в поршнях, специально рассчитан на циркуляцию масла, оптимальную для эффективного гашения колебаний.

Гидроусилитель руля взят с распространенного в Сибири японского лесовоза Komatsu. От этой же машины использован усилитель привода сцепления. По словам Назара, усилие на педали сцепления теперь не больше, чем в «Жигулях».

От трансмиссионного стояночного тормоза хозяин грузовика отказался. Вместо него на третьем мосту появились энергоаккумуляторы от КамАЗа.

Необходимым дополнительным оборудованием шасси стала лебедка, установленная в заднем свесе под платформой. В той местности, где работает машина, немало участков тяжелого бездорожья. Грузовики часто застревают, и помощи ждать неоткуда. Лебедка не раз вытаскивала КрАЗ. С ее помощью Селецкому приходилось выручать других водителей.

Лебедка заимствована от полноприводного КамАЗ-4310. Вал отбора мощности раздаточной коробки и лебедку связывает сильно удлиненный карданный вал от ГАЗ-53 с промежуточной опорой, установленной на поперечину рамы. Так как вал проходит над рамой, опора перевернута. Трос лебедки проходит между двумя роликами.

Лебедкой пользовались не только чтобы вытащить застрявшую машину. Она оказалась хорошим помощником, когда нужно погрузить что-либо тяжелое без помощи крана. Над лебедкой в днище платформы прорубили люк, а на решетку за кабиной поставили блок, через который перекидывается трос.

Безнаддувный двигатель ЯМЗ-238 не переделывали. Единственное дополнение – второй датчик давления масла. Для него в масляную магистраль пришлось врезать штуцер. В кабине появился дополнительный манометр. Интересно, что лютой сибирской зимой в системе охлаждения двигателя используется вода. Когда на улице –40…–50 °С, прогреть антифриз в моторе почти невозможно. На время стоянки воду сливают, а при пуске мотора заливают нагретую до «рабочих» 80…90 °С.

Из других доработок следует отметить два самодельных топливных бака из листовой стали по 880 л каждый. Для обеспечения жесткости изнутри они разделены двумя перегородками. А под платформой, сзади, появились внушительные ящики для инструмента и запчастей.

Модернизированный кременчугский грузовик верой и правдой служит хозяину уже не первый год. Это значит, что машина успешно прошла испытания настоящими морозами и сотнями тысяч километров, по очень сложным дорогам.

Please enable JavaScript to view the comments powered by Disqus.

Kraze Wheels » Тюнингованный chevrolet camaro

Добро пожаловать на выравнивание изображения! Лучший способ продемонстрировать приливы и отливы различных вариантов позиционирования изображений — это уютно расположить их среди океана слов. Берем весло и начинаем.

Что касается выравнивания, следует отметить, что пользователи могут выбирать из вариантов Нет , Слева , Справа , и Центр . Кроме того, они также получают опции Thumbnail 9.0006 , Средний , Большой и Полноразмерный .

Изображение выше имеет по центру .

Остальная часть этого абзаца является заполнителем, чтобы увидеть, как текст обтекает изображение 150×150, которое выровнено по левому краю .

Как вы можете видеть, должно быть пространство сверху, снизу и справа от изображения. Текст не должен расползаться по изображению. Ползать просто не правильно. Изображениям тоже нужна передышка. Пусть они говорят, как вы слова. Пусть они делают свою работу без каких-либо хлопот от текста. Еще примерно в одном предложении мы увидим, что текст перемещается справа от изображения вниз под изображением в плавном переходе. Опять же, позволив делать это. Миссия выполнена!

А теперь очень большое изображение . Он также имеет без выравнивания .

Изображение выше, несмотря на ширину 1200 пикселей, не должно выходить за пределы области содержимого. Он должен оставаться сдержанным без видимых нарушений потока контента.

А теперь мы собираемся сдвинуть все на выравнивание по правому краю . Опять же, должно быть достаточно места сверху, снизу и слева от изображения. Вы только посмотрите на него… Эй, парень! Способ раскачать эту правую сторону. Меня не волнует, что говорит изображение, выровненное по левому краю, ты выглядишь великолепно. Не позволяйте никому говорить вам иначе.

Через некоторое время вы должны увидеть, как текст начинает оборачиваться под выровненным по правому краю изображением и хорошо ложится. Там все еще должно быть много места, и все должно сидеть красиво. Ага… Просто так. Никогда еще не было так хорошо быть правым.

И как только вы подумали, что мы закончили, мы собираемся сделать их снова и снова с субтитрами!

Посмотрите на 580×300 и получите немного любви.

Изображение выше имеет по центру . В подписи также есть ссылка, просто чтобы посмотреть, не делает ли она что-нибудь необычное.

Маленький заголовок.

Остальная часть этого абзаца является заполнителем, чтобы увидеть, как текст обтекает изображение 150×150, которое выровнено по левому краю .

Как вы можете видеть, должно быть пространство сверху, снизу и справа от изображения. Текст не должен расползаться по изображению. Ползать просто не правильно. Изображениям тоже нужна передышка. Пусть они говорят, как вы слова. Пусть они делают свою работу без каких-либо хлопот от текста. Еще примерно в одном предложении мы увидим, что текст перемещается справа от изображения вниз под изображением в плавном переходе. Опять же, позволив делать это. Миссия выполнена!

А теперь очень большое изображение . Он также имеет без выравнивания .

Массивный комментарий к изображению для ваших глазных яблок.

Изображение выше, несмотря на ширину 1200 пикселей, не должно выходить за пределы области содержимого. Он должен оставаться сдержанным без видимых нарушений потока контента.

Приятно всегда быть правым.

А теперь мы собираемся сместить все на выравнивание по правому краю . Опять же, должно быть достаточно места сверху, снизу и слева от изображения. Вы только посмотрите на него… Эй, парень! Способ раскачать эту правую сторону. Меня не волнует, что говорит изображение, выровненное по левому краю, ты выглядишь великолепно. Не позволяйте никому говорить вам иначе.

Через некоторое время вы должны увидеть, как текст начинает оборачиваться под выровненным по правому краю изображением и хорошо ложится. Там все еще должно быть много места, и все должно сидеть красиво. Ага… Просто так. Никогда еще не было так хорошо быть правым.

Вот и все, йоу! Вы пережили бурные воды мировоззрения. Достижение выравнивания изображения разблокировано!

Классификация изображений посредством точной настройки с помощью EfficientNet

» Примеры кода / Компьютерное зрение / Классификация изображений посредством точной настройки с помощью EfficientNet

Автор: Исин Фу
Дата создания: 30.06.2020
Последнее изменение: 16.07.2020
Описание: Используйте EfficientNet с классификацией весов, предварительно обученной на изображениях.

Посмотреть в Colab Исходный код GitHub


Введение: что такое EfficientNet

EfficientNet, впервые представленный в Tan and Le, 2019 г. является одной из самых эффективных моделей (т.е. требует наименьшего количества FLOPS для вывода) который достигает современной точности на обоих imagenet и общая классификация изображений передают учебные задачи.

Самая маленькая базовая модель аналогична MnasNet, которая достиг почти SOTA со значительно меньшей моделью. Введя эвристический способ масштабировать модель, EfficientNet предоставляет семейство моделей (от B0 до B7), которые представляют хорошее сочетание эффективности и точности в различных масштабах. Такое масштабирование эвристика (составное масштабирование, подробности см. Тан и Ле, 2019) позволяет базовая модель, ориентированная на эффективность (B0), чтобы превзойти модели в любом масштабе, избегая при этом расширенный поиск по сетке гиперпараметров.

Сводка последних обновлений модели доступна по адресу здесь, где различные схемы расширения и подходы к полуконтролируемому обучению применяются для дальнейшего улучшить производительность imagenet моделей. Эти расширения модели можно использовать путем обновления весов без изменения архитектуры модели.


Варианты EfficientNet от B0 до B7

(В этом разделе приведены некоторые сведения о «составном масштабировании», и его можно пропустить если вас интересуют только модели)

На основании оригинальной бумаги у людей может быть впечатление, что EfficientNet представляет собой непрерывное семейство моделей, созданных произвольно выбор коэффициента масштабирования в качестве уравнения (3) статьи. Однако выбор разрешения, глубина и ширина также ограничены многими факторами:

  • Разрешение: Разрешения, не кратные 8, 16 и т. д., вызывают заполнение нулями вблизи границ некоторых слоев, что тратит впустую вычислительные ресурсы. Особенно это относится к более мелким вариантов модели, поэтому входное разрешение для B0 и B1 выбрано равным 224 и 240.
  • Глубина и ширина: строительные блоки EfficientNet требуют, чтобы размер канала кратно 8.
  • Ограничение ресурсов: ограничение памяти может стать узким местом разрешения при глубине и ширина может еще увеличиться. В такой ситуации увеличение глубины и/или ширина, но сохранение разрешения может улучшить производительность.

В результате глубина, ширина и разрешение каждого варианта моделей EfficientNet подобраны вручную и доказали, что дают хорошие результаты, хотя они могут быть значительно от формулы составного масштабирования. Поэтому реализация keras (подробно описанная ниже) предоставляет только эти 8 моделей, от B0 до B7, вместо разрешения произвольного выбора параметров ширины/глубины/разрешения.


Реализация EfficientNet в Keras

Реализация EfficientNet от B0 до B7 поставляется с tf.keras начиная с TF2.3. К используйте EfficientNetB0 для классификации 1000 классов изображений из imagenet, запустите:

 из tensorflow.keras.applications import EfficientNetB0
модель = EfficientNetB0 (веса = 'imagenet')
 

Эта модель принимает входные изображения формы (224, 224, 3), и входные данные должны находиться в диапазоне [0, 255]. Нормализация включена как часть модели.

Поскольку для обучения EfficientNet на ImageNet требуется огромное количество ресурсов и несколько методов, которые не являются частью самой архитектуры модели. Отсюда и Керас реализация по умолчанию загружает предварительно обученные веса, полученные в результате обучения с Автодополнение.

Для базовых моделей от B0 до B7 форма ввода отличается. Вот список формы ввода ожидается для каждой модели:

Базовая модель разрешение
Эффективная сеть B0 224
EfficientNetB1 240
EfficientNetB2 260
EfficientNetB3 300
EfficientNetB4 380
EfficientNetB5 456
EfficientNetB6 528
EfficientNetB7 600

Когда модель предназначена для трансферного обучения, реализация Keras предоставляет возможность удалить верхние слои:

 model = EfficientNetB0(include_top=False, weights='imagenet')
 

Этот параметр исключает последний слой Dense , который превращает 1280 объектов в предпоследний слоя в предсказание 1000 классов ImageNet. Замена верхнего слоя на пользовательский Layers позволяет использовать EfficientNet в качестве экстрактора признаков в рабочем процессе трансферного обучения.

Еще один аргумент в конструкторе модели, на который стоит обратить внимание, это drop_connect_rate который управляет скорость отсева, отвечающая за стохастическую глубину. Этот параметр служит переключателем для дополнительной регуляризации при точной настройке, но не воздействовать на нагруженные веса. Например, если требуется более сильная регуляризация, попробуйте:

 model = EfficientNetB0(weights='imagenet', drop_connect_rate=0,4)
 

Значение по умолчанию — 0,2.


Пример: EfficientNetB0 для стэнфордских собак.

EfficientNet может решать широкий спектр задач классификации изображений. Это делает его хорошей моделью для трансферного обучения. В качестве сквозного примера мы покажем использование предварительно обученного EfficientNetB0 на Набор данных Стэнфордских собак.

 # IMG_SIZE определяется выбором модели EfficientNet
IMG_SIZE = 224
 

Настройка и загрузка данных

Для этого примера требуется TensorFlow 2.3 или выше.

Чтобы использовать TPU, среда выполнения TPU должна соответствовать текущему запущенному TensorFlow. версия. Если есть несоответствие, попробуйте:

 from cloud_tpu_client import Client
с = клиент ()
c.configure_tpu_version(tf.__version__, restart_type="всегда")
 
 импортировать тензорный поток как tf
пытаться:
    tpu = tf.distribute.cluster_resolver.TPUClusterResolver.connect()
    печать ("Устройство:", tpu.master())
    стратегия = tf.distribute.TPUStrategy(tpu)
кроме ValueError:
    print("Не подключен к среде выполнения TPU. Используется стратегия CPU/GPU")
    стратегия = tf.distribute.MirroredStrategy()
 
 Не подключен к среде выполнения TPU. Использование стратегии CPU/GPU
INFO:tensorflow:Использование MirroredStrategy с устройствами ('/job:localhost/replica:0/task:0/device:GPU:0',)
 

Загрузка данных

Здесь мы загружаем данные из tensorflow_datasets (далее ТФДС). Набор данных Stanford Dogs представлен в TFDS как stanford_dogs. Он содержит 20 580 изображений, принадлежащих 120 классам пород собак. (12 000 на обучение и 8 580 на тестирование).

Просто изменив dataset_name ниже, вы также можете попробовать этот блокнот для другие наборы данных в TFDS, такие как сифар10, сифар100, еда101, и т. д. Когда изображения намного меньше, чем размер ввода EfficientNet, мы можем просто повышать разрешение входных изображений. Это было показано в Тан и Ле, 2019 г.которые передают обучение результат лучше для увеличенного разрешения, даже если входные изображения остаются маленькими.

Для TPU: при использовании наборов данных TFDS, ведро GCS местоположение требуется для сохранения наборов данных. Например:

 tfds.load(dataset_name, data_dir="gs://example-bucket/datapath")
 

Кроме того, и текущая среда, и учетная запись службы TPU имеют надлежащий доступ к ведру. Кроме того, для небольших наборов данных вы можете попробовать загрузить данные в память и использовать tf. data.Dataset.from_tensor_slices() .

 импортировать наборы данных tensorflow_data как tfds
размер партии = 64
dataset_name = "stanford_dogs"
(ds_train, ds_test), ds_info = tfds.load(
    dataset_name, split=["train", "test"], with_info=True, as_supervised=True
)
NUM_CLASSES = ds_info.features["метка"].num_classes
 

Когда набор данных включает изображения разного размера, нам нужно изменить их размер в общий размер. Набор данных Stanford Dogs включает только изображения размером не менее 200 x 200. пикселей по размеру. Здесь мы изменяем размер изображений до входного размера, необходимого для EfficientNet.

 размер = (IMG_SIZE, IMG_SIZE)
ds_train = ds_train.map (лямбда-изображение, метка: (tf.image.resize (изображение, размер), метка))
ds_test = ds_test.map (лямбда-изображение, метка: (tf.image.resize (изображение, размер), метка))
 

Визуализация данных

Следующий код показывает первые 9 изображений с их метками.

 импортировать matplotlib. pyplot как plt
def format_label (метка):
    string_label = label_info.int2str(метка)
    вернуть string_label.split("-")[1]
label_info = ds_info.features["метка"]
для i (изображение, метка) в enumerate(ds_train.take(9)):
    топор = plt.subplot (3, 3, я + 1)
    plt.imshow(image.numpy().astype("uint8"))
    plt.title("{}".format(format_label(метка)))
    плт.ось("выкл")
 

Увеличение данных

Мы можем использовать API слоев предварительной обработки для увеличения изображения.

 из импорта tensorflow.keras.models Последовательный
из слоев импорта tensorflow.keras
img_augmentation = последовательный(
    [
        слои.RandomRotation (коэффициент = 0,15),
        слои.RandomTranslation(height_factor=0,1, width_factor=0,1),
        слои.RandomFlip(),
        слои.RandomContrast (коэффициент = 0,1),
    ],
    имя="img_аугментация",
)
 

Этот объект модели Sequential может использоваться как часть модель, которую мы позже построим, и как функцию для предварительной обработки данные перед вводом в модель. Использование их как функции делает легко визуализировать дополненные изображения. Здесь мы строим 9 примеров результата увеличения заданной фигуры.

 для изображения, метка в ds_train.take(1):
    для я в диапазоне (9):
        топор = plt.subplot (3, 3, я + 1)
        aug_img = img_augmentation (tf.expand_dims (изображение, ось = 0))
        plt.imshow(aug_img[0].numpy().astype("uint8"))
        plt.title("{}".format(format_label(метка)))
        плт.ось("выкл")
 

Подготовка входных данных

Как только мы убедимся, что входные данные и дополнения работают правильно, мы готовим набор данных для обучения. Размер входных данных изменен на равномерный. IMG_SIZE . Этикетки помещаются в один горячий (также известное как категориальное) кодирование. Набор данных пакетный.

Примечание: предварительная выборка и АВТОНАСТРОЙКА могут в некоторых случаях улучшиться производительность, но зависит от среды и конкретного используемого набора данных. См. это руководство для получения дополнительной информации о производительности конвейера данных.

 # Горячее/категориальное кодирование
def input_preprocess (изображение, метка):
    метка = tf.one_hot (метка, NUM_CLASSES)
    вернуть изображение, метка
ds_train = ds_train.map(
    input_preprocess, num_parallel_calls=tf.data.AUTOTUNE
)
ds_train = ds_train.batch(batch_size=batch_size, drop_remainder=True)
ds_train = ds_train.prefetch(tf.data.AUTOTUNE)
ds_test = ds_test.map(input_preprocess)
ds_test = ds_test.batch(batch_size=batch_size, drop_remainder=True)
 

Обучение модели с нуля

Мы строим EfficientNetB0 со 120 выходными классами, которые инициализируются с нуля:

Примечание: точность будет увеличиваться очень медленно и может привести к чрезмерному соответствию.

 из tensorflow.keras.applications import EfficientNetB0
со стратегией.scope():
    входы = слои. Ввод (форма = (IMG_SIZE, IMG_SIZE, 3))
    x = img_augmentation (входы)
    выходы = EfficientNetB0 (include_top = True, веса = нет, классы = NUM_CLASSES) (x)
    модель = tf. keras.Model (входы, выходы)
    модель.компилировать(
        оптимизатор = "адам", потеря = "categorical_crossentropy", metrics = ["точность"]
    )
модель.резюме()
эпохи = 40 # @param {тип: "слайдер", мин:10, макс:100}
hist = model.fit(ds_train, epochs=epochs, validation_data=ds_test, verbose=2)
 
 Модель: "functional_1"
_________________________________________________________________
Слой (тип) Выходная форма Параметр #
================================================== ===============
input_1 (InputLayer) [(Нет, 224, 224, 3)] 0
_________________________________________________________________
img_augmentation (Последовательно (Нет, 224, 224, 3) 0
_________________________________________________________________
Effectivenetb0 (Функциональный) (Нет, 120) 4203291
================================================== ===============
Всего параметров: 4 203 291
Обучаемые параметры: 4 161 268
Необучаемые параметры: 42 023
_________________________________________________________________
Эпоха 1/40
187/187 — 66 с — потеря: 4,9221 — точность: 0,0119 — val_loss: 4,9835 — val_accuracy: 0,0104
Эпоха 2/40
187/187 — 63 с — потеря: 4,5652 — точность: 0,0243 — val_loss: 5,1626 — val_accuracy: 0,0145
Эпоха 3/40
187/187 — 63 с — потеря: 4,4179 — точность: 0,0337 — val_loss: 4,7597 — val_accuracy: 0,0237
Эпоха 4/40
187/187 — 63 с — поражение: 4,2964 - точность: 0,0421 - значение_потери: 4,4028 - значение_точности: 0,0378
Эпоха 5/40
187/187 — 63 с — потеря: 4,1951 — точность: 0,0540 — val_loss: 4,3048 — val_accuracy: 0,0443
Эпоха 6/40
187/187 — 63 с — потеря: 4,1025 — точность: 0,0596 — val_loss: 4,1918 — val_accuracy: 0,0526
Эпоха 7/40
187/187 — 63 с — потеря: 4,0157 — точность: 0,0728 — val_loss: 4,1482 — val_accuracy: 0,0591
Эпоха 8/40
187/187 — 62 с — потеря: 3,9344 — точность: 0,0844 — val_loss: 4,1088 — val_accuracy: 0,0638
Эпоха 9/40
187/187 - 63 с - поражение: 3,8529- точность: 0,0951 - знач_потери: 4,0692 - знач_точность: 0,0770
Эпоха 10/40
187/187 — 63 с — потеря: 3,7650 — точность: 0,1040 — val_loss: 4,1468 — val_accuracy: 0,0719
Эпоха 11/40
187/187 — 63 с — потеря: 3,6858 — точность: 0,1185 — val_loss: 4,0484 — val_accuracy: 0,0913
Эпоха 12/40
187/187 — 63 с — потеря: 3,5942 — точность: 0,1326 — val_loss: 3,8047 — val_accuracy: 0,1072
Эпоха 13/40
187/187 — 63 с — потеря: 3,5028 — точность: 0,1447 — val_loss: 3,9513 — val_accuracy: 0,0933
Эпоха 14/40
187/187 — 63 с — поражение: 3,4295 - точность: 0,1604 - значение_потери: 3,7738 - значение_точности: 0,1220
Эпоха 15/40
187/187 — 63 с — потеря: 3,3410 — точность: 0,1735 — val_loss: 3,9104 — val_accuracy: 0,1104
Эпоха 16/40
187/187 — 63 с — потеря: 3,2511 — точность: 0,1890 — val_loss: 3,6904 — val_accuracy: 0,1264
Эпоха 17/40
187/187 — 63 с — потеря: 3,1624 — точность: 0,2076 — val_loss: 3,4026 — val_accuracy: 0,1769
Эпоха 18/40
187/187 — 63 с — потеря: 3,0825 — точность: 0,2229 — val_loss: 3,4627 — val_accuracy: 0,1744
Эпоха 19/40
187/187 — 63 с — потеря: 3,0041 — точность: 0,2355 — val_loss: 3,6061 — val_accuracy: 0,1542
Эпоха 20/40
187/187 - 64с - поражение: 2,8945 - точность: 0,2552 - значение_потери: 3,2769 - значение_точности: 0,2036
Эпоха 21/40
187/187 — 63 с — потеря: 2,8054 — точность: 0,2710 — val_loss: 3,5355 — val_accuracy: 0,1834
Эпоха 22/40
187/187 — 63 с — потеря: 2,7342 — точность: 0,2904 — val_loss: 3,3540 — val_accuracy: 0,1973
Эпоха 23/40
187/187 — 62 с — потеря: 2,6258 — точность: 0,3042 — val_loss: 3,2608 — val_accuracy: 0,2217
Эпоха 24/40
187/187 — 62 с — потеря: 2,5453 — точность: 0,3218 — val_loss: 3,4611 — val_accuracy: 0,1941
Эпоха 25/40
187/187 — 63 с — потеря: 2,4585 — точность: 0,3356 — val_loss: 3,4163 — val_accuracy: 0,2070
Эпоха 26/40
187/187 — 62 с — потеря: 2,3606 — точность: 0,3647 — val_loss: 3,2558 — val_accuracy: 0,2392
Эпоха 27/40
187/187 — 63 с — потеря: 2,2819 — точность: 0,3801 — val_loss: 3,3676 — val_accuracy: 0,2222
Эпоха 28/40
187/187 — 62 с — потеря: 2,2114 — точность: 0,3933 — val_loss: 3,6578 — val_accuracy: 0,2022
Эпоха 29/40
187/187 — 62 с — потеря: 2,0964 — точность: 0,4215 — val_loss: 3,5366 — val_accuracy: 0,2186
Эпоха 30/40
187/187 — 63 с — потеря: 1,9931 — точность: 0,4459 — val_loss: 3,5612 — val_accuracy: 0,2310
Эпоха 31/40
187/187 — 63 с — потеря: 1,8924 — точность: 0,4657 — val_loss: 3,4780 — val_accuracy: 0,2359Эпоха 32/40
187/187 — 63 с — потеря: 1,8095 — точность: 0,4874 — val_loss: 3,5776 — val_accuracy: 0,2403
Эпоха 33/40
187/187 — 63 с — потеря: 1,7126 — точность: 0,5086 — val_loss: 3,6865 — val_accuracy: 0,2316
Эпоха 34/40
187/187 — 63 с — потеря: 1,6117 — точность: 0,5373 — val_loss: 3,6419 — val_accuracy: 0,2513
Эпоха 35/40
187/187 — 63 с — потеря: 1,5532 — точность: 0,5514 — val_loss: 3,8050 — val_accuracy: 0,2415
Эпоха 36/40
187/187 — 63 с — потеря: 1,4479 — точность: 0,5809 — val_loss: 4,0113 — val_accuracy: 0,2299
Эпоха 37/40
187/187 — 62 с — потеря: 1,3885 — точность: 0,5939 — val_loss: 4,1262 — val_accuracy: 0,2158
Эпоха 38/40
187/187 — 63 с — потеря: 1,2979 — точность: 0,6217 — val_loss: 4,2519 — val_accuracy: 0,2344
Эпоха 39/40
187/187 — 62 с — потеря: 1,2066 — точность: 0,6413 — val_loss: 4,3924 — val_accuracy: 0,2169
Эпоха 40/40
187/187 — 62 с — потеря: 1,1348 — точность: 0,6618 — val_loss: 4,2216 — val_accuracy: 0,2374
 

Обучение модели происходит относительно быстро (занимает всего 20 секунд на эпоху на TPUv2, т. е. доступны на Colab). Может показаться, что просто обучить EfficientNet на любом набор данных нужен с нуля. Однако обучение EfficientNet на меньших наборах данных, особенно с более низким разрешением, таким как CIFAR-100, сталкивается со значительной проблемой переоснащение.

Следовательно, обучение с нуля требует очень тщательного выбора гиперпараметров и трудно найти подходящую регуляризацию. Это также было бы гораздо более требовательным к ресурсам. Построение графика обучения и проверки точности ясно дает понять, что точность проверки останавливается на низком уровне.

 импортировать matplotlib.pyplot как plt
определение plot_hist (хист):
    plt.plot(hist.history["точность"])
    plt.plot(hist.history["val_accuracy"])
    plt.title("точность модели")
    plt.ylabel("точность")
    plt.xlabel("эпоха")
    plt.legend(["поезд", "проверка"], loc="верхний левый")
    plt.show()
plot_hist(хист)
 


Перенос обучения из предварительно обученных весов

Здесь мы инициализируем модель с предварительно обученными весами ImageNet, и мы настраиваем его на нашем собственном наборе данных.

 по определению build_model (num_classes):
    входы = слои. Ввод (форма = (IMG_SIZE, IMG_SIZE, 3))
    x = img_augmentation (входы)
    модель = EfficientNetB0 (include_top = False, input_tensor = x, weights = "imagenet")
    # Заморозить предварительно обученные веса
    модель.trainable = Ложь
    # Восстановить вершину
    x = слои.GlobalAveragePooling2D(name="avg_pool")(model.output)
    x = слои.BatchNormalization()(x)
    top_dropout_rate = 0,2
    x = слои.Dropout(top_dropout_rate, name="top_dropout")(x)
    выходы = слои. Плотность (ЧИСЛО_КЛАССОВ, активация = "softmax", имя = "пред") (x)
    # Скомпилировать
    модель = tf.keras.Model (входы, выходы, имя = "EfficientNet")
    оптимизатор = tf.keras.optimizers.Adam (learning_rate = 1e-2)
    модель.компилировать(
        оптимизатор = оптимизатор, потеря = "categorical_crossentropy", metrics = ["точность"]
    )
    модель возврата
 

Первый шаг к переносу обучения — заморозить все слои и обучить только верхние слои. Для этого шага можно использовать относительно большую скорость обучения (1e-2). Обратите внимание, что точность проверки и потери обычно лучше, чем при обучении. точность и потери. Это потому, что регуляризация сильная, которая только подавляет показатели времени обучения.

Обратите внимание, что конвергенция может занять до 50 эпох в зависимости от выбора скорости обучения. Если бы слои увеличения изображения не были применяется, точность проверки может достигать только ~ 60%.

 со стратегией.scope():
    модель = build_model (num_classes = NUM_CLASSES)
эпохи = 25 # @param {тип: "слайдер", мин.:8, макс.:80}
hist = model.fit(ds_train, epochs=epochs, validation_data=ds_test, verbose=2)
plot_hist(хист)
 
 Эпоха 1/25
187/187 — 33 с — потеря: 3,5673 — точность: 0,3624 — val_loss: 1,0288 — val_accuracy: 0,6957
Эпоха 2/25
187/187 — 31 с — потеря: 1,8503 — точность: 0,5232 — val_loss: 0,8439 — val_accuracy: 0,7484
Эпоха 3/25
187/187 — 31 с — потеря: 1,5511 — точность: 0,5772 — val_loss: 0,7953 - val_accuracy: 0,7563
Эпоха 4/25
187/187 — 31 с — потеря: 1,4660 — точность: 0,5878 — val_loss: 0,8061 — val_accuracy: 0,7535
Эпоха 5/25
187/187 — 31 с — потеря: 1,4143 — точность: 0,6034 — val_loss: 0,7850 — val_accuracy: 0,7569
Эпоха 6/25
187/187 — 31 с — потеря: 1,4000 — точность: 0,6054 — val_loss: 0,7846 — val_accuracy: 0,7646
Эпоха 7/25
187/187 — 31 с — потеря: 1,3678 — точность: 0,6173 — val_loss: 0,7850 — val_accuracy: 0,7682
Эпоха 8/25
187/187 — 31 с — потеря: 1,3286 — точность: 0,6222 — val_loss: 0,8142 — val_accuracy: 0,7608
Эпоха 9/25
187/187 — 31 с — потеря: 1,3210 — точность: 0,6245 — val_loss: 0,7890 — val_accuracy: 0,7669
Эпоха 25/10
187/187 — 31 с — потеря: 1,3086 — точность: 0,6278 — val_loss: 0,8368 — val_accuracy: 0,7575
Эпоха 25/11
187/187 — 31 с — потеря: 1,2877 — точность: 0,6315 — val_loss: 0,8309 — val_accuracy: 0,7599
Эпоха 12/25
187/187 — 31 с — потеря: 1,2918 — точность: 0,6308 — val_loss: 0,8319 — val_accuracy: 0,7535
Эпоха 13/25
187/187 — 31 с — потеря: 1,2738 — точность: 0,6373 — val_loss: 0,8567 — val_accuracy: 0,7576
Эпоха 14/25
187/187 — 31 с — потеря: 1,2837 — точность: 0,6410 — val_loss: 0,8004 — val_accuracy: 0,7697
Эпоха 15/25
187/187 — 31 с — потеря: 1,2828 — точность: 0,6403 — val_loss: 0,8364 — val_accuracy: 0,7625
Эпоха 16/25
187/187 — 31 с — потеря: 1,2749 — точность: 0,6405 — val_loss: 0,8558 — val_accuracy: 0,7565
Эпоха 17/25
187/187 — 31 с — потеря: 1,3022 — точность: 0,6352 — val_loss: 0,8361 — val_accuracy: 0,7551
Эпоха 18/25
187/187 — 31 с — потеря: 1,2848 — точность: 0,6394 — val_loss: 0,8958 — val_accuracy: 0,7479
Эпоха 19/25
187/187 — 31 с — потеря: 1,2791 — точность: 0,6420 — val_loss: 0,8875 — val_accuracy: 0,7509Эпоха 20/25
187/187 — 30 с — потеря: 1,2834 — точность: 0,6416 — val_loss: 0,8653 — val_accuracy: 0,7607
Эпоха 21/25
187/187 - 30 с - потеря: 1,2608 - точность: 0,6435 - val_loss: 0,8451 - val_accuracy: 0,7612
Эпоха 22/25
187/187 - 30 с - потеря: 1,2780 - точность: 0,6390 - val_loss: 0,9035 - val_accuracy: 0,7486
Эпоха 23/25
187/187 - 30 с - потеря: 1,2742 - точность: 0,6473 - val_loss: 0,8837 - val_accuracy: 0,7556
Эпоха 24/25
187/187 — 30 с — потеря: 1,2609 — точность: 0,6434 — val_loss: 0,9233 — val_accuracy: 0,7524
Эпоха 25/25
187/187 - 31с - потери: 1,2630 - точность: 0,6496 - значение_потери: 0,9116 - значение_точность: 0,7584
 

Второй шаг — разморозить несколько слоев и подогнать модель, используя меньшие скорость обучения. В этом примере показано размораживание всех слоев, но в зависимости от Для конкретного набора данных может быть желательно разморозить только часть всех слоев.

При извлечении признаков с помощью предварительно обученная модель работает достаточно хорошо, этот шаг дал бы очень ограниченный выигрыш в точность проверки. В нашем случае мы видим только небольшое улучшение, поскольку предварительное обучение ImageNet уже показало модель большому количеству собак.

С другой стороны, когда мы используем предварительно обученные веса в наборе данных, который более отличается от ImageNet, этот шаг тонкой настройки может иметь решающее значение, поскольку экстрактор признаков также нуждается в существенной корректировке. Такую ситуацию можно продемонстрировать при выборе вместо этого набора данных CIFAR-100, где точная настройка повышает точность проверки примерно на 10%, чтобы пройти 80% на EfficientNetB0 . В таком случае сходимость может занять более 50 эпох.

Дополнительное примечание о моделях с замораживанием/размораживанием: настройка обучаемый модели будет одновременно установить все слои, принадлежащие модели , к одному и тому же обучаемому атрибут. Каждый слой обучаем, только если и сам слой, и модель содержащие его, являются обучаемыми. Следовательно, когда нам нужно частично заморозить/разморозить модель, нам нужно убедиться, что атрибут модели обучаемый установлен до Правда .

 по умолчанию unfreeze_model(модель):
    # Мы разморозим верхние 20 слоев, оставив слои BatchNorm замороженными.
    для слоя в model.layers[-20:]:
        если не экземпляр (слой, слои.BatchNormalization):
            слой.trainable = Истина
    оптимизатор = tf.keras.optimizers.Adam (learning_rate = 1e-4)
    модель.компилировать(
        оптимизатор = оптимизатор, потеря = "categorical_crossentropy", metrics = ["точность"]
    )
unfreeze_model(модель)
эпохи = 10 # @param {тип: "слайдер", мин.:8, макс.:50}
hist = model.fit(ds_train, epochs=epochs, validation_data=ds_test, verbose=2)
plot_hist(хист)
 
 Эпоха 1/10
187/187 — 33 с — потеря: 0,9956 — точность: 0,7080 — val_loss: 0,7644 — val_accuracy: 0,7856
Эпоха 2/10
187/187 — 31 с — потеря: 0,8885 — точность: 0,7352 — val_loss: 0,7696 — val_accuracy: 0,7866
Эпоха 3/10
187/187 — 31 с — потеря: 0,8059 — точность: 0,7533 — val_loss: 0,7659 — val_accuracy: 0,7885
Эпоха 4/10
187/187 — 32 с — потеря: 0,7648 — точность: 0,7675 — val_loss: 0,7730 — val_accuracy: 0,7866
Эпоха 5/10
187/187 — 32 с — потеря: 0,6982 — точность: 0,7833 — val_loss: 0,7691 — val_accuracy: 0,7858
Эпоха 6/10
187/187 — 31 с — потеря: 0,6823 — точность: 0,7880 — val_loss: 0,7814 — val_accuracy: 0,7872
Эпоха 7/10
187/187 - 31с - потери: 0,6536 - точность: 0,7953 - val_loss: 0,7850 - val_accuracy: 0,7873
Эпоха 8/10
187/187 — 31 с — потеря: 0,6104 — точность: 0,8111 — val_loss: 0,7774 — val_accuracy: 0,7879
Эпоха 9/10
187/187 — 32 с — потеря: 0,5990 — точность: 0,8067 — val_loss: 0,7925 — val_accuracy: 0,7870
Эпоха 10/10
187/187 — 31 с — потеря: 0,5531 — точность: 0,8239 — val_loss: 0,7870 — val_accuracy: 0,7836
 

Советы по тонкой настройке EfficientNet

О размораживании слоев:

  • Слои BatchNormalization должны оставаться замороженными (подробнее). Если их также превратить в обучаемых, первая эпоха после разморозки значительно снизит точность.
  • В некоторых случаях может быть полезно открывать только часть слоев вместо разморозить все. Это значительно ускорит точную настройку при переходе к более крупным моделям, таким как Б7.
  • Каждый блок должен быть полностью включен или выключен. Это связано с тем, что архитектура включает в себя ярлык от первого слоя к последнему слою для каждого блока. Не уважая блоки также значительно ухудшает итоговую производительность.

Другие советы по использованию EfficientNet:

  • Большие варианты EfficientNet не гарантируют улучшенную производительность, особенно для задачи с меньшим количеством данных или меньшим количеством классов. В таком случае более крупный вариант EfficientNet выбран, тем сложнее настроить гиперпараметры.
  • EMA (экспоненциальная скользящая средняя) очень полезна при обучении EfficientNet с нуля, но не столько для трансферного обучения.
  • Не используйте настройку RMSprop, как в исходной статье, для трансферного обучения. импульс и скорость обучения слишком высоки для трансферного обучения. Это легко испортит предварительно тренированный вес и взорвать потерю. Быстрая проверка заключается в том, чтобы убедиться, что потеря (как категорическая перекрестная энтропия) становится значительно больше, чем log(NUM_CLASSES) после того же эпоха. Если это так, начальная скорость/импульс обучения слишком высока.
  • Меньший размер партии повышает точность проверки, возможно, благодаря эффективному предоставлению регуляризация.

Использование новейших весов EfficientNet

Со времени публикации первой статьи EfficientNet была улучшена различными методами для данных предварительной обработки и для использования неразмеченных данных для улучшения результатов обучения. Эти улучшения относительно сложны и затратны в вычислительном отношении для воспроизведения и требуют дополнительный код; но веса легко доступны в виде файлов контрольных точек TF.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *