Обзор

Ученые, работающие с данными, используют нейронные сети как инструмент для анализа фотографий и изображений. Нейронная сеть — это инструмент машинного обучения, используемый для анализа изображений. Он пытается сосредоточиться на основных характеристиках изображения и определить его ценность или класс. В данном случае мы рассмотрим пример классификации одежды.

Описание

Набор данных, используемый в этом примере, доступен через 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, науке о данных или статистике посетите другие мои страницы. Если эта страница оказалась для вас полезной, буду признателен за лайк или подписку. Спасибо!