<?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; Хасанов Даниэль Рустамович</title>
	<atom:link href="http://web.snauka.ru/issues/author/author65213/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>Классификация Ирисов Фишера с использованием нейронных сетей: подход на основе 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>Трехмерное моделирование методом экструдирования в среде Three.js</title>
		<link>https://web.snauka.ru/issues/2025/12/104020</link>
		<comments>https://web.snauka.ru/issues/2025/12/104020#comments</comments>
		<pubDate>Fri, 26 Dec 2025 17:11:48 +0000</pubDate>
		<dc:creator>Хасанов Даниэль Рустамович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[3D-моделирование]]></category>
		<category><![CDATA[three.js]]></category>
		<category><![CDATA[WebGL]]></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/104020</guid>
		<description><![CDATA[Метод экструдирования (выдавливания) остаётся одним из фундаментальных и наиболее интуитивно понятных инструментов в арсенале 3D-моделлера. Этот процесс, преобразующий двумерные контуры в трёхмерные объёмные объекты, десятилетиями используется как в профессиональных пакетах (Blender, Maya, 3ds Max), так и в веб-ориентированных фреймворках, таких как Three.js. В эпоху повсеместного распространения интерактивной 3D-графики в браузерах, веб-приложениях и играх освоение базовых [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Метод экструдирования (выдавливания) остаётся одним из фундаментальных и наиболее интуитивно понятных инструментов в арсенале 3D-моделлера. Этот процесс, преобразующий двумерные контуры в трёхмерные объёмные объекты, десятилетиями используется как в профессиональных пакетах (Blender, Maya, 3ds Max), так и в веб-ориентированных фреймворках, таких как Three.js. В эпоху повсеместного распространения интерактивной 3D-графики в браузерах, веб-приложениях и играх освоение базовых техник моделирования сохраняет свою практическую ценность. Оно позволяет наглядно демонстрировать переход от абстрактной геометрии к визуальному объекту: от задания вершин на плоскости и формирования профиля до управления параметрами выдавливания и получения готовой модели. Использование доступных библиотек, таких как Three.js, делает процесс создания 3D-контента достижимым даже для новичков, а сама техника экструзии служит отправной точкой для понимания более сложных методов моделирования, скульптинга и анимации.</p>
<p style="text-align: justify;"><span>В данной работе для создания трёхмерной фигуры используется метод экструдирования, реализованный средствами Three.js. Моделирование начинается с определения плоского замкнутого контура (профиля) на плоскости XY, координаты вершин которого задаются относительно начала координат. Затем этот контур выдавливается вдоль оси Z (или иной заданной нормали) на определённую высоту, формируя объёмное тело. Ключевым преимуществом является полный контроль над топологией: процесс создаёт боковые грани, соединяющие исходный и конечный контуры, а также при необходимости закрывает торцы полученного объекта. Такой подход позволяет быстро генерировать сложные архитектурные элементы, технические детали или абстрактные формы, демонстрируя стандартный пайплайн для задач параметрического моделирования в среде WebGL.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/122625_0607_11.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 1. Исходный 2D-профиль фигуры в плоскости XY<br />
</span></p>
<p style="text-align: justify;"><span>Алгоритм создания трёхмерной модели методом экструдирования с использованием Three.js включает следующие последовательные шаги.<br />
</span></p>
<ul>
<li>Импортируем необходимые библиотеки: Three.js, а также, при необходимости, вспомогательные модули для управления кривыми (CurvePath) и геометрией (ExtrudeGeometry);</li>
<li>Определяем форму (Shape) — массив двумерных точек (Vector2), описывающих замкнутый контур будущего профиля. Координаты задаются относительно центра (0,0);</li>
<li>Создаём геометрию выдавливания (ExtrudeGeometry), передавая в неё объект Shape и параметры экструзии: depth (глубина/высота выдавливания), bevelEnabled (скос кромок) и другие;</li>
<li>Настраиваем материал (например, MeshStandardMaterial) для визуализации модели;</li>
<li>Создаём объект Mesh, объединяя полученную геометрию и материал, и добавляем его на сцену (Scene);</li>
<li>Настраиваем освещение (AmbientLight, DirectionalLight) и камеру (PerspectiveCamera) для корректного отображения объекта;</li>
<li>Инициируем рендерер (WebGLRenderer) и запускаем цикл анимации для отрисовки сцены;</li>
<li>При необходимости добавляем элементы управления (OrbitControls) для интерактивного вращения и масштабирования модели;</li>
</ul>
<p style="text-align: justify;"><span>Этот алгоритм является типовым для создания простых экструдированных объектов в Three.js и демонстрирует ключевые этапы работы с геометрией и материалами.<br />
</span></p>
<p style="text-align: justify;"><span>Ниже приведен фрагмент кода, реализующий ключевые шаги алгоритма:</span></p>
<p>import * as THREE from &#8216;three&#8217;;</p>
<p>import { OrbitControls } from &#8216;three/addons/controls/OrbitControls.js&#8217;;</p>
<p>&nbsp;</p>
<p>const scene = new THREE.Scene();</p>
<p>const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);</p>
<p>const renderer = new THREE.WebGLRenderer({ antialias: true });</p>
<p>renderer.setSize(window.innerWidth, window.innerHeight);</p>
<p>document.body.appendChild(renderer.domElement);</p>
<p>&nbsp;</p>
<p>const shape = new THREE.Shape();</p>
<p>const radius = 2;</p>
<p>const sides = 6;</p>
<p>for (let i = 0; i &lt;= sides; i++) {</p>
<p style="padding-left: 30px;">const angle = (i / sides) * Math.PI * 2;</p>
<p style="padding-left: 30px;">const x = Math.cos(angle) * radius;</p>
<p style="padding-left: 30px;">const y = Math.sin(angle) * radius;</p>
<p style="padding-left: 30px;">if (i === 0) shape.moveTo(x, y);</p>
<p style="padding-left: 30px;">else shape.lineTo(x, y);</p>
<p>}</p>
<p>&nbsp;</p>
<p>const extrudeSettings = {</p>
<p style="padding-left: 30px;">depth: 5,</p>
<p style="padding-left: 30px;">bevelEnabled: true,</p>
<p style="padding-left: 30px;">bevelThickness: 0.5,</p>
<p style="padding-left: 30px;">bevelSize: 0.5,</p>
<p style="padding-left: 30px;">bevelSegments: 3</p>
<p>};</p>
<p>const geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);</p>
<p>&nbsp;</p>
<p>const material = new THREE.MeshStandardMaterial({ color: 0x00aaff, metalness: 0.2, roughness: 0.7 });</p>
<p>const mesh = new THREE.Mesh(geometry, material);</p>
<p>scene.add(mesh);</p>
<p>&nbsp;</p>
<p>const ambientLight = new THREE.AmbientLight(0xffffff, 0.6);</p>
<p>scene.add(ambientLight);</p>
<p>const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);</p>
<p>directionalLight.position.set(10, 20, 5);</p>
<p>scene.add(directionalLight);</p>
<p>&nbsp;</p>
<p>camera.position.z = 15;</p>
<p>const controls = new OrbitControls(camera, renderer.domElement);</p>
<p>&nbsp;</p>
<p>function animate() {</p>
<p style="padding-left: 30px;">requestAnimationFrame(animate);</p>
<p style="padding-left: 30px;">controls.update();</p>
<p style="padding-left: 30px;">renderer.render(scene, camera);</p>
<p>}</p>
<p>animate();</p>
<p style="text-align: justify;"><span><br />
</span></p>
<p style="text-align: justify;"><span>Процесс выдавливания, описанный в коде, визуально представлен на Рисунке 1 и Рисунке 2. На первой иллюстрации показан исходный профиль, а на второй — итоговая трёхмерная модель после применения экструзии:<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/122625_0607_21.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 2. Результат экструдирования профиля вдоль оси Z<br />
</span></p>
<p style="text-align: center;"><span><strong>Заключение<br />
</strong></span></p>
<p style="text-align: justify;"><span>Техника экструдирования, несмотря на свою простоту и повсеместное использование, продолжает оставаться важным учебным и практическим инструментом в области трёхмерного моделирования и компьютерной графики. Её применение в среде Three.js, как показано в работе, позволяет эффективно создавать объёмные объекты из плоских контуров, демонстрируя типичный пайплайн для параметрического моделирования в веб-среде. Ключевыми этапами являются корректное задание профиля, настройка параметров выдавливания и управление материалами с освещением. Освоение этого метода формирует прочную основу для перехода к более сложным техникам, таким как булевы операции, модификация геометрии, скелетная анимация и работа с воксельными данными, что открывает путь к решению современных задач в разработке игр, симуляций и интерактивных визуализаций.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/12/104020/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
