Обзор
Ученые, работающие с данными, используют нейронные сети как инструмент для анализа фотографий и изображений. Нейронная сеть — это инструмент машинного обучения, используемый для анализа изображений. Он пытается сосредоточиться на основных характеристиках изображения и определить его ценность или класс. В данном случае мы рассмотрим пример классификации одежды.
Описание
Набор данных, используемый в этом примере, доступен через TensorFlow. Код для этой страницы использовался во время прохождения курса Coursera Введение в TensorFlow для искусственного интеллекта, машинного обучения и глубокого обучения. Код написан на Python.
Код
Импортировать пакеты
#Import packages import tensorflow as tf import numpy as np import matplotlib.pyplot as plt
Основной пакет, используемый в этом коде, — TensorFlow.
Чтение данных
Набор данных доступен в пакете TensorFlow.
#Read in the data df = tf.keras.datasets.fashion_mnist #Dataset include images of fashion clothing
Загрузка наборов обучающих и тестовых данных
Загрузите данные в обучающие и тестовые данные. Данные содержат изображения и соответствующие этикетки для предметов одежды.
#Load training and test datasets (training_images, training_labels), (test_images, test_labels) = df.load_data() #.load_data() = gives two tuples of two lists in this case.
Изучите изображение
Этот код позволяет вам увидеть некоторые изображения, чтобы понять, как они выглядят.
#Pick an image to examine image_num = 15 #Set size of graphic np.set_printoptions(linewidth =320) #Print the label of the image print(f'Label Number: {training_labels[image_num]}') #Print the image's pixel number array print(f'Image Pixel Numbers Array:\n: {training_images[image_num]}') #Show the image in gray scale plt.imshow(training_images[image_num], cmap = 'Greys')
Нормализация изображения
Нормализация является важной частью компьютерного зрения. Некоторые изображения могут отличаться по размеру и количеству пикселей. Нормализация позволяет обрабатывать все изображения одинаково. Нормализация позволяет цвету пикселя находиться в диапазоне от 0 до 1. Диапазон от 0 до 255 является общим для ненормализованных изображений.
#To find out the pixel values, get the max value max_pixel_val = training_images.max() #Normalize the training data training_images = training_images / max_pixel_val #Normalize the test data test_images = test_images / max_pixel_val #These images have pixel values between 0 and 255. Normalizing changes them from 0 to 1.
Определите модель
Основой любой нейронной сети является модель.
#Define the model model = tf.keras.models.Sequential([tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation = tf.nn.relu), tf.keras.layers.Dense(10, activation = tf.nn.softmax)])
Sequential
= как определяются последовательные слои.
input_shape
= размеры входного пространства (Каков размер входного поля?)
Units
= размер выходного пространства (Каков размер выходного файла?)
Last Neuron Size
= количество классов (в данном случае 10 видов одежды)
Flatten()
= превращает матрицу пикселей в одномерный массив
activation
= Функция, используемая для принятия решения, следует ли активировать нейрон или нет. Некоторые пиксели важнее других, и это может помочь уменьшить общий шум и улучшить модель.
Скомпилируйте модель
#Configure the model model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
tf.optimizers.Adam()
= Адаптивная оценка момента. Тип алгоритма стохастического градиентного спуска. Обычно с большими данными и множеством параметров.
sparse_categorical_crossentropy
= Функция в TensorFlow. Используется для категориальных данных, где переменная ответа/цели представляет собой целое число, указывающее, к какому классу она относится.
accuracy
= показатель, который будет использоваться для интерпретации модели.
Создайте функцию обратного вызова (не обязательно)
Функции обратного вызова по существу позволяют вам прекратить работу вашей модели при достижении определенного порога. Это означает, что если модель достигнет определенной производительности, например потери менее 0,2, модель завершится, что сэкономит время и вычислительные ресурсы.
#Callback function class myCallback(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logs={}): if (logs.get('loss') < 0.2): print("\nLoss is low so cancelling training!") self.model.stop_training = True #Defines new function in myCallback class. #Stops training when loss is less than 0.2 #Function ends the model when a certain loss accuracy is reached #Call function callbacks = myCallback()
Соответствовать модели
#Run the model model.fit(training_images, training_labels, epochs = 5, callbacks = [callbacks])
epochs
= количество проходов всего набора данных.
callbacks
= функция обратного вызова, определенная выше
Оцените модель
Результатом будет точность модели.
#Evaluate the model print(f"\nModel Test:") model.evaluate(test_images, test_labels)
Сверточная нейронная сеть
После того, как вы создали нейронную сеть, вы можете попробовать создать сверточную нейронную сеть, также называемую CNN. Свертка означает сжатие матрицы пикселей (скажем, 3x3) в одно значение на основе наиболее важного (максимального значения) пикселя. Это метод удаления шума из данных и выявления признаков, наиболее важных для классификации изображения.
Определите модель
#Define model cnn_model = tf.keras.models.Sequential([ #Add convoluations tf.keras.layers.Conv2D(32, (3,3), activation = 'relu', input_shape = (28, 28, 1)), #28x28 = dimensions of the image #32 = number of filters (usually multiples of 2) #(3,3) = dimensions of the filters #1 = 1 byte for color depth (since images are in gray-scale) tf.keras.layers.MaxPooling2D(2, 2), #Keeps only the selected (max) pixel from a 2x2 pixel frame #Image will have 1/4 the number of pixels as before #Repeat convolution and pooling layers tf.keras.layers.Conv2D(32, (3,3), activation = 'relu'), tf.keras.layers.MaxPooling2D(2,2), #Add in layers from previous model tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation = tf.nn.relu), tf.keras.layers.Dense(10, activation = tf.nn.softmax) ]) #Summary of model cnn_model.summary() #Output shape will be smaller than actual shape since pixels that are borders do not have enough neighboring pixels for the filter. Removes pixel #margin.
Sequential
= как определяются последовательные слои.
input_shape
= размеры входного пространства (Каков размер входного поля?)
Units
= размер выходного пространства (Каков размер выходного файла?)
Last Neuron Size
= количество классов (в данном случае 10 видов одежды).
Flatten()
= превращает матрицу пикселей в одномерный массив
activation
= Функция, используемая для принятия решения, следует ли активировать нейрон или нет. Некоторые пиксели важнее других, и это может помочь уменьшить общий шум и улучшить модель.
MaxPooling
= выбирает максимальное значение выбранных пикселей.
Скомпилируйте модель CNN
#Configure the model cnn_model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics = ['accuracy']) #tf.optimizers.Adam() = Adaptive Moment Estimation. Type of stocastic gradient descent algorithm. #Usefully with large data and many parameters. #sparse_categorical_crossentropy = Function in Tensorflow. #Used on categorical data where the repsonse/target variable is an integer indicating which class it is.
tf.optimizers.Adam()
= Адаптивная оценка момента. Тип алгоритма стохастического градиентного спуска. Обычно с большими данными и множеством параметров.
sparse_categorical_crossentropy
= Функция в TensorFlow. Используется для категориальных данных, где переменная ответа/цели представляет собой целое число, указывающее, к какому классу она относится.
accuracy
= показатель, который будет использоваться для интерпретации модели.
Подходит для модели CNN
#Run the model cnn_model.fit(training_images, training_labels, epochs = 5, callbacks = [callbacks])
epochs
= количество проходов всего набора данных.
callbacks
= функция обратного вызова, определенная выше
Оцените модель CNN
Результатом будет точность модели.
#Evaluate the model print(f"\nModel Test:") cnn_model.evaluate(test_images, test_labels)
Краткое содержание
На этой странице был рассмотрен пример нейронных сетей и сверточных нейронных сетей в Python. Для получения дополнительной информации о Python, науке о данных или статистике посетите другие мои страницы. Если эта страница оказалась для вас полезной, буду признателен за лайк или подписку. Спасибо!