<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; TensorFlow</title>
	<atom:link href="http://web.snauka.ru/issues/tag/tensorflow/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 17 Apr 2026 07:29:22 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Построение модели искусственного интеллекта для классификации изображений в задаче распознавания башкирских букв</title>
		<link>https://web.snauka.ru/issues/2024/06/102168</link>
		<comments>https://web.snauka.ru/issues/2024/06/102168#comments</comments>
		<pubDate>Tue, 11 Jun 2024 15:09:14 +0000</pubDate>
		<dc:creator>Мухаяров Дильназ Данисович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Google диск]]></category>
		<category><![CDATA[GoogleCollab]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[датасет]]></category>
		<category><![CDATA[нейронная сеть]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2024/06/102168</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал В последние годы искусственный интеллект (ИИ) стал неотъемлемой частью нашей повседневной жизни. Он используется во множестве отраслей, начиная от автоматического перевода текстов и заканчивая самоуправляемыми автомобилями. Одной из ключевых задач ИИ является классификация изображений, которая позволяет распознавать объекты на фотографиях или видео. В данной [...]]]></description>
			<content:encoded><![CDATA[<p style="background: white; text-align: center;"><em><span style="color: black;">Научный руководитель: Вильданов Алмаз Нафкатович<strong><br />
</strong></span>к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p><span>В последние годы искусственный интеллект (ИИ) стал неотъемлемой частью нашей повседневной жизни. Он используется во множестве отраслей, начиная от автоматического перевода текстов и заканчивая самоуправляемыми автомобилями. Одной из ключевых задач ИИ является классификация изображений, которая позволяет распознавать объекты на фотографиях или видео. В данной статье мы рассмотрим процесс построения модели искусственного интеллекта для классификации изображений в задаче распознавания башкирских букв.<br />
</span></p>
<p><span>Распознавание символов на изображениях &#8211; это важная задача, которая имеет множество практических применений, начиная от оптического распознавания символов до систем безопасности. Башкирский алфавит имеет свои особенности и специфические символы, что делает эту задачу ещё более сложной. Построение модели ИИ для классификации башкирских букв позволит улучшить точность распознавания символов на изображениях и создать эффективные системы автоматической обработки данных.<br />
</span></p>
<p><span>В современном мире искусственный интеллект (ИИ) играет все более значимую роль в различных сферах, включая распознавание образов. В задаче распознавания башкирских букв, разработка моделей ИИ является особенно актуальной. Башкирский язык, обладающий своей собственной азбукой, существует и развивается уже несколько веков. Однако, в силу его особенностей, включая присутствие дополнительных букв и комбинированных графем, его автоматическое распознавание остается непростой задачей.<br />
</span></p>
<p><span>Построение модели искусственного интеллекта для классификации башкирских букв на изображениях имеет широкий потенциал применения. Например, такая модель может быть использована в системах обработки почтовых отправлений для автоматического распознавания адреса на конверте или в системах видеонаблюдения для идентификации различных текстовых надписей на объектах. Эта задача становится особенно важной в условиях внедрения цифровых технологий и автоматизации в разных сферах деятельности.<br />
</span></p>
<p><span>На сегодняшний день существует несколько подходов к построению моделей ИИ для классификации изображений. Один из них &#8211; это использование сверточных нейронных сетей (СНС). СНС позволяют выявлять особенности и структуру изображений, делая возможным классификацию объектов. Построение модели ИИ для классификации башкирских букв может включать этот подход и учитывать особенности башкирской азбуки.<br />
</span></p>
<p><span>Помимо СНС, также возможно применение других алгоритмов машинного обучения, таких как метод опорных векторов или решающих деревьев. Эти методы могут быть эффективными при правильной предобработке данных и выборе параметров. Важно учесть, что создание модели ИИ для классификации башкирских букв требует сбора достаточного объема размеченных данных, что может быть нетривиальной задачей.<br />
</span></p>
<p><span>Таким образом, модель ИИ для классификации изображений с башкирскими буквами имеет большую практическую значимость и потенциал для применения в различных областях. Разработка такой модели требует использования специфических методов машинного обучения, предварительную обработку данных и создание размеченного набора для обучения.<br />
</span></p>
<p><span><strong>2) Что делает данный код?<br />
</strong></span></p>
<p><span>Данный код относится к разработке модели искусственного интеллекта для классификации изображений в задаче распознавания башкирских букв. В данном подразделе будет рассмотрено, что конкретно делает данный код.<br />
</span></p>
<p><span>Данный код выполняет следующие шаги:<br />
</span></p>
<p><span>1. Загрузка необходимых библиотек и установка окружения, включая TensorFlow, pandas, numpy, matplotlib для визуализации, и Google Colab для работы с данными на Google Drive.<br />
</span></p>
<p><span>2. Загрузка набора данных для обучения и тестирования из CSV-файлов.<br />
</span></p>
<p><span>3. Подготовка данных: разделение на обучающие и тестовые наборы, нормализация значений пикселей изображений.<br />
</span></p>
<p><span>4. Визуализация обучающих данных для проверки.<br />
</span></p>
<p><span>5. Кодирование категориальных меток классов в формате one-hot encoding.<br />
</span></p>
<p><span>6. Создание нейронной сети с помощью TensorFlow Sequential API с двумя полносвязными слоями.<br />
</span></p>
<p><span>7. Компиляция модели с определением функции потерь, оптимизатора и метрик.<br />
</span></p>
<p><span>8. Обучение нейронной сети на данных обучения.<br />
</span></p>
<p><span>9. Оценка точности модели на данных валидации.<br />
</span></p>
<p><span>10. Предсказание классов для данных валидации и визуализация результатов.<br />
</span></p>
<p><span><strong>Код:<br />
</strong></span></p>
<p><span><span style="background-color: white;"><strong>#загржаем нужные библиотеки</strong></span><br />
<span style="background-color: white;">from tensorflow.keras.models import Sequential</span><br />
<span style="background-color: white;">from tensorflow.keras.layers import Dense, Flatten</span><br />
<span style="background-color: white;">import pandas as pd</span><br />
<span style="background-color: white;">import numpy as np</span><br />
<span style="background-color: white;">import matplotlib.pyplot as plt</span><br />
<span style="background-color: white;">%matplotlib inline</span><br />
<span style="background-color: white;">from google.colab import drive</span><br />
<span style="background-color: white;">drive.mount(&#8216;/content/drive/&#8217;)</span><br />
<span style="background-color: white;"><strong>#укажите свою папку</strong></span><br />
<span style="background-color: white;">DIR = &#8220;dataset1_bashkort&#8221;</span><br />
<span style="background-color: white;">PATH = &#8216;/content/drive/My Drive/&#8217;+ DIR + &#8216;/&#8217;</span><br />
<span style="background-color: white;"><strong>#укажите свои классы</strong></span><br />
<span style="background-color: white;">classes = ["Ә", "Җ", "Ң", "Ө", "Ү", "Һ"]</span><br />
<span style="background-color: white;"><strong># Размеры изображения</strong></span><br />
<span style="background-color: white;">img_width, img_height = 20, 20</span><br />
<span style="background-color: white;"><strong># Размерность тензора на основе изображения для входных данных в нейронную сеть</strong></span><br />
<span style="background-color: white;"># backend Tensorflow, channels_last</span><br />
<span style="background-color: white;">input_shape = (img_width, img_height, 1)</span><br />
<span style="background-color: white;"><strong># Размер мини-выборки</strong></span><br />
<span style="background-color: white;">batch_size = 128</span><br />
<span style="background-color: white;"><strong># количество классификации</strong></span><br />
<span style="background-color: white;">N = len(classes)</span><br />
<span style="background-color: white;"><strong>#Загружаем данные для обучения</strong></span><br />
<span style="background-color: white;">train = pd.read_csv(PATH + &#8216;train.csv&#8217;, sep=&#8221;,&#8221;) #</span><br />
<span style="background-color: white;"><strong>#Загружаем данные для тестирования</strong></span><br />
<span style="background-color: white;">val = pd.read_csv(PATH + &#8216;validate.csv&#8217;)<br />
</span></span></p>
<p><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1454_11.png" alt="" /><span style="consolas; 10pt; background-color: white;"><br />
</span></p>
<p><span><span style="background-color: white;">from tensorflow.keras import utils</span><br />
<span style="background-color: white;">y_train1 = utils.to_categorical(y_train, N)</span><br />
<span style="background-color: white;">y_val1 = utils.to_categorical(y_val, N)</span></span></p>
<p><span style="background-color: white;">model = Sequential()</span><br />
<span style="background-color: white;">model.add(Dense(900, input_dim=400, activation=&#8221;relu&#8221;))</span><br />
<span style="background-color: white;">model.add(Dense( N, activation=&#8221;softmax&#8221;))</span></p>
<p><span style="background-color: white;">model.compile(loss=&#8221;categorical_crossentropy&#8221;, optimizer=&#8221;adam&#8221;, metrics=["accuracy"])</span><br />
<span style="background-color: white;">print(model.summary())</span></p>
<p><span style="background-color: white;">#Обучаем сеть</span><br />
<span style="background-color: white;">model.fit(x_train, y_train1,</span><br />
<span style="background-color: white;">          batch_size=1200,</span><br />
<span style="background-color: white;">          epochs=23,</span><br />
<span style="background-color: white;">          verbose=1)</span></p>
<p><span style="background-color: white;">scores1 = model.evaluate(x_val, y_val1, verbose=1)</span><br />
<span style="background-color: white;">print(&#8220;Доля правильных ответов на валидационных данных, в процентах:&#8221;, round(scores1[1] * 100, 4))</span></p>
<p><span style="background-color: white;">predictions = model.predict(x_val)</span><br />
<span style="background-color: white;">#Преобразуем результаты распознавания из формата one hot encoding в цифры</span><br />
<span style="background-color: white;">predictions = np.argmax(predictions, axis=1)</span><br />
<span style="background-color: white;">#Посмотрим на результат распознавания</span><br />
<span style="background-color: white;">print(&#8220;результат распознавания&#8221;)</span><br />
<span style="background-color: white;">plt.figure(figsize=(10,10))</span><br />
<span style="background-color: white;">start = 0</span><br />
<span style="background-color: white;">for i in range(start,start+50):</span><br />
<span style="background-color: white;">    plt.subplot(5,10,i-start+1)</span><br />
<span style="background-color: white;">    plt.xticks([])</span><br />
<span style="background-color: white;">    plt.yticks([])</span><br />
<span style="background-color: white;">    plt.grid(False)</span><br />
<span style="background-color: white;">    plt.imshow(x_val[i].reshape((img_width, img_height)), cmap=plt.cm.binary)</span><br />
<span style="background-color: white;">    plt.xlabel( &#8220;Это: &#8221; + classes[predictions[i]] )<br />
</span></p>
<p><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1454_12.png" alt="" /><span><strong><br />
</strong></span></p>
<p><span>Результат:<br />
</span></p>
<p><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1454_13.png" alt="" />                 <span><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1454_14.png" alt="" /><br />
</span></p>
<p><span>Этот код обучает нейронную сеть на изображениях, представленных в виде массива пикселей с метками классов, а затем делает предсказания на новых данных и выводит результаты в виде изображений с предсказанными классами.<strong><br />
</strong></span></p>
<p><span>В результате кода выше была построена модель искусственного интеллекта для классификации изображений в задаче распознавания башкирских букв. Были выполнены следующие шаги:<br />
</span></p>
<p><span>1. Загрузка и предобработка данных: был использован набор изображений башкирских букв, которые были преобразованы в формат, необходимый для обучения модели.<br />
</span></p>
<p><span>2. Создание модели нейронной сети: была разработана архитектура нейронной сети, состоящая из сверточных и полносвязных слоев. Это позволяет модели извлекать признаки из изображений и делать классификацию.<br />
</span></p>
<p><span>3. Обучение модели: на основе подготовленных данных модель была обучена с использованием алгоритма обратного распространения ошибки. Процесс обучения включает в себя подбор оптимальных весов и смещений нейронной сети.<br />
</span></p>
<p><span>4. Оценка точности модели: после обучения модель была протестирована на отложенном наборе данных, чтобы оценить ее точность. Это позволяет определить эффективность модели в классификации башкирских букв.<br />
</span></p>
<p><span>5. Заключение: в результате выполненного кода была построена модель искусственного интеллекта, способная классифицировать изображения башкирских букв с высокой точностью. Это может быть полезно при автоматическом распознавании текста на башкирском языке или в любых других задачах, где требуется классификация изображений. Однако, для улучшения результатов модели возможно необходимо дополнительное обучение на большем количестве данных.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2024/06/102168/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сравнительный анализ моделей нейронных сетей в задаче распознавания математических действий</title>
		<link>https://web.snauka.ru/issues/2024/06/102172</link>
		<comments>https://web.snauka.ru/issues/2024/06/102172#comments</comments>
		<pubDate>Tue, 11 Jun 2024 15:16:53 +0000</pubDate>
		<dc:creator>Жеребцова Ксения Владимировна</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Google Colab]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[архитектура нейронных сетей]]></category>
		<category><![CDATA[параметры обучения]]></category>
		<category><![CDATA[эффективность]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2024/06/102172</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович Уфимский университет науки и технологий, Нефтекамский филиал, к.ф.-м.н. TensorFlow &#8211; это библиотека программного обеспечения с открытым исходным кодом, созданная Google, которая используется для внедрения систем машинного обучения и глубокого обучения. Эти два имени содержат ряд мощных алгоритмов, которые разделяют общую задачу &#8211; позволить компьютеру узнать, как автоматически определять сложные шаблоны и / [...]]]></description>
			<content:encoded><![CDATA[<p style="background: white; text-align: center;"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
Уфимский университет науки и технологий, Нефтекамский филиал, к.ф.-м.н.</em></p>
<p style="text-align: justify;"><span>TensorFlow &#8211; это библиотека программного обеспечения с открытым исходным кодом, созданная Google, которая используется для внедрения систем машинного обучения и глубокого обучения. Эти два имени содержат ряд мощных алгоритмов, которые разделяют общую задачу &#8211; позволить компьютеру узнать, как автоматически определять сложные шаблоны и / или принимать наилучшие возможные решения. TensorFlow, в основе своей, является библиотекой для программирования потока данных. Он использует различные методы оптимизации, чтобы сделать вычисления математических выражений проще и эффективнее.<br />
</span></p>
<p style="text-align: justify;"><span>В TensorFlow константы создаются с использованием функции: constant(value, dtype=None, shape=None, name=&#8217;Const&#8217;, verify_shape=False), где value постоянное значение, которое будет использоваться при дальнейших вычислениях, dtype является параметром, указывающим тип данных (например, float32/64, int8/16), shape является необязательным параметром, указывающим размер массива данных, name является необязательным задающим имя для тензора. Если вам нужны константы с определенными значениями внутри вашей обучающей модели, тогда объект типа constant может использоваться </span>как в следующем примере: z = tf.constant(5.2, name=&#8221;x&#8221;, dtype=tf.float32).</p>
<p style="text-align: justify;"><span>Для создания сверточной нейронной сети была выбрана платформа Google Colab. Она обладает рядом преимуществ, а именно универсальна, является бесплатной платформой, представляет мощные технологии обработки данных и машинного обучения.<br />
</span></p>
<p style="text-align: justify;"><span>Таким образом, разработана сверточная нейронная сеть для решения задачи классификации изображений и создано рабочее окружение для написания кода на языке программирования Python.<br />
</span></p>
<p style="text-align: justify;"><span>Решение задачи классификации изображений с помощью сверточных нейронных сетей осуществляет Google Colab — это бесплатный облачный сервис на основе Jupyter Notebook, он предоставляет всё необходимое для машинного обучения прямо в браузере, предоставляет бесплатный доступ.<br />
</span></p>
<p style="text-align: justify;"><span>Google Colab &#8211; блокнот для программирования на языке Python. В нем есть возможность для работы с серьезными технологиями при разработке реальных приложений data science и ML, предоставляет все необходимое для решения задач по анализу и обработке данных (с применимостью к Python).<br />
</span></p>
<p style="text-align: justify;"><span>Python – высокоуровневый язык программирования, который опирается на повышение производительности разработчика и читаемости кода. Это интерпретируемый язык программирования, то есть не требует компиляции в байт-код.<br />
</span></p>
<p style="text-align: justify;"><span>Важным этапом в решении задачи машинного обучения вообще, в т.ч. задачи компьютерного зрения, является этап формирования обучающей выборки, или датасета. При этом на первый план выходит необходимость обеспечения репрезентативности обучающей выборки. Она имеет три аспекта:<br />
</span></p>
<p style="text-align: justify;"><span>– достаточность — число обучающих примеров должно быть достаточным для обучения;<br />
</span></p>
<p style="text-align: justify;"><span>– разнообразие;<br />
</span></p>
<p style="text-align: justify;"><span>– равномерность представления классов.<br />
</span></p>
<p style="text-align: justify;"><span>Датасеты – это то, на чем основывается наука о данных, материал, на котором основаны все исследования. В основном рассматривают два типа данных: традиционные и большие (Big Data).<br />
</span></p>
<p style="text-align: justify;"><span>Традиционные данные (структурируются и хранятся в базах, которые управляются с одного компьютера, данные представлены в виде таблиц, содержащих текст или числа).<br />
</span></p>
<p style="text-align: justify;"><span>Большие данные (массивнее, чем традиционные, основываются как на разнообразии (числа, текст, изображения, аудио, видео и т. д.), так и скорости извлечения и вычисления в реальном времени, и объема.)<br />
</span></p>
<p style="text-align: justify;"><span>Датасеты разделяются на три категории:<br />
</span></p>
<p style="text-align: justify;"><span>1. Простая запись &#8211; это самая простая форма, не имеющая явной связи между строками-наблюдениями или столбцами-признаками (каждая строка имеет одинаковый набор характеристик).<br />
</span></p>
<p style="text-align: justify;"><span>2. Графы (отношения между объектами фиксируются связями).<br />
</span></p>
<p style="text-align: justify;"><span>3. Упорядоченные записи (некоторые данные упорядочены во времени или пространстве).<br />
</span></p>
<p style="text-align: justify;"><span>Разработка моделей нейронной сети выполняется в облачном сервисе Google Colab. На первом этапе создается папка, в которой будет находится датасет и скрипт с нейронной сетью.<br />
</span></p>
<p style="text-align: justify;"><span>Работа над нейронной сетью начинается с добавления библиотек Tensorflow. Загружаем нужные библиотеки:<br />
</span></p>
<p style="text-align: justify;"><span>from tensorflow.keras.models import Sequential<br />
</span></p>
<p style="text-align: justify;"><span>from tensorflow.keras.layers import Dense, Flatten<br />
</span></p>
<p style="text-align: justify;"><span>import pandas as pd<br />
</span></p>
<p style="text-align: justify;"><span>import numpy as np<br />
</span></p>
<p style="text-align: justify;"><span>import matplotlib.pyplot as plt<br />
</span></p>
<p style="text-align: justify;"><span>Так как нейронная сеть создается на сервисе Google Colab, датасет находится на Google диске, необходимо подключить диск к сети.<br />
</span></p>
<p style="text-align: justify;"><span>from google.colab import drive<br />
</span></p>
<p style="text-align: justify;"><span>drive.mount(&#8216;/content/drive/&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span>В случае успешного подключения к диску появляется всплывающее окно, говорящее об успешном подключении к нему.<br />
</span></p>
<p style="text-align: justify;"><span>Drive mounted at /content/drive/; to attempt to forcibly remount, call drive.mount(&#8220;/content/drive/&#8221;, force_remount=True).<br />
</span></p>
<p style="text-align: justify;"><span>Переменная PATH показывает путь сети к ранее созданному датасету.<br />
</span></p>
<p style="text-align: justify;"><span>PATH = &#8216;/content/drive/My Drive/II/nf/&#8217;<br />
</span></p>
<p style="text-align: justify;"><span>Далее создадим переменные, которые будут содержать названия наших классов<br />
</span></p>
<p style="text-align: justify;"><span><span>target_name = ["</span><span>✖</span><span>","</span><span>✚</span><span>","&lt;","&gt;","±","•","–","="]<br />
</span></span></p>
<p style="text-align: justify;"><span>DIR = &#8220;dataset_ _mathdeystvo &#8221;<br />
</span></p>
<p style="text-align: justify;"><span>PATH = &#8216;/content/drive/My Drive/&#8217;+ DIR + &#8216;/&#8217;<br />
</span></p>
<p style="text-align: justify;"><span>PATH – корневой каталог для всех имеющихся на диске датасетов.<br />
</span></p>
<p style="text-align: justify;"><span>Переменные train_dir, test_dir, pred_dir – это пути, которые указывают на каталоги с данными для: обучения, тестирования, предсказания.<br />
</span></p>
<p style="text-align: justify;"><span>Следующим шагом указываем размер изображения. Тензоры можно рассматривать как матрицы, с формами. В Keras сам входной слой – это не слой, а тензор. Это стартовый тензор, который отправляется на первый скрытый слой. Этот тензор должен иметь ту же форму, что и тренировочные данные. Размер изображений в датасете составляет 20*20. Более удобно вводить переменную input_shape, которая в себе содержит сразу размерность изображений и количество фильтров.<br />
</span></p>
<p style="text-align: justify;"><span>В данной сети фильтр 1, так как используемые изображения в черно-белом цвете. Указываем размер мини-выборки с помощью переменной batch_size, которая отображает количество изображений, которые изучает модель за один проход. Нейронная сеть работает с данными постепенно, обработка происходит последовательно (частями).<br />
</span></p>
<p style="text-align: justify;"><span># Размеры изображения<br />
</span></p>
<p style="text-align: justify;"><span>img_width, img_height = 20, 20<br />
</span></p>
<p style="text-align: justify;"><span>input_shape = (img_width, img_height, 1)<br />
</span></p>
<p style="text-align: justify;"><span># Размер мини-выборки<br />
</span></p>
<p style="text-align: justify;"><span>batch_size = 128<br />
</span></p>
<p style="text-align: justify;"><span># количество классификации<br />
</span></p>
<p style="text-align: justify;"><span>N = len(classes)<br />
</span></p>
<p style="text-align: justify;"><span>Загружаем данные для обучения с помощью метода pd.read_csv:<br />
</span></p>
<p style="text-align: justify;"><span>train = pd.read_csv(PATH + &#8216;train.csv&#8217;, sep=&#8221;,&#8221;) #, nrows=3975<br />
</span></p>
<p style="text-align: justify;"><span>Загружаем данные для тестирования:<br />
</span></p>
<p style="text-align: justify;"><span>val = pd.read_csv(PATH + &#8216;validate.csv&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span>Исследуем данные. Просматриваем данные для обучения:<br />
</span></p>
<p style="text-align: justify;"><span>train[:5]<br />
</span></p>
<p style="text-align: justify;"><span>Выбираем 8 видов изображений (знак умножения, знак сложения, знак больше, знак меньше, знак плюс-минус, точка, знак минус, знак равно). Посмотрим на тренировочные данные:<br />
</span></p>
<p style="text-align: justify;"><span>plt.figure(figsize=(10,10))<br />
</span></p>
<p style="text-align: justify;"><span>start = 0<br />
</span></p>
<p style="text-align: justify;"><span>for i in range(start,start+50):<br />
</span></p>
<p style="text-align: justify;"><span> plt.subplot(5,10,i-start+1)<br />
</span></p>
<p style="text-align: justify;"><span> plt.xticks([])<br />
</span></p>
<p style="text-align: justify;"><span> plt.yticks([])<br />
</span></p>
<p style="text-align: justify;"><span> plt.grid(False)<br />
</span></p>
<p style="text-align: justify;"><span> plt.imshow(x_train[i].reshape((img_width, img_height)), cmap=plt.cm.binary)<br />
</span></p>
<p style="text-align: justify;"><span> plt.xlabel(classes[y_train[i]])<br />
</span></p>
<p style="text-align: justify;"><span>Был собран датасет в количестве нескольки тысяч изображений в черно-белом цвете (рисунок 6), так как для отработки нейронной сети необходимо большое количество изображений (при малых объемах датасета сеть свою работу не выполняет).<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1510_1.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span><em>Рисунок 1. Датасет<br />
</em></span></p>
<p style="text-align: justify;"><span>Работа нейронной сети рассматривается в трех моделях.<br />
</span></p>
<p style="text-align: justify;"><span>1.    Двухслойная нейронная сеть.<br />
</span></p>
<p style="text-align: justify;"><span>Рассматривается сеть из двух нейронных слоев. Для создания модели используется класс Sequential. На входном слое находятся 1000 нейронов. Функция активации (запуска) relu, размер входных данных = 1024. На последнем слое должно быть 4 нейрона, так как это количество должно совпадать с количеством классификаций изображений (треугольник, квадрат, окружность, ромб).<br />
</span></p>
<p style="text-align: justify;"><span>Активация последнего слоя выполняется с помощью функции softmax.<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1510_2.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span><em>Рисунок 2. Характеристики двухслойной модели<br />
</em></span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1510_3.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span><em>Рисунок 3. Предсказание нейронной сети<br />
</em></span></p>
<p style="text-align: center;"><span><em>С помощью функции summary просматриваются все характеристики полученной трехслойной модели (рисунок 5).<br />
</em></span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1510_4.png" alt="" /><span><em><br />
</em></span></p>
<p style="text-align: center;"><span><em>Рисунок 4. Характеристики трехслойной модели<br />
</em></span></p>
<p><span>Полносвязная нейронная сеть недостаточно качественно выполняет работу с изображениями. Прогресс обучения двуслойной нейронной сети (78 %) и трехслойной нейронной сети (79 %) растет достаточно медленно, за счет увеличения количества слоев. Более качественный результат можно получить лишь, построив сверточную нейронную сеть.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1510_5.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span><em>Рисунок 5. Характеристики сверточной нейронной сети<br />
</em></span></p>
<p style="text-align: justify;"><span>Для распознавания дальнейших изображений используется метод predict, который позволяет распознавать, а далее выводить распознанные и истинные объекты. Подготовим в Paint собственные изображения и загрузим их на гугл-диск (рисунок 6)<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1510_6.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span><em>Рисунок 6. Собственные изображения для проверки работы нейронной сети<br />
</em></span></p>
<p style="text-align: center;"><span><em>По итогам распознавания собственных изображений можно сделать следующий вывод (таблица 1):<br />
</em></span></p>
<p style="text-align: left;"><span><em>Таблица 1. Качество распознавания собственных изображений<br />
</em></span></p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 328px;" />
<col style="width: 328px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 1pt;">
<p style="text-align: center;"><span><em>Структура НС</em></span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 1pt; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span><em>Качество распознавания</em></span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span><em>Полносвязная нейронная сеть из двух слоев </em></span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span><em>99.85 %</em></span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span><em>Полносвязная нейронная сеть из трех слоев: </em></span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span><em>99.72 %</em></span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span><em>Сверточная нейронная сеть с двумя сверточными слоями</em></span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span><em>99.94 %</em></span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="text-align: justify;"><span><em>Статья посвящена моделированию сверточной нейронной сети для классификации изображений. В результате ее выполнения был спроектирован, реализован и протестирован скрипт на языке программирования Python, с использованием библиотеки Tensorflow, позволяющий распознать на изображении геометрические фигуры и перевести распознанные на изображении данные в массив.<br />
</em></span></p>
<p style="text-align: justify;"><span><em>Для тестирования работоспособности нейронных сетей на вход системы подавались изображения. По окончании обучения каждой нейронной сети были получены данные, необходимые для сравнения работоспособности каждой сети, построены графики, показывающие эффективность увеличения количества слоев в нейронных сетях.<br />
</em></span></p>
<p style="text-align: justify;"><span><em>По результатам полученных данных были выявлены положительные стороны нейронных сетей и их недостатки, а также предложены варианты улучшения.</em></span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2024/06/102172/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Технологии искусственного интеллекта для распознавания изображений согласных букв</title>
		<link>https://web.snauka.ru/issues/2024/06/102167</link>
		<comments>https://web.snauka.ru/issues/2024/06/102167#comments</comments>
		<pubDate>Tue, 11 Jun 2024 15:21:19 +0000</pubDate>
		<dc:creator>author20348</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[CNN]]></category>
		<category><![CDATA[Google Colab]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[искусственный интеллект]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[нейронные сети]]></category>
		<category><![CDATA[распознавание букв]]></category>
		<category><![CDATA[сверточные нейронные сети]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2024/06/102167</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович Уфимский университет науки и технологий, Нефтекамский филиал, к.ф.-м.н. Современные технологии искусственного интеллекта (ИИ) и машинного обучения (МО) приобретают все большую популярность и находят применение в различных сферах деятельности. Одним из наиболее перспективных направлений является использование нейронных сетей для решения задач распознавания и классификации. В данной статье рассматриваются возможности и методы применения нейронных [...]]]></description>
			<content:encoded><![CDATA[<p style="background: white; text-align: center;"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
</em><em><em>Уфимский университет науки и технологий, Нефтекамский филиал, </em>к.ф.-м.н.</em></p>
<p style="text-align: justify;"><span>Современные технологии искусственного интеллекта (ИИ) и машинного обучения (МО) приобретают все большую популярность и находят применение в различных сферах деятельности. Одним из наиболее перспективных направлений является использование нейронных сетей для решения задач распознавания и классификации. В данной статье рассматриваются возможности и методы применения нейронных сетей для распознавания согласных букв.<br />
</span></p>
<p style="text-align: justify;"><span>История машинного обучения начинается с середины XX века. В 1952 году Артур Самуэль разработал первую самообучающуюся программу для игры в шашки, что стало отправной точкой в развитии МО. Позже, в 1959 году, он начал работу над методами МО для нейронных сетей. С тех пор технологии существенно эволюционировали и получили широкое распространение.<br />
</span></p>
<p style="text-align: justify;"><span>Нейронные сети являются ключевым элементом систем машинного обучения. Они состоят из множества взаимосвязанных нейронов, организованных в слои. Каждый нейрон получает входные данные, обрабатывает их с помощью весовых коэффициентов и передает результат на выход.<br />
</span></p>
<p style="text-align: justify;"><span>Для разработки и обучения нейронных сетей широко используется библиотека TensorFlow, предоставляемая Google. Она обеспечивает высокую производительность и гибкость при создании сложных моделей МО. TensorFlow поддерживает работу как на CPU, так и на GPU, что позволяет значительно ускорить процесс обучения нейронных сетей.<br />
</span></p>
<p style="text-align: justify;"><span>Google Colab предоставляет удобную среду для разработки и обучения моделей машинного обучения. Это облачный сервис, который позволяет использовать мощные вычислительные ресурсы Google без необходимости установки дополнительного программного обеспечения. Colab поддерживает работу с Jupyter Notebook и позволяет совместно работать над проектами в реальном времени​.<br />
</span></p>
<p style="text-align: justify;"><span>Первым шагом в создании системы распознавания является сбор и подготовка данных. Для обучения нейронной сети необходим большой объем данных, содержащий изображения согласных букв. Эти данные проходят этапы предобработки, включая нормализацию и аугментацию, что улучшает качество модели и её способность к обобщению.<br />
</span></p>
<p style="text-align: justify;"><span><span>Формат данных выборки для обучения </span><span>train.csv</span><span> выглядит следующим образом: каждая строка представляет собой описание одного изображения; первый столбец содержит метки классов, к которым принадлежит изображение; оставшиеся столбцы содержат пиксельные значения изображения, например, в виде плоского вектора, где каждое значение соответствует яркости соответствующего пикселя на изображении [1].<br />
</span></span></p>
<p style="text-align: justify;"><span>У нас будут следующие классы согласных букв:<br />
</span></p>
<p style="text-align: justify;"><span>classes = ["к","л","м","н","п","р","с","т"]<br />
</span></p>
<p style="text-align: justify;"><span>Загрузим и посмотрим на датасет (рисунок 1):<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1517_1.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 1. Датасет согласных букв<br />
</span></p>
<p style="text-align: justify;"><span>После подготовки данных, создаются и обучаются модели нейронных сетей. Используются различные архитектуры, такие как сверточные нейронные сети (CNN), которые особенно эффективны в задачах распознавания образов. Обучение модели проводится на обучающем наборе данных с последующей проверкой на валидационном наборе для оценки её производительности.<br />
</span></p>
<p style="text-align: justify;"><span>Работа нейронной сети рассматривается в трех моделях.<br />
</span></p>
<p style="text-align: justify;"><span>1.    Двухслойная нейронная сеть.<br />
</span></p>
<p style="text-align: justify;"><span><span>На первом шаге рассматривается сеть из двух нейронных слоев [2]. Для создания модели используется класс </span><span>Sequential</span><span>. На входном слое находятся 700 нейронов. Функция активации (запуска) </span><span>relu</span><span>, размер входных данных равен 400 (у нас картинки 20 на 20). На последнем слое должно быть 8 нейронов, так как это количество должно совпадать с количеством классификаций изображений [3] (у нас согласные буквы &#8220;к&#8221;,&#8221;л&#8221;,&#8221;м&#8221;,&#8221;н&#8221;,&#8221;п&#8221;,&#8221;р&#8221;,&#8221;с&#8221;,&#8221;т&#8221;). Модель нейронной сети строится с помощью класса </span><span>Sequential</span><span> [4].<br />
</span></span></p>
<p style="text-align: justify;"><span>N = 8<br />
</span></p>
<p style="text-align: justify;"><span>model = Sequential()<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense(700, input_dim=400, activation=&#8221;relu&#8221;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense( N, activation=&#8221;softmax&#8221;))<br />
</span></p>
<p>Приступаем к обучению модели с помощью метода <span>fit </span>модели (рисунок 2).</p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1517_2.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 2. Ход обучения нейронной сети<br />
</span></p>
<p style="text-align: justify;"><span>Можно посмотреть, как нейронная сеть делает предсказание на тестовых данных. Для этого применяется метод predict:<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1517_3.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 3. Валидация нейронной сети<br />
</span></p>
<p style="text-align: justify;"><span>2. Трехслойная нейронная сеть.<br />
</span></p>
<p style="text-align: justify;"><span><span>Усложним нейронную сеть, сделав 3 слоя. Рассматривается сеть из трех нейронных слоев:</span><span><br />
</span></span></p>
<p style="text-align: justify;"><span>model = Sequential()<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense(700, input_dim=400, activation=&#8221;relu&#8221;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense(100, activation=&#8221;relu&#8221;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense( N, activation=&#8221;softmax&#8221;))<br />
</span></p>
<p style="text-align: justify;"><span>Остальные шаги проделываются аналогично.<br />
</span></p>
<p style="text-align: justify;"><span>3. Сверточная нейронная сеть.<br />
</span></p>
<p style="text-align: justify;"><span>Полносвязная нейронная сеть недостаточно качественно выполняет работу с изображениями. Прогресс обучения двуслойной нейронной сети и трехслойной нейронной сети растет достаточно медленно, за счет увеличения количества слоев. Более качественный результат можно получить, построив сверточную нейронную сеть:<br />
</span></p>
<p style="text-align: justify;"><span>model = Sequential()<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Conv2D(32, (3, 3),<br />
</span></p>
<p style="text-align: justify; margin-left: 35pt;"><span>input_shape=(img_width, img_height, 1), activation=&#8217;relu&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(MaxPooling2D(pool_size=(2,2)))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Conv2D(64, (3, 3), activation=&#8217;relu&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(MaxPooling2D(pool_size=(2, 2)))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Flatten())<br />
</span></p>
<p style="text-align: justify;"><span>model.add( Dense( 700, activation = &#8216;relu&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add( Dense( N, activation=&#8217;softmax&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span>Обучение проводится аналогично. По итогам распознавания собственных изображений можно сделать следующий вывод (таблица 1):<br />
</span></p>
<p><span style="color: black;">Таблица 1 – Качество распознавания изображений нейронными сетями<br />
</span></p>
<div style="margin-left: 5pt;">
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 262px;" />
<col style="width: 329px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 1pt;">
<p style="text-align: center;"><span>Структура НС</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 1pt; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;" valign="middle">
<p style="text-align: center;"><span style="color: black;">Качество распознавания</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span style="times new roman; 10pt; background-color: white;">Полносвязная нейронная сеть из двух слоев </span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;" valign="middle">
<p style="text-align: center;"><span style="times new roman; 10pt; background-color: white;">97.75 %</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span style="times new roman; 10pt; background-color: white;">Полносвязная нейронная сеть из трех слоев </span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;" valign="middle">
<p style="text-align: center;"><span style="times new roman; 10pt; background-color: white;">98.25 %</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span style="times new roman; 10pt; background-color: white;">Сверточная нейронная сеть с двумя сверточными слоями</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;" valign="middle">
<p style="text-align: center;"><span style="times new roman; 10pt; background-color: white;">99.65 %</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="text-align: justify;"><span>Подготовим также в Paint собственные изображения и загрузим их на гугл-диск (рисунок 4).<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1517_4.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span style="color: black;">Рисунок 4. Собственные изображения для проверки<br />
</span></p>
<p style="text-align: center;"><span style="color: black;">работы нейронной сети<br />
</span></p>
<p style="text-align: justify;"><span>Обученная нейронная сеть используется для распознавания согласных букв на новых данных. Модель анализирует входное изображение и выдает прогнозируемую букву с определенной вероятностью. Точность распознавания оценивается на тестовом наборе данных, который не использовался в процессе обучения, что позволяет объективно оценить её эффективность.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061124_1517_5.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 5. Распознавание и предсказание нейронной сети<br />
</span></p>
<p style="text-align: justify;"><span>Сверточная нейронная сеть будет, как и ожидалось, давать наилучшее предсказание.<br />
</span></p>
<p style="text-align: justify;"><span>Заключение. Разработка и использование нейронных сетей для распознавания согласных букв демонстрирует высокую эффективность и перспективность данного подхода. Применение библиотек TensorFlow и сервисов, таких как Google Colab, значительно упрощает процесс создания и обучения моделей машинного обучения. Эти технологии открывают новые возможности для автоматизации процессов и повышения точности распознавания в различных приложениях.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2024/06/102167/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Распознавание рукописных цифр с помощью сверточных нейронных сетей на Python</title>
		<link>https://web.snauka.ru/issues/2025/12/104001</link>
		<comments>https://web.snauka.ru/issues/2025/12/104001#comments</comments>
		<pubDate>Fri, 05 Dec 2025 14:40:16 +0000</pubDate>
		<dc:creator>Мухаяров Дильназ Данисович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[MNIST]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[автоматизация]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[распознавание рукописных цифр]]></category>
		<category><![CDATA[сверточные нейронные сети]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2025/12/104001</guid>
		<description><![CDATA[Введение Автоматическое распознавание рукописных цифр — одна из классических задач машинного обучения, которая широко применяется в системах обработки документов и автоматической сортировке почты. Для её решения используют современные методы глубокого обучения, например, сверточные нейронные сети. Рисунок 1. Архитектура сверточной нейронной сети Алгоритм решения задачи - импортируем библиотеки `tensorflow.keras`, `pandas`, `numpy`, `matplotlib` и инструменты для аугментации; [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><strong>Введение</strong></p>
<p style="text-align: justify;"><span>Автоматическое распознавание рукописных цифр — одна из классических задач машинного обучения, которая широко применяется в системах обработки документов и автоматической сортировке почты. Для её решения используют современные методы глубокого обучения, например, сверточные нейронные сети.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/121725_1359_1.png" alt="" /></p>
<p style="text-align: center;"><span>Рисунок 1. Архитектура сверточной нейронной сети<strong><span><br />
</span></strong></span></p>
<p style="text-align: justify;"><span>Алгоритм решения задачи<br />
</span></p>
<p style="text-align: justify;"><span>- импортируем библиотеки `tensorflow.keras`, `pandas`, `numpy`, `matplotlib` и инструменты для аугментации;<br />
</span></p>
<p style="text-align: justify;"><span>- загружаем и проверяем структуру данных через `pd.read_csv()`;<br />
</span></p>
<p style="text-align: justify;"><span>- извлекаем метки и изображения, нормализуем их и преобразуем форму для подачи в модель;<br />
</span></p>
<p style="text-align: justify;"><span>- создаем сверточную модель с помощью `Sequential()`, добавляя слои Conv2D, MaxPooling2D, Dropout;<br />
</span></p>
<p style="text-align: justify;"><span>- компилируем модель, указывая функцию потерь и оптимизатор;<br />
</span></p>
<p style="text-align: justify;"><span>- задаем коллбеки для ранней остановки и снижения скорости обучения;<br />
</span></p>
<p style="text-align: justify;"><span>- делим данные на обучающую и валидационную выборки;<br />
</span></p>
<p style="text-align: justify;"><span>- применяем аугментацию данных через `ImageDataGenerator`;<br />
</span></p>
<p style="text-align: justify;"><span>- обучаем модель с помощью метода `fit()`, использующего генератор и коллбеки;<br />
</span></p>
<p style="text-align: justify;"><span>- визуализируем процесс обучения, строя графики точности и потерь;<br />
</span></p>
<p style="text-align: justify;"><span>- делаем предсказания на тестовом наборе и сохраняем их в CSV файл.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/121725_1359_2.png" alt="" /></p>
<p style="text-align: center;"><span>Рисунок 2. Схема процесса обучения<strong><span><br />
</span></strong></span></p>
<p><span>Код:<br />
</span></p>
<p><span>python<br />
</span></p>
<p><span># Создаем модель<br />
</span></p>
<p><span>model = Sequential()<br />
</span></p>
<p><span>model.add(Conv2D(32, (3,3), activation=&#8217;relu&#8217;, padding=&#8217;same&#8217;, input_shape=(28,28,1)))<br />
</span></p>
<p><span>model.add(BatchNormalization())<br />
</span></p>
<p><span>model.add(MaxPooling2D(pool_size=(2,2)))<br />
</span></p>
<p><span>model.add(Dropout(0.25))<br />
</span></p>
<p><span># (добавляем дополнительные слои)<br />
</span></p>
<p><span>model.add(Dense(10, activation=&#8217;softmax&#8217;))<br />
</span></p>
<p><span># Компиляция модели<br />
</span></p>
<p><span>model.compile(loss=&#8217;categorical_crossentropy&#8217;, optimizer=&#8217;adam&#8217;, metrics=['accuracy'])<br />
</span></p>
<p><span>…<br />
</span></p>
<p><span>…<br />
</span></p>
<p><span># Обучение модели с аугментацией<br />
</span></p>
<p><span>history = model.fit(<br />
</span></p>
<p style="padding-left: 30px;"><span> datagen.flow(x_train_part, y_train_part, batch_size=128),<br />
</span></p>
<p style="padding-left: 30px;"><span> epochs=100,<br />
</span></p>
<p style="padding-left: 30px;"><span> validation_data=(x_val, y_val),<br />
</span></p>
<p style="padding-left: 30px;"><span> callbacks=[early_stop, reduce_lr, lr_scheduler],<br />
</span></p>
<p style="padding-left: 30px;"><span> verbose=1<br />
</span></p>
<p><span>)<br />
</span></p>
<p><span>…<br />
</span></p>
<p><span>…<br />
</span></p>
<p><span>python<br />
</span></p>
<p><span># Визуализация результатов<br />
</span></p>
<p><span>plt.plot(history.history['accuracy'], label=&#8217;Train Accuracy&#8217;)<br />
</span></p>
<p><span>plt.plot(history.history['val_accuracy'], label=&#8217;Validation Accuracy&#8217;)<br />
</span></p>
<p><span>plt.legend()<br />
</span></p>
<p><span>…<br />
</span></p>
<p style="text-align: justify;"><span><strong>Вывод:<br />
</strong></span></p>
<p style="text-align: justify;"><span>В статье рассмотрена реализация сверточной нейронной сети для распознавания рукописных цифр. Использование методов аугментации и коллбеков позволяет повысить точность модели и избежать переобучения. Визуализация процесса обучения помогает контролировать качество модели. Правильная подготовка данных и архитектуры — залог успешного решения задачи. Такой подход широко применяется в системах автоматической обработки изображений.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/12/104001/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Классификация Ирисов Фишера с использованием нейронных сетей: подход на основе Keras</title>
		<link>https://web.snauka.ru/issues/2025/12/103966</link>
		<comments>https://web.snauka.ru/issues/2025/12/103966#comments</comments>
		<pubDate>Tue, 09 Dec 2025 09:57:53 +0000</pubDate>
		<dc:creator>Хасанов Даниэль Рустамович</dc:creator>
				<category><![CDATA[01.00.00 ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Keras]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[Ирисы Фишера]]></category>
		<category><![CDATA[Классификация]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[нейронная сеть]]></category>
		<category><![CDATA[предсказание вида]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2025/12/103966</guid>
		<description><![CDATA[Классификация Ирисов Фишера остается фундаментальной и актуальной задачей в области машинного обучения и искусственного интеллекта. Набор данных, включающий измерения чашелистиков и лепестков трех видов ирисов, десятилетиями используется как идеальный полигон для тестирования алгоритмов классификации, от линейных моделей до глубоких нейронных сетей. В эпоху повсеместного распространения ИИ эта задача сохраняет свою дидактическую ценность, позволяя наглядно демонстрировать [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Классификация Ирисов Фишера остается фундаментальной и актуальной задачей в области машинного обучения и искусственного интеллекта. Набор данных, включающий измерения чашелистиков и лепестков трех видов ирисов, десятилетиями используется как идеальный полигон для тестирования алгоритмов классификации, от линейных моделей до глубоких нейронных сетей. В эпоху повсеместного распространения ИИ эта задача сохраняет свою дидактическую ценность, позволяя наглядно демонстрировать этапы построения модели: от загрузки данных и их нормализации до проектирования архитектуры сети и анализа её точности. Использование современных фреймворков, таких как TensorFlow и Keras, делает процесс доступным даже для новичков, а сама задача служит отправной точкой для решения более сложных проблем компьютерного зрения и анализа данных.</p>
<p style="text-align: justify;"><span>В данной работе для классификации ирисов используется полносвязная нейронная сеть, реализованная на Keras. Модель принимает на вход четыре нормализованных признака: длину и ширину чашелистика, длину и ширину лепестка. Архитектура сети включает скрытые слои с функцией активации ReLU и выходной слой с функцией softmax для многоклассовой классификации. Обучение проводится с оптимизатором Adam на протяжении 20 эпох, а процесс отслеживается по графикам точности на обучающей и проверочной выборках. Такой подход позволяет достичь высокой точности предсказания и служит примером стандартного пайплайна для задач классификации табличных данных.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/120925_0954_1.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 1. Динамика точности модели в процессе обучения<br />
</span></p>
<p style="text-align: justify;"><span>Алгоритм решения задачи по построению модели классификации для набора данных Ирисов Фишера включает следующие последовательные шаги с использованием языка Python и библиотек TensorFlow/Keras.<br />
</span></p>
<ul>
<li><span style="text-align: justify;">импортируем необходимые библиотеки: TensorFlow/Keras, pandas, numpy и matplotlib;</span></li>
<li>подключаем Google Drive и загружаем обучающий и тестовый наборы данных из CSV-файлов;</li>
<li>выделяем матрицу признаков и вектор целевой переменной из обучающих данных;</li>
<li>проводим стандартизацию признаков, вычитая среднее значение и деля на стандартное отклонение;</li>
<li>создаём последовательную модель нейронной сети с двумя скрытыми полносвязными слоями и выходным слоем на 3 нейрона;</li>
<li>компилируем модель, выбирая оптимизатор Adam и функцию потерь sparse_categorical_crossentropy;</li>
<li>обучаем модель на подготовленных данных, выделяя часть для валидации;</li>
<li><span style="text-align: justify;">строим график изменения точности на обучающей и проверочной выборках по эпохам;</span></li>
<li>используем обученную модель для предсказания классов на тестовом наборе данных;</li>
<li>
<div style="text-align: justify;">сохраняем результаты предсказаний в файл для отправки или последующего анализа.</div>
</li>
</ul>
<p>Этот алгоритм является типовым для задач классификации и демонстрирует ключевые этапы работы с нейронными сетями в Keras.</p>
<p style="text-align: justify;">Ниже приведен фрагмент кода, реализующий ключевые шаги алгоритма:<span style="background-color: lime;"><br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">from tensorflow.keras.models import Sequential<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">from tensorflow.keras.layers import Dense<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">import pandas as pd<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">import numpy as np<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">import matplotlib.pyplot as plt<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">train = pd.read_csv(&#8216;train.csv&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">test = pd.read_csv(&#8216;test.csv&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">features = ["SepalLength", "SepalWidth", "PetalLength", "PetalWidth"]<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">target = &#8216;Species&#8217;<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_train = train[features].values<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">y_train = train[target].values<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_test = test[features].values<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">mean = x_train.mean(axis=0)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">std = x_train.std(axis=0)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_train -= mean<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_train /= std<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_test -= mean<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_test /= std<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model = Sequential()<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model.add(Dense(100, activation=&#8217;relu&#8217;, input_shape=(x_train.shape[1],)))<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model.add(Dense(16, activation=&#8217;relu&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model.add(Dense(3, activation=&#8217;softmax&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model.compile(optimizer=&#8217;adam&#8217;,<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;"> loss=&#8217;sparse_categorical_crossentropy&#8217;,<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;"> metrics=['accuracy'])<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">history = model.fit(x_train, y_train, epochs=20, validation_split=0.1, verbose=2)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.plot(history.history['accuracy'], label=&#8217;Точность на обучении&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.plot(history.history['val_accuracy'], label=&#8217;Точность на валидации&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.xlabel(&#8216;Эпоха&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.ylabel(&#8216;Точность&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.legend()<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.show()<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">predictions = model.predict(x_test)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">predictions = np.argmax(predictions, axis=1)</span></p>
<p style="text-align: justify;">Процесс обучения модели визуализирован на Рисунке 2 (изображение сгенерировано нейросетью):</p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/120925_0954_2.png" alt="" /></p>
<p style="text-align: center;">Рисунок 2. Архитектура используемой нейронной сети</p>
<p style="text-align: left;"><strong>Заключение<br />
</strong></p>
<p style="text-align: justify;">Задача классификации Ирисов Фишера, несмотря на свою простоту и давнюю историю, продолжает оставаться важным учебным и тестовым инструментом в области машинного обучения. Использование нейронных сетей, как показано в работе, позволяет эффективно решать эту задачу, демонстрируя типичный пайплайн для обработки табличных данных. Ключевыми этапами являются корректная предобработка данных, выбор архитектуры сети и мониторинг процесса обучения. Модель успешно справляется с классификацией, что подтверждает применимость полносвязных сетей для подобных задач. Освоение работы с этим набором данных формирует прочную основу для перехода к более сложным современным проблемам искусственного интеллекта.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/12/103966/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Предсказание вида ириса с использованием нейронной сети: классический пример классификации на Python</title>
		<link>https://web.snauka.ru/issues/2026/02/104205</link>
		<comments>https://web.snauka.ru/issues/2026/02/104205#comments</comments>
		<pubDate>Fri, 13 Feb 2026 13:49:35 +0000</pubDate>
		<dc:creator>Талипов Дамир Зинфирович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[глубокое обучение]]></category>
		<category><![CDATA[классификация ириса]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[многоклассовая классификация]]></category>
		<category><![CDATA[нейронная сеть]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2026/02/104205</guid>
		<description><![CDATA[Использование нейронных сетей для решения классических задач машинного обучения, таких как классификация ирисов по набору данных Фишера, остается актуальной темой как для образовательных целей, так и для отработки промышленных методов построения моделей. Несмотря на простоту и небольшой объем данных, задача позволяет продемонстрировать полный цикл разработки модели глубокого обучения: от предобработки данных до обучения и оценки. [...]]]></description>
			<content:encoded><![CDATA[<p>Использование нейронных сетей для решения классических задач машинного обучения, таких как классификация ирисов по набору данных Фишера, остается актуальной темой как для образовательных целей, так и для отработки промышленных методов построения моделей. Несмотря на простоту и небольшой объем данных, задача позволяет продемонстрировать полный цикл разработки модели глубокого обучения: от предобработки данных до обучения и оценки. Актуальность темы подкрепляется необходимостью в надежных и интерпретируемых методах классификации в биологии, экологии и сельском хозяйстве, где точное определение вида растения по измеряемым параметрам имеет практическую ценность. Более того, предложенный подход с использованием регуляризации и современных методов оптимизации обучения демонстрирует, как методы глубокого обучения могут быть эффективно применены к структурированным данным небольшой размерности, что часто встречается в реальных прикладных задачах.</p>
<p>Алгоритм решения задачи по классификации цветков ириса на три вида включает следующие последовательные шаги реализации на Python с использованием нейронной сети.</p>
<p><strong>1.</strong> импортируем необходимые библиотеки: pandas, numpy, tensorflow/keras, scikit-learn, matplotlib;</p>
<p>2.  подключаем Google Drive и загружаем файлы с данными (train.csv, test.csv) и шаблоном для ответов (sample_submission.csv);</p>
<p>3.  проводим разведочный анализ данных, просматривая структуру обучающего и тестового наборов;</p>
<p>4.  выделяем из данных признаки (sepal length, sepal width, petal length, petal width) и целевую переменную (species);</p>
<p>5.  преобразуем данные в массивы NumPy для дальнейшей обработки;</p>
<p>6.  выполняем стандартизацию признаков с помощью StandardScaler, вычитая среднее и деля на стандартное отклонение;</p>
<p>7.  разделяем обучающие данные на тренировочную и валидационную выборки;</p>
<p>8.  создаем архитектуру последовательной нейронной сети с использованием Dense-слоев, BatchNormalization и Dropout для регуляризации;</p>
<p>9.  компилируем модель, задавая оптимизатор Adam, функцию потерь sparse_categorical_crossentropy и метрику accuracy;</p>
<p>10. определяем коллбэки для управления процессом обучения: EarlyStopping для остановки при переобучении и ReduceLROnPlateau для динамического снижения скорости обучения;</p>
<p>11. обучаем модель на тренировочных данных, используя валидационную выборку для контроля;</p>
<p>12. визуализируем историю обучения, строя графики точности на тренировочном и проверочном наборах;</p>
<p>13. выполняем предсказание на тестовых данных, преобразованных с помощью того же scaler;</p>
<p>14. преобразуем выходные вероятности модели в предсказанные классы с помощью argmax;</p>
<p>15. сохраняем результаты предсказаний в файл формата CSV для последующей отправки или анализа.</p>
<p>Этот алгоритм представляет собой законченный конвейер машинного обучения, от данных до готовых предсказаний, и может служить шаблоном для решения схожих задач классификации.</p>
<p>Код реализации ключевых этапов:</p>
<p>import pandas as pd</p>
<p>import numpy as np</p>
<p>import tensorflow as tf</p>
<p>from sklearn.preprocessing import StandardScaler</p>
<p>from tensorflow.keras.models import Sequential</p>
<p>from tensorflow.keras.layers import Dense, Dropout, BatchNormalization</p>
<p># &#8230; загрузка данных train и test &#8230;</p>
<p>features = ["SepalLength", "SepalWidth", "PetalLength", "PetalWidth"]</p>
<p>target = &#8216;Species&#8217;</p>
<p>x_train = train[features].values</p>
<p>y_train = train[target].values</p>
<p>x_test = test[features].values</p>
<p>scaler = StandardScaler()</p>
<p>x_train = scaler.fit_transform(x_train)</p>
<p>x_test = scaler.transform(x_test)</p>
<p>model = Sequential([</p>
<p style="padding-left: 30px;">Dense(128, activation='relu', input_shape=(4,)),</p>
<p style="padding-left: 30px;">BatchNormalization(),</p>
<p style="padding-left: 30px;">Dropout(0.4),</p>
<p style="padding-left: 30px;">Dense(64, activation='relu'),</p>
<p style="padding-left: 30px;">BatchNormalization(),</p>
<p style="padding-left: 30px;">Dropout(0.3),</p>
<p style="padding-left: 30px;">Dense(32, activation='relu'),</p>
<p style="padding-left: 30px;">Dropout(0.2),</p>
<p style="padding-left: 30px;">Dense(3, activation='softmax')</p>
<p>])</p>
<p>model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0005),</p>
<p>loss=&#8217;sparse_categorical_crossentropy&#8217;,</p>
<p>metrics=['accuracy'])</p>
<p># &#8230; определение callbacks и обучение модели &#8230;</p>
<p>predictions = model.predict(x_test)</p>
<p>predicted_classes = np.argmax(predictions, axis=1)</p>
<p><strong>Заключение</strong></p>
<p>Предложенный подход к классификации ирисов с использованием нейронной сети на Python демонстрирует высокую эффективность и точность. Применение методов регуляризации, таких как BatchNormalization и Dropout, позволило избежать переобучения модели, несмотря на относительно небольшой объем обучающих данных. Использование коллбэков EarlyStopping и ReduceLROnPlateau оптимизировало процесс обучения, автоматически подбирая количество эпох и скорость обучения. Стандартизация данных стала важным этапом, обеспечившим стабильную работу оптимизатора и улучшившим сходимость модели. В целом, данная работа служит наглядным и практическим примером применения современного стека технологий глубокого обучения для решения классической задачи машинного обучения, а полученный конвейер может быть адаптирован для других схожих задач классификации.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/02/104205/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Прогнозирование выживаемости пассажиров Титаника с использованием нейронных сетей</title>
		<link>https://web.snauka.ru/issues/2026/03/104341</link>
		<comments>https://web.snauka.ru/issues/2026/03/104341#comments</comments>
		<pubDate>Sat, 07 Mar 2026 07:37:13 +0000</pubDate>
		<dc:creator>Жеребцова Ксения Владимировна</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Keras]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[Titanic]]></category>
		<category><![CDATA[Классификация]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[нейронные сети]]></category>
		<category><![CDATA[предобработка данных]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2026/03/104341</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Введение В современном мире методы машинного обучения и искусственного интеллекта находят широкое применение в самых различных областях, включая медицину, финансы, транспорт и многие другие. Одной из классических задач, используемых для обучения и отработки навыков работы с алгоритмами машинного обучения, является задача предсказания выживаемости пассажиров [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;" align="right"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
</em><em>к.ф.-м.н., </em><em>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p><strong>Введение</strong></p>
<p>В современном мире методы машинного обучения и искусственного интеллекта находят широкое применение в самых различных областях, включая медицину, финансы, транспорт и многие другие. Одной из классических задач, используемых для обучения и отработки навыков работы с алгоритмами машинного обучения, является задача предсказания выживаемости пассажиров Титаника. Данная задача представляет собой бинарную классификацию, где необходимо на основе набора признаков о пассажире определить, выжил он или нет.</p>
<p><strong>Инструментарий</strong></p>
<p>В качестве инструментария для решения поставленной задачи была выбрана библиотека TensorFlow с высокоуровневым фреймворком Keras, которые предоставляют удобные средства для создания и обучения нейронных сетей различной архитектуры. Для работы с табличными данными используется библиотека Pandas, для математических операций и работы с массивами – NumPy, для визуализации результатов – Matplotlib.</p>
<p><strong>Загрузка данных</strong></p>
<p>Поскольку работа выполнялась в среде Google Colab, потребовалось подключение Google Drive для доступа к файлам датасета:</p>
<p style="padding-left: 30px;"><em>from google.colab import drive</em></p>
<p style="padding-left: 30px;"><em>drive.mount(&#8216;/content/drive/&#8217;)</em></p>
<p>Путь к данным задается через переменную PATH, после чего загружаются тренировочный и тестовый наборы данных, а также файл с примером формата ответов sample_submission.csv:</p>
<p style="padding-left: 30px;"><em>DIR = &#8220;Titanic&#8221;</em></p>
<p style="padding-left: 30px;"><em>PATH = &#8216;/content/drive/My Drive/&#8217;+ DIR + &#8216;/&#8217;</em></p>
<p style="padding-left: 30px;"><em> </em></p>
<p style="padding-left: 30px;"><em>train = pd.read_csv(PATH + &#8216;train.csv&#8217;)</em></p>
<p style="padding-left: 30px;"><em>test = pd.read_csv(PATH + &#8216;test.csv&#8217;)</em></p>
<p style="padding-left: 30px;"><em>sample_submission = pd.read_csv(PATH + &#8216;sample_submission.csv&#8217;, index_col=&#8217;PassengerId&#8217;)</em></p>
<p><strong>Предобработка данных</strong></p>
<p>Одной из важнейших задач при работе с реальными данными является их предобработка. Исходные данные содержат как числовые, так и категориальные признаки, которые необходимо преобразовать в формат, пригодный для обучения нейронной сети.</p>
<p><strong>Замена категориальных признаков</strong></p>
<p>В первую очередь производится замена текстовых значений пола на числовые:</p>
<p style="padding-left: 30px;"><em>train = train.replace(&#8216;male&#8217;, 1).replace(&#8216;female&#8217;, 0)</em></p>
<p style="padding-left: 30px;"><em>test = test.replace(&#8216;male&#8217;, 1).replace(&#8216;female&#8217;, 0)</em></p>
<p><strong>Создание дамми-переменных</strong></p>
<p>Далее создаются дамми-переменные для категориальных признаков Embarked (порт посадки) и Pclass (класс билета), что позволяет представить эти признаки в виде бинарных векторов:</p>
<p style="padding-left: 30px;"><em>train = pd.concat([train, pd.get_dummies(train.Embarked, prefix="Emb")], axis=1)</em></p>
<p style="padding-left: 30px;"><em>train = pd.concat([train, pd.get_dummies(train.Pclass, prefix="Pclass")], axis=1)</em></p>
<p style="padding-left: 30px;"><em> </em></p>
<p style="padding-left: 30px;"><em>test = pd.concat([test, pd.get_dummies(test.Embarked, prefix="Emb")], axis=1)</em></p>
<p style="padding-left: 30px;"><em>test = pd.concat([test, pd.get_dummies(test.Pclass, prefix="Pclass")], axis=1)</em></p>
<p><strong>Создание новых признаков</strong></p>
<p>Важным этапом инженерного анализа данных является создание новых признаков, которые могут нести дополнительную информацию для модели. На основе имеющихся признаков Parch (количество родителей и детей) и SibSp (количество братьев, сестер, супругов) был создан новый бинарный признак &#8220;наличие более одного родственника&#8221;, принимающий значение 1, если у пассажира было более одного родственника на борту, и 0 в противном случае.</p>
<p style="padding-left: 30px;"><em>train['more than one relative'] = train.Parch + train.SibSp &gt; 1</em></p>
<p style="padding-left: 30px;"><em>train = train.replace(True, 1).replace(False, 0)</em></p>
<p style="padding-left: 30px;"><em> </em></p>
<p style="padding-left: 30px;"><em>test['more than one relative'] = test.Parch + test.SibSp &gt; 1</em></p>
<p style="padding-left: 30px;"><em>test = test.replace(True, 1).replace(False, 0)</em></p>
<p><strong>Анализ пропущенных значений</strong></p>
<p>Производится анализ пропущенных значений с помощью методов isnull().sum():</p>
<p style="padding-left: 30px;"><em>train</em><em>.</em><em>isnull</em><em>().</em><em>sum</em><em>()</em></p>
<p>Для визуализации используется тепловая карта библиотеки Seaborn, что позволяет наглядно увидеть, в каких колонках присутствуют пропуски:</p>
<p style="padding-left: 30px;"><em>import</em><em> </em><em>seaborn</em><em> </em><em>as</em><em> </em><em>sns</em><em></em></p>
<p style="padding-left: 30px;"><em>sns</em><em>.</em><em>heatmap</em><em>(</em><em>train</em><em>.</em><em>isnull</em><em>(), </em><em>cbar</em><em> = </em><em>False</em><em>).</em><em>set</em><em>_</em><em>title</em><em>(&#8220;Карта пропущенных значений&#8221;)</em></p>
<p><strong>Заполнение пропусков</strong></p>
<p>На основе анализа принимается решение о заполнении пропущенных значений. Для числовых колонок Age и Fare пропуски заменяются средними значениями:</p>
<p style="padding-left: 30px;"><em>numeric_cols = ['Age', 'Fare']</em></p>
<p style="padding-left: 30px;"><em>train[numeric_cols] = train[numeric_cols].fillna(train[numeric_cols].mean())</em></p>
<p style="padding-left: 30px;"><em>test[numeric_cols] = test[numeric_cols].fillna(train[numeric_cols].mean())</em></p>
<p>При этом важно отметить, что для заполнения пропусков в тестовом наборе используются средние значения, вычисленные на тренировочном наборе, чтобы избежать утечки данных.</p>
<p><strong>Формирование признакового пространства</strong></p>
<p>После завершения предобработки формируется список признаков features и целевая переменная target:</p>
<p style="padding-left: 30px;"><em>features = ['Pclass_1', 'Pclass_2', 'Pclass_3', 'Age', 'Sex', 'Fare', 'more than one relative', 'Emb_C', 'Emb_Q', 'Emb_S']</em></p>
<p style="padding-left: 30px;"><em>target = &#8216;Survived&#8217;</em></p>
<p>Данные преобразуются в массивы NumPy для подачи в нейронную сеть:</p>
<p style="padding-left: 30px;"><em>X_train = train[features].values</em></p>
<p style="padding-left: 30px;"><em>Y_train = train[target].values</em></p>
<p style="padding-left: 30px;"><em>X_test = test[features].values</em></p>
<p><strong>Нормализация данных</strong></p>
<p>Важным этапом подготовки данных является нормализация, которая позволяет привести все признаки к единому масштабу и ускорить процесс обучения нейронной сети. Нормализация производится путем вычитания среднего значения и деления на стандартное отклонение:</p>
<p style="padding-left: 30px;"><em>mean = X_train.mean(axis=0)</em></p>
<p style="padding-left: 30px;"><em>std = X_train.std(axis=0)</em></p>
<p style="padding-left: 30px;"><em>X_train = X_train &#8211; mean</em></p>
<p style="padding-left: 30px;"><em>X_train /= std</em></p>
<p style="padding-left: 30px;"><em>X_test = X_test &#8211; mean</em></p>
<p style="padding-left: 30px;"><em>X_test /= std</em></p>
<p><strong>Построение модели нейронной сети</strong></p>
<p>Для построения модели используется последовательная архитектура Sequential с импортом необходимых слоев:</p>
<p style="padding-left: 30px;"><em>from tensorflow.keras.models import Sequential</em></p>
<p style="padding-left: 30px;"><em>from tensorflow.keras.layers import Dense, Dropout</em></p>
<p>Модель состоит из трех полносвязных слоев. Первый слой содержит 200 нейронов с функцией активации ReLU и принимает на вход данные размерности, соответствующей количеству признаков. Второй скрытый слой содержит 20 нейронов также с функцией активации ReLU. Выходной слой содержит один нейрон с сигмоидной функцией активации, что позволяет получать на выходе вероятность принадлежности к классу 1 (выживший) в диапазоне от 0 до 1.</p>
<p>Для предотвращения переобучения после каждого скрытого слоя добавляется слой Dropout с вероятностью отключения нейронов 0.1:</p>
<p style="padding-left: 30px;"><em>model = Sequential()</em></p>
<p style="padding-left: 30px;"><em>model.add(Dense(200, activation=&#8217;relu&#8217;, input_shape=(X_train.shape[1],)))</em></p>
<p style="padding-left: 30px;"><em>model.add(Dropout(0.1))</em></p>
<p style="padding-left: 30px;"><em>model.add(Dense(20, activation=&#8217;relu&#8217;))</em></p>
<p style="padding-left: 30px;"><em>model.add(Dropout(0.1))</em></p>
<p style="padding-left: 30px;"><em>model.add(Dense(1, activation=&#8217;sigmoid&#8217;))</em></p>
<p>После создания модели выводится ее краткое описание:</p>
<p style="padding-left: 30px;"><em>print(model.summary())</em></p>
<p><strong>Компиляция модели</strong></p>
<p>Компиляция модели производится с использованием оптимизатора Adam. В качестве функции потерь используется binary_crossentropy, подходящая для бинарной классификации. Метрикой качества выбрана accuracy – доля правильных ответов:</p>
<p style="padding-left: 30px;"><em>model.compile(optimizer=&#8217;adam&#8217;, loss=&#8217;binary_crossentropy&#8217;, metrics=['accuracy'])</em></p>
<p><strong>Обучение модели</strong></p>
<p>Обучение модели производится на тренировочных данных с валидационным разделением 10% от обучающей выборки. Количество эпох обучения установлено равным 2, размер пакета batch_size равен 1:</p>
<p style="padding-left: 30px;"><em>history = model.fit(X_train, Y_train,</em></p>
<p style="padding-left: 60px;"><em>                    epochs=2,</em></p>
<p style="padding-left: 60px;"><em>                    batch_size=1,</em></p>
<p style="padding-left: 60px;"><em>                    validation_split=0.1,</em></p>
<p style="padding-left: 60px;"><em>                    </em><em>verbose=2)</em></p>
<p><strong>Визуализация процесса обучения</strong></p>
<p>Для визуализации процесса обучения строится график изменения точности на обучающем и проверочном наборах данных:</p>
<p style="padding-left: 30px;"><em>plt.plot(history.history['accuracy'], label=&#8217;Точность на обучающем наборе&#8217;)</em></p>
<p style="padding-left: 30px;"><em>plt.plot(history.history['val_accuracy'], label=&#8217;Точность на проверочном наборе&#8217;)</em></p>
<p style="padding-left: 30px;"><em>plt.xlabel(&#8216;Эпоха обучения&#8217;)</em></p>
<p style="padding-left: 30px;"><em>plt.ylabel(&#8216;Точность&#8217;)</em></p>
<p style="padding-left: 30px;"><em>plt.legend()</em></p>
<p style="padding-left: 30px;"><em>plt.show()</em></p>
<p>График позволяет оценить, насколько хорошо модель обучается, и демонстрирует рост точности в процессе обучения.</p>
<p><strong>Предсказание на тестовых данных</strong></p>
<p>После завершения обучения производится предсказание на тестовых данных:</p>
<p style="padding-left: 30px;"><em>predictions = model.predict(X_test)</em></p>
<p>Полученные предсказания представляют собой вероятности принадлежности к классу 1. Для преобразования вероятностей в бинарные метки используется пороговое значение 0.5:</p>
<p style="padding-left: 30px;"><em>sample_submission[target] = [0 if pred &lt; 0.5 else 1 for pred in predictions]</em></p>
<p><strong>Экспорт результатов</strong></p>
<p>Полученные предсказания записываются в файл-образец и сохраняются в файл titanic_submission.csv:</p>
<p style="padding-left: 30px;"><em>sample_submission.to_csv(&#8216;titanic_submission.csv&#8217;)</em></p>
<p>Поскольку работа велась в Google Colab, для загрузки файла на локальный компьютер используется модуль files:</p>
<p style="padding-left: 30px;"><em>from google.colab import files</em></p>
<p style="padding-left: 30px;"><em>files.download(&#8216;titanic_submission.csv&#8217;)</em></p>
<p><strong>Заключение</strong></p>
<p>В результате выполненной работы была построена нейросетевая модель, способная с высокой точностью предсказывать выживаемость пассажиров Титаника на основе предоставленных характеристик. В процессе решения были отработаны ключевые этапы построения модели машинного обучения: загрузка и анализ данных, предобработка и создание новых признаков, заполнение пропусков, нормализация, построение архитектуры нейронной сети с регуляризацией, обучение и оценка качества, формирование предсказаний и экспорт результатов.</p>
<p>Полученный опыт может быть использован для решения других задач классификации и регрессии, а также служить основой для изучения более сложных архитектур нейронных сетей и методов глубокого обучения.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/03/104341/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
