ProfMoriarti пока ШайзеФюрер махт шайзе, о НЕЙРОСЕТЯХ мы поговорим))
а то и напишем какую-нибудь, чаще всего предлагают на курсах обучения сетку распознования треугольников, кругов и квадратов.
+++- +++
Изображения размещены в пяти папках в зависимости от класса названия папок соответствуют названию класса. В таблице 1 представлена информация о названии класса, количестве изображений для обучения и тестирования, результат, который должен получиться на выходе при соответствии данному классу. Пример фрагмента набора данных изображен на рисунке 1.
Таблица 1.
Информация о наборе данных
Название класса = Количество изображений для обучения = Количество изображений для тестирования = Название фигуры на выходе
Pentagon = 68 =21=пятиугольник
Sixer=71 =15=шестиугольник
Square=86=21=квадрат
Star=78=17=звезда
Tringle=78=19=треугольник
Разработка архитектуры нейронной сети
Для разработки нейронной сети можно использовать персептрон. Персептрон - это простейший вид нейронной сети. [8].
В разрабатываемой сети на вход будет подаваться изображение, на котором присутствует фигура.
Результатом работы сети должна быть информация о том, к какому классу относится фигура, представленная на изображении.
Для решения данной задачи использована модель многослойного персептрона с двумя скрытыми слоями. Входной слой состоит из n нейронов, где n количество пикселей изображения (n=5625). Первый и второй скрытые слои содержат m и k нейронов соответственно, где m = 256 и k = 256. Выходной слой содержит 5 нейронов, что соответствует количеству классов изображений. Архитектура разрабатываемой сети представлена на рисунке 2.
Рисунок 2. Архитектура разрабатываемой нейронной сети
Реализацию нейронной сети для распознавания изображений решено проводить с использованием языка программирования Python, поскольку в нём есть необходимые библиотеки для реализации поставленной задачи:
tensorflow [1] - открытая программная библиотека для машинного обучения, разработанная компанией Google для решения задач построения и тренировки нейронной сети с целью автоматического нахождения и классификации образов, достигая качества человеческого восприятия;
keras [2] - библиотека с открытым исходным кодом, которая позволяет создавать нейронные сети. Нацелена на оперативную работу с сетями глубинного обучения;
numpy [3] - это расширение, добавляющее поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами;
matplotlib [4] - библиотека для графической визуализации данных.
ProfMoriarti wie gefaellt mir faschisten-фюрерство
wie gefaellt mir faschisten-фюрерство (как мне нравится фашистен-фюрер))
после алгоритма, заданного в Плюшевом домике ihrer scheisse transformiert in ))
( его дерьмоглотство направлено внутрь его самого))
ProfMoriarti Чтобы в целом повторить последовательность построения
нейросети,-
В НС нейроны отвечают за выделение определенного ПРИЗНАКА (здесь -от 0 до 9), при этом некоторое количество нейронов организовано в слои. Несколько слоев нейронов могут называться полноценной НС.
Сама по себе сеть без обучения не может хорошо решать задачи. Для этого ей требуются две выборки обучающая и проверочная. Используя их, НС узнает, как правильно выполнить задачу. В этом ей помогает функция ошибки, которая указывает, в правильную ли сторону НС меняет свои веса. После этого вы познакомились с полносвязным слоем, нейроны которого связаны со всеми входными нейронами.
Во второй части вы попробовали создать свою первую модель нейронной сети. Подгрузили в ноутбук основу Sequential, которая отвечает за построение модели, и создали начальную модель: model = Sequential(). Но она выглядела как пустая коробка, в которую необходимо что-то положить. И первым стал слой Dense (полносвязный слой). Так появилась модель, но ее еще нужно было обучить, и для этого вы указали оптимизатор и функцию потерь при помощи метода. compile().
# Компиляция модели!Ссылки Запрещены!pile(loss='categorica- l_crossentropy', optimizer='adam', metrics=['accuracy'])
Завершили все это вызовом метода. summary(), посмотрев, как выглядит структура НС.
# Вывод структуры модели!Ссылки Запрещены!mmary())
utils. plot_model(model, to_file='model_plot. png', show_shapes=True, show_layer_names=False)
Затем вы перешли к практике и решили первую задачу по распознаванию рукописных цифр. Для этого импортировали все необходимые инструменты и загрузили данные MNIST. Определили форму массива данных и представление данных в виде картинки.
Преобразовали данные для модели НС, превратив картинку 28x28 пикселов в последовательность из 784 чисел. Не оставили без внимания и метки классов. Чтобы сеть лучше классифицировала, перевели метки в формат one hot encoding. По изученной схеме создали НС и приступили к ее обучению.
model. fit(x_train, y_train, batch_size=128, epochs=15, verbose=1)
В завершение проверили, как обученная НС распознает отдельные изображения рукописных цифр из набора, на котором сеть не обучалась.
Делается оператором
model. fit(x_train, # обучающая выборка, входные данные
y_train, # обучающая выборка, выходные данные
batch_size=128, # кол-во примеров, которое обрабатывает нейронка перед одним изменением весов
epochs=15, # количество эпох, когда нейронка обучается на всех примерах выборки
verbose=1) # 0 - не визуализировать ход обучения, 1 - визуализировать
# Создание последовательной модели
model = Sequential()
# Добавление полносвязного слоя на 800 нейронов с relu-активацией
model. add(Dense(800, input_dim=784, activation='relu'))
# Добавление полносвязного слоя на 400 нейронов с relu-активацией
model. add(Dense(400, activation='relu'))
# Добавление полносвязного слоя с количеством нейронов по числу классов с softmax-активацией
model. add(Dense(CLASS_COUNT, activation='softmax'))
ProfMoriarti Следующей строкой кода вы скомпилируете модель:
!Ссылки Запрещены!pile(loss='categorica- l_crossentropy', optimizer='adam', metrics=['accuracy'])
В методе. compile() вы назначаете функцию ошибки ('categorical_crossentropy'), оптимизатор нейронной сети ('adam') и метрики, которые будут подсчитываться в процессе обучения нейросети (['accuracy']).
Метод. summary() выведет на экран структуру вашей нейронной сети в виде таблицы:
# Вывод структуры модели!Ссылки Запрещены!mmary())
Функция plot_model() модуля utils нарисует наглядную схему (граф) нейронной сети, она удобна для понимания и более сложных моделей.
Эта функция принимает следующие аргументы:
model - модель, схему которой вы хотите построить (обязательный параметр);
to_file - имя файла или путь к файлу, в который сохраняется схема (обязательный параметр);
show_shapes - Показывать или нет формы входных/выходных данных каждого слоя (необязательный параметр, по умолчанию False);
show_layer_names - показывать или нет название каждого слоя (необязательный параметр, по умолчанию True).
[ ]
utils. plot_model(model, to_file='model_plot. png', show_shapes=True, show_layer_names=False)
Здесь вы впервые сталкиваетесь с сохранением данных.
Сейчас сохранение графа модели произойдёт в хранилище виртуальной машины ноутбука. Найти сохраненный файл можно, нажав на иконку "Файлы" в левой части рабочего пространства Google Colab.
В данном случае при завершении сеанса все файлы будут удалены вместе с виртуальной машиной.
Если необходимо воспользоваться файлами в дальнейшем, можно сохранить их на свой Google-диск - это постоянное хранилище. Для этого необходимо подключить его:
from google. colab import drive
drive. mount('/content/drive/')-
Необходимо перейти по ссылке и разрешить доступ.
Теперь данные могут быть загружены на диск, но для этого необходимо указывать полный путь для сохранения.
model. fit(x_train, # обучающая выборка, входные данные
y_train, # обучающая выборка, выходные данные
batch_size=128, # кол-во примеров, которое обрабатывает нейронка перед одним изменением весов
epochs=15, # количество эпох, когда нейронка обучается на всех примерах выборки
verbose=1) # 0 - не визуализировать ход обучения, 1 - визуализировать