«Зайдет» на дремучем хуторе: топ-5 самых глупых украинских фейков об истории России
На Украине выступили с весьма своеобразным предложением — открыть в здании российского посольства в Киеве «Музей Московии». В этом заведении планируется распространять откровенно психиатрические фейки об истории России. Редакция RuBaltic.Ru решила разобрать те из них, которые уже успели озвучить.
Глава топонимической комиссии Киева Александр Алферов (сам себя позиционирует как историк, числится «научным сотрудником» в Академии наук и ведет видеоблог на YouTube) предложил открыть в здании посольства РФ на Украине «Музей Московии». «Ученый» хочет, чтобы в этом заведении была отображена история России так, как ее он видит сам. При этом чиновник обозначил пять тезисов украинской пропаганды, каждому из которых он хотел бы посвятить в «музее» отдельный зал. Мы решили коротко разобрать озвученные киевским «чудо-историком» фейки.
Фейк №1
Алферов саркастично предложил создать в музее своей больной фантазии зал «Коренных финно-угорских народов».
Намек очевиден. «Истинный ариец» пытается дать новую жизнь старому мифу о том, что русские — это потомки финно-угров, в отличие от произошедших от древних славян украинцев.
Что тут скажешь? В наши дни распространять подобную ересь уже просто нелепо. Во времена Адольфа Гитлера и его верного подданного Степана Бандеры этот миф, может быть, и «заходил» неграмотному населению далеких карпатских хуторов, но в XXI веке генетика шагнула далеко вперед и не оставила от этих сказок камня на камне.
С точки зрения науки, современные русские, украинцы и белорусы практически идентичны. Ученые научились выявлять «тонкие отличия», но лишь в отдельных регионах. В ряде областей их просто нет. Например, белорусов из северных и центральных регионов республики от русских отличить в принципе невозможно.
Исторически сходство русских и украинцев определено тем, что население центральных регионов европейской части современной России было в значительной степени сформировано за счет миграций из Поднепровья.
Это подтверждается и данными летописей, и археологическими материалами, и антропологией. На берегах Оки в наши дни живут потомки полян.
Серьезное генетическое сходство с финно-угорскими народами ощущается только в северных регионах России. К тому же совершенно ничего зазорного в этом нет. Что же касается жителей южных и центральных русских земель, то украинцы от них практически неотличимы. Один народ, и ничего с этим не поделать.
Фейк №2
Алферов хочет открыть зал «коренной культуры» России и утверждает, что русские крестились только в XII—XVI веках.
Страшно представить, где получал образование этот «историк».
Христианство в землях Северо-Восточной Руси распространилось сразу же после крещения Киева. Например, Смоленск был крещен в 990 году. В том же году Владимир Святой основал на Клязьме город, названный именем самого великого князя. Нужно иметь очень богатую фантазию, чтобы предположить, что князь-христианин сделал заложенный им город языческим.
Великий Новгород Владимир Святославович крестил в 990–991 годах. Но с 989 года там уже стоял 13-купольный деревянный храм, вместо которого в середине XI века был возведен Собор Святой Софии. В том же столетии деревянная церковь стояла и на центральной площади Ростова. Этот список можно продолжать еще долго. Фейк настолько глупый, что его даже обсуждать как-то неудобно.
Фейк №3
Алферов хочет открыть зал под названием «Золотая Орда и участие в ней Московского улуса».
Вот это уже действительно смешно. Причем не только потому, что на самом деле никакого «Московского улуса» никогда не существовало в реальности.
А еще и потому, что вся территория современной Украины без остатка входила в состав Золотой Орды или контролировалась ею.
В том числе в зависимости от ханов находилось горячо любимое всеми современными украинскими патриотами Галицко-Волынское княжество.
Фейк №4
Зал «Становление Московского царства, завоевание Новгорода, Смоленска, Пскова… и похищение названия Россия».
Тут все просто, уныло и давно пережевано. Новгород и Псков действительно присоединяли к Русскому государству под военно-политическим и дипломатическим давлением, было дело. Но отчего же в этом случае карикатура на историка по фамилии Алферов молчит о том, как появились Великобритания, Франция, Норвегия, Швеция? Мы уже молчим о Германии. Многие страны пережили период феодальной раздробленности с последующей централизацией, и Русь в этом смысле — не исключение.
Что же касается Смоленска, то тут ремарки Алферова носят просто издевательский характер. Один из старейших русских городов был захвачен Литвой, а затем воссоединился с Русским государством. При этом позже, в XVII веке, смоляне отчаянно сопротивлялись польскому вторжению.
Что же касается «похищенного названия», то этот нелепый фейк уже опровергнут тысячи раз. Термин «Россия» — это византийский вариант написания слова «Русь». Вместе с греческим книжным знанием он перекочевал в русские земли и постепенно стал употребляться параллельно с классическим местным обозначением государства.
В XVI столетии, при Иване Грозном, он начал вытеснять традиционное определение «Русь» из официальных документов. Любимое же украинскими националистами слово «Московия» никогда не использовалось в качестве самоназвания. Его придумали в Литве, чтобы обманом заявлять о своих правах на территории Юго-Западной Руси — ведь, с династической точки зрения, их могли потребовать вернуть себе Рюриковичи, потомки Владимира Крестителя и Ярослава Мудрого, находившиеся на московском престоле.
Добиться своего в полной мере литовцам не удалось.
В большинстве европейских стран прекрасно осознавали, что те, кого литовцы называют «московитами», на самом деле русские. И это зафиксировано во многих европейских землеописаниях, картах, мемуарах и официальных документах.
Фейк №5
Зал «Тоталитарные системы Московии» (крепостничество, расстрелы, застенки)».
Здесь манипуляции чуть потоньше, чем в четырех прошлых, совершенно абсурдных утверждениях Алферова. Ведь крепостное право, что греха таить, имело место в истории. Но есть несколько важных нюансов.
Во-первых, институт личной зависимости от феодала возник еще в эпоху Древнерусского государства, когда его центр находился в Киеве. Во-вторых, положение крестьян, оказавшихся под властью польских феодалов, было значительно хуже, чем тех, кто жил на территориях Русского государства. Крепостное право в Польше предполагало многодневную (до 6 дней в неделю) барщину, лишение податного населения большинства владельческих, гражданских и личных прав, сопровождалось сокращением запашки крестьян или даже их обезземеливанием с превращением в бесправных холопов.
Более того, после создания Речи Посполитой и провозглашения церковной унии поляки стали обращаться с предками нынешних украинцев не лучше, чем с животными.
По свидетельствам современников, польским панам можно было их безнаказанно убивать, грабить, насиловать. Детей демонстративно варили в котлах на глазах у родителей. Непокорных подвергали жестоким пытками: четвертовали, сдирали кожу. И спасать их от всего этого по просьбе Богдана Хмельницкого пришли русские. На этом фоне обвинения в «тоталитарном крепостничестве» в адрес России звучат, мягко говоря, неоднозначно.
Да и в принципе крепостное право, к сожалению, существовало в большинстве европейских стран. Этот исторический период нужно было пережить. Причем на отдельных территориях Европы (за пределами России) крепостничество «задержалось» аж до 1918 года.
Фантазии Алферова в очередной раз доказывают, что украинская пропаганда зиждется на рафинированной лжи и манипуляциях, не имеющих ничего общего с исторической правдой.
Причем эта промывка мозгов активно используется для разжигания неонацистских настроений. Работающих на киевских режим «алферовых» в перспективе должен ожидать как минимум остракизм, с которым столкнулись после Второй мировой войны гитлеровские псевдоисторики, а в идеале — скамья подсудимых нового Нюрнбергского трибунала.
Как зарождался и набирал мощь белорусский гимн? История одного из главных символов страны
Главная Новости «24 часа» Общество Государственная политика
13.05.2023 — 19:45
Новости Беларуси. Мы отдаем дань главным символам страны, которые укрепляют связь между прошлым и будущим. Поэтому именно молодежи предстоит беречь и передавать новым поколениям историю нашего суверенитета. То, что День белорусских флага и герба дополнил гимн нашей страны, во многом заслуга активистов БРСМ. Именно эти ребята предложили главе государства расширить значимость праздника, сообщили в программе Новости «24 часа» на СТВ.
Указом Президента Беларуси от 12 апреля 2023 года в один ряд с особым почитанием на государственном уровне становится и белорусский гимн.
О том, как рождался и набирал мощь один из главных символов страны, репортаж Татьяны Сидоренко.
Комиссия по проведению конкурса на создание текста и музыки гимна Беларуси была утверждена в январе 2002-го. Свои музыкальные варианты представили сразу несколько творческих дуэтов. Слова и нотная партитура раскладывались по буквам и тактам. Каждый понимал, если герб и флаг – это лицо страны, то гимн – это ее душа и голос.
Никита Пахомов, руководитель по военно-патриотическому воспитанию СШ № 27 Минска:
Это отражение самого государства, то есть отражение его души, политики, движения, курса. Отношение и позиция народа в мировом сообществе.
Исполнение вариантов гимна во время конкурсного отбора, на котором присутствовал глава государства, доверили оркестру Вооруженных Сил Беларуси под руководством ныне заслуженного артиста, дирижера Александра Федорова. Тонкости такого важного для страны дня Александр Владимирович помнит до сих пор. Как отмечает, все варианты были достойны уважения. И Президент сказал: пусть белорусы сами сделают свой выбор.
Никита Пахомов:
В СМИ, газетах были напечатаны все эти варианты. И в результате наибольшее количество голосов (около 43 %, если я не ошибаюсь) набрали как раз таки слова и музыка гимна, который сейчас является государственным – «Мы, беларусы – мірныя людзі».
Эталонную запись гимна делали в большой студии Дома радио. Потоки волнения и энергии буквально бурлили в ее стенах. Расширенный состав оркестра, хор, звукооператоры и аранжировщики – все были нацелены на результат. «Мы, беларусы – мірныя людзі» – первые аккорды рожденного гимна у каждого зазвучали камертоном в сердце.
Александр Федоров, заслуженный артист Республики Беларусь:
Мы приехали, разыгрались. Нам дали три дня, но сделали три дубля и уехали. И до сих пор гимн этот является эталонным. Если нет внутренней идеологии, нет победы. Если есть внутренняя идеология у человека, который верит в свое государство, в свою родину, естественно, он сможет отразить в музыке то, что он чувствует. И вот мы как раз таки в этом гимне отразили нашу любовь к нашей родине, к нашей родной Беларуси.
Музыка – Соколовского, слова – Климковича и Каризны, душа – народа. Гимн Беларуси – это желание жить в мире. Но в случае необходимости это еще и готовность плечом к плечу защищать родную землю. Это крепко вплетено в музыкальную и идеологическую канву одного из главных символов страны.
Люди в материале: Александр Лукашенко, Александр Федоров, Никита Пахомов, Татьяна Сидоренко
Новости СМИ2
Новости Беларуси. Начеку с историческим бэкграундом и пониманием нынешнего военного расклада. Кто разыгрывает оперативную карту на главное сцене региональной безопасности? Почему в ход идут дерзкие диверсии? Как 9 Мая вдохновляет и не позволяет сменять глобальную точку зрения? На площадке ток-шоу «По существу» соберутся эксперты, чтобы разобрать военно-политическую ситуацию.
Кирилл Казаков, СТВ:
Скажите с точки зрения дипломатов, сенаторов есть какой-то ручеек общения с нашими западными партнерами по поводу того, что происходит? Я понимаю, что военным приходится общаться, мы как-то в программе говорили, что летчики в небе свои дела обсуждают, там в любом случае общение будет. А с точки зрения каких-то контактов, например, между вашим Советом Республики и Сенатом Польши?
Игорь Гедич, член Постоянной комиссии Совета Республики Национального собрания Беларуси:
Я не могу вам утверждать однозначно, но западные направления сейчас достаточно сложны в дипломатическом отношении. В принципе, самое главное – это направление МИД. Но могу сказать, что Наталья Ивановна Кочанова держит руку на пульсе. Во всяком случае восточное и ближневосточное направление всегда рассматривается нами в плане поддержания контактов, в плане взаимодействия в рамках Парламентской ассамблеи ОДКБ, СНГ – в этом отношении с нашими друзьями мы очень плотно общаемся.
Кирилл Казаков:
Но с друзьями понятно. Или там все? Занавес опустился, и никаких общений.
Игорь Гедич:
С ними сложнее, но никто, ни Президент не отметает. Мы не ставим занавес перед собой, это перед нами ставят занавес.
Кирилл Казаков:
Мы четко делим еще понятия «элита» и «обычный народ», который к нам, в принципе, хорошо относится.
Игорь Гедич:
Да, в этом отношении мы всегда открыты и готовы на сотрудничество.
Анатолий Булавко, заместитель командующего ВВС и войсками ПВО по идеологической работе:
Хотелось бы напомнить, что самая лучшая война, насколько уместно это слово, это та, которая предотвращена, а она может быть предотвращена только при наличии выполнения того условия, которое определил глава государства: когда каждый занимается своим делом – военные и силовики защищают страну, хлеборобы выращивают хлеб, ученые что-то изобретают для экономики, для людей.
Алена Сырова, СТВ:
В том числе и для армии, может быть.
Анатолий Булавко:
Учителя учат детей и воспитывают патриотов.
Кирилл Казаков:
А дети учатся на пятерки – на десятки. Простите, старое поколение. На самом деле, День победы у нас как ни крути, может быть, не главный государственный праздник, потому что все-таки главный государственный праздник – это День Независимости. Но они же связаны: День освобождения Беларуси, День освобождения Минска, День Победы.
Алена Сырова:
Может быть, День Победы – это главный народный праздник, а День независимости Беларуси – главный государственный праздник.
Игорь Чибисов, военный аналитик:
Поэтому я хотел сказать, не зря есть песня «Священная война». Священная война – это что? Народная священная война. Поэтому не главный, а священный праздник Республики Беларусь. И еще закончить песней Победы – это праздник со слезами на глазах.
Читайте также:
«У населения есть два состояния: благодушия и паники». Как учения силовиков способствуют спокойствию общества?
Деморализовать военных или народ? Для чего была совершена атака на Кремль – мнение депутата
Что значит 9 Мая для военнослужащих? Рассказал Анатолий Булавко
- Читать еще
Составление моделей леса решений и нейронных сетей
Посмотреть на TensorFlow.org | Запустить в Google Colab | Посмотреть на GitHub | Скачать блокнот | Функциональный API Кераса |
Введение
Добро пожаловать в руководство по составлению модели для TensorFlow Decision Forests (ТФ-ДФ). В этой записной книжке показано, как составить несколько лесов решений и модели нейронной сети вместе, используя общий слой предварительной обработки и Функциональный API Keras.
Возможно, вы захотите составить модели вместе, чтобы повысить эффективность прогнозирования. (ансамблирование), чтобы получить лучшее от различных технологий моделирования (гетерогенное сборка модели) для обучения разных частей модели на разных наборах данных (например, предварительное обучение) или для создания многоуровневой модели (например, модель оперирует предсказаниями другой модели).
В этом руководстве рассматривается расширенный вариант использования композиции модели с использованием Функциональный API. Вы можете найти примеры для более простых сценариев композиции модели в разделе «Предварительная обработка функций» этого руководства и в разделе «использование предварительно обученного встраивания текста» этого руководство.
Вот структура модели, которую вы создадите:
!pip install graphviz -U --quiet из источника импорта graphviz Источник(""" орграф G { raw_data [label="Входные характеристики"]; preprocess_data [label="Обучаемая предварительная обработка NN", shape=rect]; необработанные_данные -> предварительные_данные подграф кластер_0 { цвет=серый; a1[label="NN layer", shape=rect]; b1[label="Слой NN", shape=прямоугольник]; а1 -> б1; label = "Модель №1"; } подграф кластер_1 { цвет=серый; a2[label="NN layer", shape=rect]; b2[label="NN layer", shape=rect]; а2 -> б2; label = "Модель №2"; } подграф кластер_2 { цвет=серый; a3[label="Лес решений", shape=rect]; label = "Модель №3"; } подграф кластер_3 { цвет=серый; a4[label="Лес решений", shape=rect]; label = "Модель №4"; } предварительные_данные -> а1; предварительные_данные -> а2; предварительные_данные -> а3; предварительные_данные -> а4; b1 -> аггр; b2 -> аггр; а3 -> аггр; а4 -> аггр; aggr [label="Агрегация (среднее)", shape=rect] аггр -> прогнозы } """)
Ваша составленная модель состоит из трех этапов:
- Первый этап представляет собой слой предварительной обработки, состоящий из нейронной сети и общие для всех моделей на следующем этапе. На практике такой слой предварительной обработки может быть либо предварительно обученным встраиванием для точной настройки, либо случайно инициализированная нейронная сеть.
- Второй этап представляет собой ансамбль из двух лесов решений и двух нейронных сетевые модели.
- На последнем этапе усредняются прогнозы моделей на втором этапе. Он не содержит обучаемых весов.
Нейронные сети обучаются с помощью алгоритм обратного распространения и градиентный спуск. Этот алгоритм имеет два важных свойства: (1) Слой нейронной сети можно обучить, если она получает градиент потерь (подробнее именно, градиент потерь в соответствии с выходом слоя), и (2) алгоритм «передает» градиент потерь с выхода слоя на вход слоя (это «цепное правило»). По этим двум причинам обратное распространение может обучать вместе несколько слоев нейронных сетей, расположенных поверх каждого другой.
В этом примере леса решений обучаются с помощью Случайный лес (РЧ) алгоритм. В отличие от Backpropagation, обучение RF не «передает» градиент потерь от выхода к входу. По этим причинам классический RF-алгоритм нельзя использовать для обучения или тонкой настройки нейронной сети под. Другими словами, этапы «леса решений» нельзя использовать для обучения «Обучаемый блок предварительной обработки NN».
- Обучение этапа препроцессинга и нейронных сетей.
- Тренируйте этапы леса принятия решений.
Установите TensorFlow Decision Forests
Установите TF-DF, запустив следующую ячейку.
pip установить tensorflow_decision_forests -U --quiet
Wurlitzer необходим для отображения
подробные журналы обучения в Colabs (при использовании verbose=2
в конструкторе модели).
pip установить wurlitzer -U --quiet
Импорт библиотек
импорт tensorflow_decision_forests как tfdf импорт ОС импортировать numpy как np импортировать панд как pd импортировать тензорный поток как tf импортировать математику импортировать matplotlib. pyplot как plt
2022-12-14 12:30:49.506715: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Не удалось загрузить динамическую библиотеку «libnvinfer.so.7»; ошибка & двоеточие; libnvinfer.so.7: не удается открыть общий объектный файл: Данный файл или каталог отсутствует 2022-12-14 12:30:49.506811: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Не удалось загрузить динамическую библиотеку «libnvinfer_plugin.so.7»; ошибка & двоеточие; libnvinfer_plugin.so.7: не удается открыть общий объектный файл: Данный файл или каталог отсутствует 2022-12-14 12,30,49.506820: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] Предупреждение TF-TRT: Не удается открыть некоторые библиотеки TensorRT. Если вы хотите использовать графический процессор Nvidia с TensorRT, убедитесь, что отсутствующие библиотеки, упомянутые выше, установлены правильно.
Набор данных
В этом руководстве вы будете использовать простой синтетический набор данных, чтобы упростить интерпретировать окончательную модель.
определение make_dataset (num_examples, num_features, seed = 1234): np.random.seed (семя) функции = np.random.uniform (-1, 1, размер = (num_examples, num_features)) шум = np.random.uniform (размер = (num_examples)) left_side = np.sqrt( np.sum (np.multiply (np.square (функции [:, 0: 2]), [1, 2]), ось = 1)) right_side = features[:, 2] * 0,7 + np.sin( характеристики[:, 3] * 10) * 0,5 + шум * 0,0 + 0,5 метки = левая_сторона <= правая_сторона возвращаемые функции, labels.astype(int)
Создать несколько примеров:
make_dataset(num_examples=5, num_features=4)
(массив([[-0,6169611, 0,24421754, -0,12454452, 0,57071717], [0,55995162, -0,45481479, -0,44707149, 0,60374436], [0,91627871, 0,75186527, -0,28436546, 0,00199025], [0,36692587, 0,42540405, -0,25949849, 0,12239237], [0,00616633, -0,9724631, 0,54565324, 0,76528238]]), массив ([0, 0, 0, 1, 0]))
Вы также можете построить их, чтобы получить представление о синтетическом шаблоне:
plot_features, plot_label = make_dataset (num_examples = 50000, num_features = 4) plt. rcParams["figure.figsize"] = [8, 8] common_args = dict (c = plot_label, s = 1,0, альфа = 0,5) plt.subplot(2, 2, 1) plt.scatter(функции_графика[:, 0], функции_графика[:, 1], **общие_аргументы) plt.subplot(2, 2, 2) plt.scatter(функции_графика[:, 1], функции_графика[:, 2], **общие_аргументы) plt.subplot(2, 2, 3) plt.scatter(функции_графика[:, 0], функции_графика[:, 2], **общие_аргументы) plt.subplot(2, 2, 4) plt.scatter(функции_графика[:, 0], функции_графика[:, 3], **общие_аргументы)
Обратите внимание, что этот шаблон сглажен и не выровнен по оси. Это даст преимущество моделям нейронных сетей. Это связано с тем, что для нейронной сети проще, чем для дерева решений, иметь круглые и не выровненные границы решений.
С другой стороны, мы будем обучать модель на небольших наборах данных с 2500 примерами. Это даст преимущество модели леса решения. Это связано с тем, что леса решений намного эффективнее, используя всю доступную информацию из примеров (леса решений «эффективны по выборке»).
Наш ансамбль нейронных сетей и лесов решений будет использовать лучшее из обоих миров.
Давайте создадим поезд и протестируем tf.data.Dataset
:
def make_tf_dataset(batch_size=64, **args): функции, метки = make_dataset(**args) вернуть tf.data.Dataset.from_tensor_slices( (функции, метки)).batch(batch_size) количество_функций = 10 train_dataset = make_tf_dataset( num_examples=2500, num_features=num_features, batch_size=100, seed=1234) test_dataset = make_tf_dataset( num_examples=10000, num_features=num_features, batch_size=100, seed=5678)
Структура модели
Определите структуру модели следующим образом:
# Входные объекты. raw_features = tf.keras.layers.Input (shape = (num_features,)) # Этап 1 # ======= # Обычная обучаемая предварительная обработка препроцессор = tf.keras.layers.Dense(10, активация=tf. nn.relu6) preprocess_features = препроцессор (raw_features) # Этап 2 # ======= # Модель №1: НН m1_z1 = tf.keras.layers.Dense(5, активация=tf.nn.relu6)(preprocess_features) m1_pred = tf.keras.layers.Dense (1, активация = tf.nn.sigmoid) (m1_z1) # Модель №2: НН m2_z1 = tf.keras.layers.Dense(5, активация=tf.nn.relu6)(preprocess_features) m2_pred = tf.keras.layers.Dense (1, активация = tf.nn.sigmoid) (m2_z1) # Модель №3: ДФ model_3 = tfdf.keras.RandomForestModel (num_trees = 1000, random_seed = 1234) m3_pred = model_3 (предварительные_функции) # Модель №4: ДФ model_4 = tfdf.keras.RandomForestModel( количество_деревьев=1000, #split_axis="SPARSE_OBLIQUE", # Раскомментируйте эту строку, чтобы повысить качество этой модели random_seed=4567) m4_pred = model_4 (предварительные_функции) # Так как TF-DF использует детерминированные алгоритмы обучения, вы должны установить модель # обучаем seed различным значениям, иначе оба # `tfdf.keras.RandomForestModel` будет точно таким же. # Этап 3 # ======= mean_nn_only = tf. reduce_mean(tf.stack([m1_pred, m2_pred], ось = 0), ось = 0) mean_nn_and_df = tf.reduce_mean( tf.stack([m1_pred, m2_pred, m3_pred, m4_pred], ось=0), ось=0) # Модели Керас # ============= ансамбль_nn_only = tf.keras.models.Model (raw_features, mean_nn_only) ансамбль_nn_and_df = tf.keras.models.Model (raw_features, mean_nn_and_df)
Предупреждение&двоеточие; Аргумент конструктора `num_threads` не задан, а количество процессоров равно os.cpu_count()=32 > 32. Установка num_threads на 32. Установите num_threads вручную, чтобы использовать более 32 процессоров. ПРЕДУПРЕЖДЕНИЕ:absl:Аргумент конструктора `num_threads` не задан, а количество процессоров равно os.cpu_count()=32 > 32. Установка num_threads на 32. Установите num_threads вручную, чтобы использовать более 32 процессоров. Используйте /tmpfs/tmp/tmpvqon5m0g в качестве временного учебного каталога. Предупреждение&двоеточие; Модель вызывалась напрямую (т. е. с использованием `model(data)` вместо `model. predict(data)`) перед обучением. Модель будет возвращать только нули, пока не будет обучена. Форма вывода может измениться после обучения Tensor("inputs:0", shape=(None, 10), dtype=float32) ПРЕДУПРЕЖДЕНИЕ:absl:Модель была вызвана напрямую (т.е. с использованием `model(data)` вместо `model.predict(data)`) перед обучением. Модель будет возвращать только нули, пока не будет обучена. Форма вывода может измениться после обучения Tensor("inputs:0", shape=(None, 10), dtype=float32) Предупреждение&двоеточие; Аргумент конструктора `num_threads` не задан, а количество процессоров равно os.cpu_count()=32 > 32. Установка num_threads на 32. Установите num_threads вручную, чтобы использовать более 32 процессоров. ПРЕДУПРЕЖДЕНИЕ:absl:Аргумент конструктора `num_threads` не задан, а количество процессоров равно os.cpu_count()=32 > 32. Установка num_threads на 32. Установите num_threads вручную, чтобы использовать более 32 процессоров. Используйте /tmpfs/tmp/tmppvn9jfhe как временный учебный каталог Предупреждение&двоеточие; Модель вызывалась напрямую (т. е. с использованием `model(data)` вместо `model.predict(data)`) перед обучением. Модель будет возвращать только нули, пока не будет обучена. Форма вывода может измениться после обучения Tensor("inputs:0", shape=(None, 10), dtype=float32) ПРЕДУПРЕЖДЕНИЕ:absl:Модель была вызвана напрямую (т.е. с использованием `model(data)` вместо `model.predict(data)`) перед обучением. Модель будет возвращать только нули, пока не будет обучена. Форма вывода может измениться после обучения Tensor("inputs:0", shape=(None, 10), dtype=float32)
Перед обучением модели вы можете построить ее, чтобы проверить, похожа ли она на начальная схема.
из keras.utils.vis_utils импорта plot_model plot_model(ensemble_nn_and_df, to_file="/tmp/model.png", show_shapes=True)
Обучение модели
Сначала обучите предварительную обработку и два слоя нейронной сети, используя алгоритм обратного распространения.
%%время ансамбль_nn_only.compile( оптимизатор=tf.keras.optimizers.Adam(), потеря=tf.keras.losses.BinaryCrossentropy(), метрики=["точность"]) ансамбль_nn_only.fit (train_dataset, эпохи = 20, validation_data = test_dataset)
Эпоха 1/20 25/25 [===============================] - 3 с 21 мс/шаг - потеря&двоеточие; 0,7302 - точность&двоеточие; 0.4260 - val_loss: 0,6958 - val_accuracy: 0,5173 Эпоха 2/20 25/25 [===============================] - 0 с 9 мс/шаг - потеря&двоеточие; 0,6784 - точность&двоеточие; 0.5700 - val_loss: 0,6533 - val_accuracy: 0,6313 Эпоха 3/20 25/25 [===============================] - 0 с 9 мс/шаг - потеря&двоеточие; 0,6406 - точность&двоеточие; 0,6648 - val_loss: 0,6220 - val_accuracy: 0,7000 Эпоха 4/20 25/25 [==============================] - 0s 9мс/шаг - потеря & двоеточие; 0,6116 - точность&двоеточие; 0.7224 - val_loss: 0,5973 - val_accuracy: 0,7299 Эпоха 5/20 25/25 [===============================] - 0 с 9 мс/шаг - потеря&двоеточие; 0,5877 - точность&двоеточие; 0. 7432 - val_loss: 0,5765 - val_accuracy: 0,7377 Эпоха 6/20 25/25 [===============================] - 0 с 10 мс/шаг - потеря&двоеточие; 0,5669 - точность&двоеточие; 0,7488 - val_loss: 0.5580 - val_accuracy: 0,7390 Эпоха 7/20 25/25 [==============================] - 0s 9мс/шаг - потеря & двоеточие; 0,5482 - точность&двоеточие; 0.7500 - val_loss: 0,5416 - val_accuracy: 0,7392 Эпоха 8/20 25/25 [===============================] - 0 с 9 мс/шаг - потеря&двоеточие; 0,5314 - точность&двоеточие; 0.7500 - val_loss: 0,5272 - val_accuracy: 0,7392 Эпоха 9/20 25/25 [===============================] - 0 с 9 мс/шаг - потеря&двоеточие; 0,5166 - точность&двоеточие; 0.7500 - val_loss: 0,5148 - val_accuracy: 0,7392 Эпоха 10/20 25/25 [==============================] - 0s 9мс/шаг - потеря & двоеточие; 0,5037 - точность&двоеточие; 0.7500 - val_loss: 0,5041 - val_accuracy: 0,7392 Эпоха 11/20 25/25 [===============================] - 0 с 10 мс/шаг - потеря&двоеточие; 0,4923 - точность&двоеточие; 0. 7500 - val_loss: 0,4948 - val_accuracy: 0,7392 Эпоха 12/20 25/25 [===============================] - 0 с 10 мс/шаг - потеря&двоеточие; 0,4822 - точность&двоеточие; 0.7500 - val_loss: 0,4865 - val_accuracy: 0,7392 Эпоха 13/20 25/25 [==============================] - 0s 9мс/шаг - потеря & двоеточие; 0,4731 - точность&двоеточие; 0.7500 - val_loss: 0.4790 - val_accuracy: 0,7392 Эпоха 14/20 25/25 [===============================] - 0 с 10 мс/шаг - потеря&двоеточие; 0,4649 - точность&двоеточие; 0.7504 - val_loss: 0,4724 - val_accuracy: 0,7393 Эпоха 15/20 25/25 [===============================] - 0 с 9 мс/шаг - потеря&двоеточие; 0,4577 - точность&двоеточие; 0.7504 - val_loss: 0,4667 - val_accuracy: 0,7398 Эпоха 16/20 25/25 [===============================] - 0 с 10 мс/шаг - потеря&двоеточие; 0,4515 - точность&двоеточие; 0,7512 - val_loss: 0.4618 - val_accuracy: 0,7403 Эпоха 17/20 25/25 [==============================] - 0s 9мс/шаг - потеря & двоеточие; 0,4462 - точность&двоеточие; 0,7516 - val_loss: 0,4578 - val_accuracy: 0,7411 Эпоха 18/20 25/25 [===============================] - 0 с 10 мс/шаг - потеря&двоеточие; 0,4417 - точность&двоеточие; 0,7536 - val_loss: 0,4544 - val_accuracy: 0,7434 Эпоха 19/20 25/25 [===============================] - 0 с 10 мс/шаг - потеря&двоеточие; 0,4379 - точность&двоеточие; 0,7544 - val_loss: 0,4515 - val_accuracy: 0,7458 Эпоха 20/20 25/25 [===============================] - 0 с 10 мс/шаг - потеря&двоеточие; 0,4346 - точность&двоеточие; 0,7592 - val_loss: 0. 4490 - val_accuracy: 0,7508 Время ЦП&колон; пользователь 9,14 с, sys: 1,85 с, всего&двоеточие; 11 с Время стены&колон; 7,13 с
Давайте оценим предварительную обработку и часть только с двумя нейронными сетями:
оценка_nn_only = ансамбль_nn_only.evaluate(test_dataset, return_dict=True) print("Точность (только NN №1 и №2): ", Assessment_nn_only["точность"]) print("Потери (только NN #1 и #2): ", Assessment_nn_only["потеря"])
100/100 [===============================] - 0 с 2 мс/шаг - потеря&двоеточие; 0,4490 - точность&двоеточие; 0,7508 Точность (только NN #1 и #2): 0,7508000135421753 Потери (только NN № 1 и № 2): 0,44903823733329773
Давайте обучим два компонента леса решений (один за другим).
%%время train_dataset_with_preprocessing = train_dataset.map (лямбда x, y: (препроцессор (x), y)) test_dataset_with_preprocessing = test_dataset. map (лямбда x, y: (препроцессор (x), y)) model_3.fit(train_dataset_with_preprocessing) model_4.fit(train_dataset_with_preprocessing)
ПРЕДУПРЕЖДЕНИЕ:tensorflow:AutoGraph не смог преобразоватьпо адресу 0x7fa545a61e50> и запустит его как есть. Причина&колон; не удалось проанализировать исходный код <функции <лямбда> по адресу 0x7fa545a61e50>: среди кандидатов не найдено подходящего AST: Чтобы отключить это предупреждение, украсьте функцию @tf.autograph.experimental.do_not_convert. ПРЕДУПРЕЖДЕНИЕ:tensorflow:AutoGraph не смог преобразовать по адресу 0x7fa545a61e50> и запустит его как есть. Причина&колон; не удалось проанализировать исходный код <функции <лямбда> по адресу 0x7fa545a61e50>: среди кандидатов не найдено подходящего AST: Чтобы отключить это предупреждение, украсьте функцию @tf.autograph.experimental.do_not_convert. ПРЕДУПРЕЖДЕНИЕ&двоеточие; AutoGraph не смог преобразовать <функция <лямбда> по адресу 0x7fa545a61e50> и запустит ее как есть. Причина&колон; не удалось проанализировать исходный код <функции <лямбда> по адресу 0x7fa545a61e50>: среди кандидатов не найдено подходящего AST: Чтобы отключить это предупреждение, украсьте функцию @tf.autograph.experimental.do_not_convert. ПРЕДУПРЕЖДЕНИЕ:tensorflow:AutoGraph не удалось преобразовать по адресу 0x7fa545a619d0> и запустит его как есть. Причина&колон; не удалось проанализировать исходный код <функции <лямбда> по адресу 0x7fa545a619d0>: среди кандидатов не найдено подходящего AST: Чтобы отключить это предупреждение, украсьте функцию @tf.autograph.experimental.do_not_convert. ПРЕДУПРЕЖДЕНИЕ:tensorflow:AutoGraph не смог преобразовать по адресу 0x7fa545a619d0> и запустит его как есть. Причина&колон; не удалось разобрать исходный код <функции <лямбда> по адресу 0x7fa545a619d0>&двоеточие; среди кандидатов не найдено подходящего AST: Чтобы отключить это предупреждение, украсьте функцию @tf. autograph.experimental.do_not_convert. ПРЕДУПРЕЖДЕНИЕ&двоеточие; AutoGraph не смог преобразовать <функция <лямбда> по адресу 0x7fa545a619d0> и запустит ее как есть. Причина&колон; не удалось проанализировать исходный код <функции <лямбда> по адресу 0x7fa545a619d0>: среди кандидатов не найдено подходящего AST: Чтобы отключить это предупреждение, украсьте функцию @tf.autograph.experimental.do_not_convert. Чтение обучающего набора данных... ПРЕДУПРЕЖДЕНИЕ:tensorflow:из /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/autograph/pyct/static_analysis/liveness.py:83: Analyzer.lamba_check (из tensorflow.python.autograph.pyct.static_analysis.liveness) устарел и будет удален после 23 сентября 2023 г. Инструкции по обновлению: Лямбда-функции больше не будут использоваться в операторе, где они используются, или, по крайней мере, в том же блоке. https://github.com/tensorflow/tensorflow/issues/56089 ПРЕДУПРЕЖДЕНИЕ:tensorflow:из /tmpfs/src/tf_docs_env/lib/python3. 9/site-packages/tensorflow/python/autograph/pyct/static_analysis/liveness.py:83: Analyzer.lamba_check (из tensorflow.python.autograph.pyct.static_analysis.liveness) устарел и будет удален после 23 сентября 2023 г. Инструкции по обновлению: Лямбда-функции больше не будут использоваться в операторе, где они используются, или, по крайней мере, в том же блоке. https://github.com/tensorflow/tensorflow/issues/56089 Набор обучающих данных, прочитанный в 0:00:02.950404. Найдено 2500 примеров. Учебная модель... [INFO 2022-12-14T12:31:10.192766491+00:00 kernel.cc:1175] Загрузка модели из пути /tmpfs/tmp/tmpvqon5m0g/model/ с префиксом 16992a5614444ff2 Модель обучена в 0:00:02.032323 Компиляция модели... [INFO 2022-12-14T12:31:11.267466565+00:00 abstract_model.cc:1306] Построен движок "RandomForestOptPred". [INFO 2022-12-14T12:31:11.267511869+00:00 kernel.cc:1021] Использовать быстрый универсальный движок ПРЕДУПРЕЖДЕНИЕ:tensorflow:AutoGraph не удалось преобразовать и будет работать как есть. Пожалуйста, сообщите об этом команде TensorFlow. При регистрации ошибки установите уровень детализации на 10 (в Linux `export AUTOGRAPH_VERBOSITY=10`) и прикрепите полный вывод. Причина&колон; не удалось получить исходный код Чтобы отключить это предупреждение, украсьте функцию @tf.autograph.experimental.do_not_convert. ПРЕДУПРЕЖДЕНИЕ:tensorflow:AutoGraph не смог преобразовать и запустит его как есть. Пожалуйста, сообщите об этом команде TensorFlow. При регистрации ошибки установите уровень детализации на 10 (в Linux `export AUTOGRAPH_VERBOSITY=10`) и прикрепите полный вывод. Причина&колон; не удалось получить исходный код Чтобы отключить это предупреждение, украсьте функцию @tf.autograph.experimental.do_not_convert. ПРЕДУПРЕЖДЕНИЕ&двоеточие; AutoGraph не удалось преобразовать и будет работать как есть. Пожалуйста, сообщите об этом команде TensorFlow. При регистрации ошибки установите уровень детализации на 10 (в Linux `export AUTOGRAPH_VERBOSITY=10`) и прикрепите полный вывод. Причина&колон; не удалось получить исходный код Чтобы отключить это предупреждение, украсьте функцию @tf.autograph.experimental.do_not_convert. Модель собрана. Чтение обучающего набора данных... Набор обучающих данных читается в 0:00:00.204462. Найдено 2500 примеров. Учебная модель... [ИНФОРМАЦИЯ 2022-12-14T12:31:13.381255379+00:00 kernel.cc:1175] Загрузка модели из пути /tmpfs/tmp/tmppvn9jfhe/model/ с префиксом a9c09b6c359f4167 Модель обучена в 0:00:01.887942 Компиляция модели... [INFO 2022-12-14T12:31:14.394191435+00:00 kernel.cc:1021] Использовать быстрый универсальный движок Модель собрана. Время ЦП&колон; пользователь 21 с, sys: 1,71 с, всего&двоеточие 22,7 с Время стены&колон; 8,31 с
Давайте оценим Леса Решений по отдельности.
model_3.compile(["точность"]) model_4.compile(["точность"]) оценка_df3_only = модель_3.оценить( test_dataset_with_preprocessing, return_dict = True) оценка_df4_only = модель_4.оценить( test_dataset_with_preprocessing, return_dict = True) print("Точность (только DF #3): ", Assessment_df3_only["точность"]) print("Точность (только DF #4): ", Assessment_df4_only["точность"])
100/100 [===============================] - 1 с 10 мс/шаг - потери&двоеточие; 0.0000e+00 - точность&двоеточие; 0,7937 100/100 [===============================] - 1 с 10 мс/шаг - потери&двоеточие; 0.0000e+00 - точность&двоеточие; 0,7946 Точность (только DF #3): 0,7936999797821045 Точность (только DF #4): 0,7946000099182129
Оценим всю композицию модели:
ансамбль_nn_and_df.compile( потеря=tf.keras.losses.BinaryCrossentropy(), метрика=["точность"]) оценка_nn_and_df = ансамбль_nn_and_df. evaluate( test_dataset, return_dict = Истина) print("Точность (2xNN и 2xDF): ", Assessment_nn_and_df["точность"]) print("Потери (2xNN и 2xDF): ", Assessment_nn_and_df["потери"])
100/100 [===============================] - 1 с 10 мс/шаг - потери&двоеточие; 0,4269 - точность&двоеточие; 0,7934 Точность (2xNN и 2xDF): 0,79339998960495 Потери (2xNN и 2xDF): 0,426909476518631
Чтобы закончить, давайте еще немного настроим слой нейронной сети. Обратите внимание, что мы делаем не настраивать предварительно обученное встраивание, так как от него зависят модели DF (если только мы также переучил бы их после).
Таким образом, у вас есть:
print(f"Точность (только NN #1 и #2):\t{evaluation_nn_only['accuracy']:.6f}") print(f"Точность (только DF #3):\t\t{evaluation_df3_only['accuracy']:.6f}") print(f"Точность (только DF #4):\t\t{evaluation_df4_only['accuracy']:.6f}") Распечатать("----------------------------------------") print(f"Точность (2xNN и 2xDF):\t{evaluation_nn_and_df['точность']:. 6f}") def delta_percent (src_eval, ключ): src_acc = src_eval["точность"] final_acc = оценка_nn_and_df["точность"] увеличение = final_acc - src_acc print(f"\t\t\t\t {увеличение:+.6f} над {ключом}") delta_percent(evaluation_nn_only, "Только NN #1 и #2") delta_percent(evaluation_df3_only, "только DF #3") delta_percent(evaluation_df4_only, "только DF #4")
Точность (только NN #1 и #2): 0,750800 Точность (только DF #3): 0,793700 Точность (только DF #4): 0,794600 ---------------------------------------- Точность (2xNN и 2xDF): 0,793400 +0,042600 только для NN #1 и #2 -0,000300 только для DF #3 -0,001200 только для DF #4
Здесь вы можете видеть, что составная модель работает лучше, чем отдельная части. Вот почему так хорошо работают ансамбли.
Что дальше?
В этом примере вы увидели, как объединить леса решений с нейронными сетями.