Невронните мрежи са важна концепция в областта на изкуствения интелект и машинното обучение. Те се състоят от взаимосвързани възли, организирани на слоеве, и имитират как работи човешкият мозък. Възлите представляват невроните на човешкия мозък.
Можете да създадете своя собствена проста невронна мрежа за многокласова класификация с подаване напред. Обучете го да класифицира ръкописни цифри с помощта на набора от данни MNIST. След това можете да използвате компютърно зрение, за да класифицирате собствените си ръкописни цифри.
Какво е многокласова класификация?
Многокласовата класификация е вид машинно обучение, което може да класифицира данните в повече от две категории. Невронните мрежи използват класификатора softmax, за да разпределят вероятността върху възможните класове.
Можете да използвате многокласова класификация, за да класифицирате ръкописни изображения от набора от данни на MNIST в 10 категории. Тези категории ще съответстват на цифрите от 0 до 9.
Разбиране на набора от данни на MNIST
Наборът от данни MNIST е популярен референтен набор от данни за машинно обучение и алгоритми за компютърно зрение. Той съдържа 70 000 ръкописни изображения в нива на сивото, които са с размер 28 на 28 пиксела. Ръкописните цифри са в диапазона от 0 до 9.
Преди да изградите модел за машинно обучение, важно е да разберете какво съдържа вашият набор от данни. Разбирането на набора от данни ще ви позволи да извършите по-добра предварителна обработка на данни.
Подготовка на вашата среда
За да следвате този урок, трябва да сте запознати с основите на Python. Трябва също да имате a основни познания за машинно обучение. И накрая, трябва да ви е удобно да използвате Jupyter Notebook или Google Colab.
Пълният изходен код е достъпен в a GitHub хранилище.
Създайте нов бележник на Jupyter или влезте в Google Colab. Изпълнете тази команда, за да инсталирате необходимите пакети:
!pip инсталирайте numpy matplotlib tensorflow opencv-python
Вие ще използвате:
- Matplotlib за визуализация на данни.
- NumPy за манипулиране на масиви.
- TensorFlow за създаване и обучение на вашия модел.
- OpenCV за захранване на модела с вашите собствени ръкописни цифри.
Импортиране на необходимите модули
Импортирайте пакетите, които сте инсталирали във вашата среда. Това ще ви позволи по-късно да извиквате и използвате техните функции и модули във вашия код.
импортиране тензорен поток като tf
от тензорен поток импортиране keras
импортиране matplotlib.pyplot като плт
%matplotlib вграден
импортиране numpy като np
импортиране cv2
Вторият ред код импортира модула Keras от Библиотека на Google TensorFlow. Ще използвате Keras, за да обучите вашата дълбока невронна мрежа с TensorFlow като бекенд.
Зареждане и преглед на набора от данни
Наборът от данни MNIST е вграден в Keras. Заредете набора от данни MNIST и го разделете на комплекти за обучение и тест. Ще използвате набора за обучение, за да обучите вашия модел, а набора за тестване, за да оцените точността на вашия модел при класифицирането на нови невиждани изображения.
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
Проверете продължителността на тренировъчните и тестовите серии. Наборът от данни на MNIST има 60 000 изображения за обучение и 10 000 изображения за тестване.
len (X_train)
len (X_тест)
Проверете формата на първото изображение в набора от данни на MNIST, което трябва да бъде 28 на 28 пиксела. След това отпечатайте неговите пикселни стойности и ги визуализирайте с помощта на Matplotlib.
X_train[0].форма
X_train[0]
plt.matshow (X_train[0])
y_train[0]
Резултатът от визуализацията е както следва:
Визуализираното изображение показва, че първото изображение в набора от данни съдържа числото пет.
Предварителна обработка на данни
Преди да използвате данните в набора от данни за обучение и тестване на вашия модел, трябва да го обработите предварително. Предварителната обработка подобрява точността на модела чрез стандартизиране на данните.
Нормализиране на пикселните стойности
Нормализирайте стойностите на пикселите на изображенията в набора от данни, като разделите всяка стойност на 255. Стойностите на пикселите на ненормализирания набор от данни варират от 0 до 255, като нула е черно, а 255 е бяло. Разделянето на стойността на всеки пиксел на 255 гарантира, че всеки пиксел е в диапазона между 0 и 1. Това улеснява модела да научи съответните характеристики и модели в данните.
X_влак = X_влак / 255
X_тест = X_тест / 255
След това отпечатайте стойностите на пикселите на първото изображение.
X_train[0]
Забележете, че сега са в диапазона между 0 и 1.
Преобразуване на матриците на изображенията в 1D масив
Входният слой на невронната мрежа обикновено очаква 1D входове, така че създайте 1D масив от стойностите на пикселите на изображението. За да направите това, използвайте функцията reshape() с броя на суровините, зададени на броя на изображенията в набора от данни.
X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (len (X_test), 28 * 28)
X_train_flattened.shape
X_train_flattened[0]
Вашите изображения вече са готови за обучение и тестване на модела.
Създаване на модел на дълбока невронна мрежа
Създайте последователен модел с модула Keras на Tensorflow, като използвате входен слой, два скрити слоя и изходен слой. Задайте входната форма на 28 на 28, тъй като това е формата на оригиналните изображения в набора от данни. Използвайте 128 възли за скритите слоеве. Изходният слой трябва да има само 10 неврона, тъй като класифицирате само цифри от 0 до 9.
модел = keras. Последователно ([
keras.слоеве. Изравняване (input_shape=(28, 28)),keras.слоеве. плътен (128, активиране="relu"),
keras.слоеве. плътен (128, активиране="relu"),
keras.слоеве. плътен (10, активиране="softmax")
])
Компилирайте модела с помощта на Адам оптимизатор, разредена_категорична_кросентропия като функцията на загубата и показателя за оценка на ефективността на модела точност. След това поставете данните за обучение в модела и задайте броя на епохите на пет.
model.compile (оптимизатор="адам",
загуба='sparse_categorical_crossentropy',
metrics=["точност"])
model.fit (X_влак, y_влак, епохи=5)
Обучението на модела ще отнеме няколко минути. След като обучението на модела приключи, оценете неговото представяне на тестовия комплект.
model.evaluate (X_тест, y_тест)
Функцията за оценка ще върне загубата и точността на модела. Моделът дава точност от 98%.
Използване на модела за класифициране на вашите собствени ръкописни цифри
За да класифицирате собствените си ръкописни цифри, трябва да подготвите изображенията си, за да съответстват на тези от набора от данни на MNIST. Ако не го направите, вашият модел ще работи лошо.
За предварителна обработка на изображенията:
- Заредете изображението, съдържащо цифрата, като използвате OpenCV.
- Преобразувайте го в скала на сивото и го преоразмерете до 28 на 28 пиксела.
- Обърнете и нормализирайте стойностите на пикселите.
- Накрая изравнете изображението в 1D масив.
Предайте предварително обработеното изображение в модела за прогнозиране и отпечатайте прогнозираната стойност на екрана.
img = cv2.imread('цифри/цифра1.png', cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype("float32") / 255.0# Изравнете изображението в 1D масив
входни_данни = img_normalized.flatten().reshape( 1,28,28)
# Направете прогноза с помощта на модела
прогноза = model.predict (входни_данни)
печат (f'Прогноза: {np.argmax (предсказание)}')
Предаване на предварително обработено изображение, съдържащо число, към модела.
Резултатът от модела е както следва:
Моделът успя да класифицира правилно цифрата седем.
Невронни мрежи в чатботове
Използването на невронни мрежи експлодира през последните няколко години. Те са били използвани предимно в обработката на естествен език за езиков превод и генериращ AI.
Съвсем наскоро се увеличи броят на чатботовете, които могат да комуникират по човешки начин. Те използват вид невронна мрежа, известна като трансформаторна невронна мрежа. Взаимодействайте с някои от тях и изпитайте силата на невронните мрежи.