Укажите, какие виды процессов обучения нейронной сети применяются на практике.

В чем заключается сходство и отличие активационных функций, применяемых в нейронных сетях?

В чем заключается сходство активационных функций, применяемых в нейронных сетях?

В чем заключается преимущество активационной функции ReLU?

Какая активационная функция удобна для реализации бинарного классификатора?

Какими должны быть начальные значения весов и смещений в нейронной сети?

2.8. Пример простого классификатора

Рассмотрим интересную задачу классификации изображений, представленную в качестве примера применения TensorFlow [[57]]. TensorFlow в нашем решении мы используем лишь для загрузки данных, а в качестве классификатора применим упомянутый выше MLPClassifier. Суть задачи заключается в том, что необходимо классифицировать предметы одежды по их монохромным изображениям в низком разрешении (28 х 28). Набор данных Fashion-MNIST содержит 60 000 изображений для обучения и 10 000 для тестирования, начиная от футболок и брюк и заканчивая сумками и туфлями. Всего 10 классов изображений. Классы, пронумерованные от 0 до 9, и их описание показаны на рисунке 2.13.


Рисунок 2.13. Образцы Fashion-MNIST


Fashion-MNIST разработан в дополнение к классическому набору данных MNIST, который часто используют как «Hello, World» для отладки методов машинного обучения в задачах компьютерного зрения. MNIST содержит изображения рукописных цифр (0, 1, 2 и т.д.) в формате, идентичном формату изображений одежды набора Fashion-MNIST. Для современных программ компьютерного зрения MNIST стал «слишком прост», поэтому применение более сложного набора данных полезно для отладки систем машинного обучения.

Загрузить набор данных можно, используя keras. Предварительно потребуется загрузить необходимые библиотеки:


# TensorFlow и tf.keras

import tensorflow as tf

from tensorflow import keras

# Вспомогательные библиотеки

import numpy as np

import matplotlib.pyplot as plt


Теперь можно загрузить набор данных и посмотреть одно из изображений:

fashion_mnist = keras.datasets.fashion_mnist

(X_train1, y_train),(X_test1,y_test)= fashion_mnist.load_data()

plt.figure()

plt.imshow(X_train1[10])

plt.colorbar()

plt.grid(False)

plt.show()



Как видно, диапазон изменения яркости пикселя – от 0 до 255. Если подать такие значения на вход нейронной сети, качественные результаты классификации существенно упадут. Поэтому все значения нужно нормировать так, чтобы на вход сети поступили значения в диапазоне от 0 до 1, просто разделив каждое значение на 255:

X_train1=X_train1/255.0

X_test1=X_test1/255.0


Следующее, что нам необходимо сделать в процессе предобработки, – это преобразовать двумерные массивы изображений 28 x 28 в одномерные векторы. Каждый такой вектор станет набором входных параметров размерностью 784:

X_train=np.reshape(X_train1,(X_train1.shape[0],X_train1.shape[1]*X_train1.shape[2]))

X_test=np.reshape(X_test1,(X_test1.shape[0],X_test1.shape[1]*X_test1.shape[2]))


В результате матрица X_train размерностью (60 000, 28, 28) будет преобразована в матрицу размером (60 000, 784), которую можно подать на вход нейронной сети для тренировки.

>from sklearn.neural_network import MLPClassifier

>clf = MLPClassifier(hidden_layer_sizes = [15, 15,],

>      alpha = 0.01,random_state = 0,

>      solver='adam').fit(X_train, y_train)


Обучение нейронной сети может занять несколько минут. Затем можно оценить качественные показатели классификатора командами:


>predictions=clf.predict(X_test)

>print('Accuracy of NN classifier on training set: {:.2f}'

>    .format(clf.score(X_train, y_train)))