В отличие от предыдущих версий, TensorFlow 2.0 выходит с некоторыми существенными изменениями. Он будет более питоническим, и нет необходимости явно включать активное выполнение. Благодаря тесной интеграции Keras теперь основное внимание уделяется простоте и удобству использования.

Keras - это высокоуровневый API, который позволяет легко создавать, обучать, оценивать и запускать всевозможные нейронные сети. Keras был разработан Франсуа Шолле, и его исходный код был открыт в марте 2015 года. Благодаря своей простоте и удобству в использовании он очень быстро завоевал популярность. Tensorflow поставляется со своей собственной реализацией Keras с некоторыми особенностями TF.

Keras может работать поверх MXNet, CNTK или Theano.

Давайте создадим простой классификатор изображений

Мы создадим простую архитектуру нейронных сетей для классификации изображений. Fashion MNIST - это коллекция из 70 000 изображений в градациях серого размером 28x28 пикселей каждое, с 10 классами различных предметов одежды. Мы обучим нашу нейронную сеть на этом наборе данных.

CNN работает лучше, чем Dense NN для классификации изображений как с точки зрения времени, так и с точки зрения точности. Я использовал здесь архитектуру Dense NN для демонстрации.

Прочтите эту статью, чтобы узнать о сверточных нейронных сетях.

Сначала импортируйте библиотеки и загрузите набор данных F-MNIST.

import tensorflow as tf
from tensorflow import keras  # tensorflow implementation of keras
import matplotlib.pyplot as plt
# Download dataset with Keras utility function
fashion_mnist = keras.datasets.fashion_mnist
(X_train_full, y_train_full), (X_test, y_test) = fashion_mnist.load_data()
print(X_train_full.shape)
(60000, 28, 28)

Всегда рекомендуется разбивать набор данных на набор для обучения, проверки и тестирования. Поскольку у нас уже есть набор для тестирования, давайте создадим набор для проверки. Мы можем масштабировать интенсивность пикселей данных в диапазоне от 0 до 1, разделив их на 255.0. Масштабирование приводит к лучшему обновлению градиента.

X_valid, X_train = X_train_full[:5000] / 255.0, X_train_full[5000:] / 255.0
y_valid, y_train = y_train_full[:5000], y_train_full[5000:]

Мы можем просмотреть любую фотографию с помощью matplotlib.

plt.imshow(X_train[5])

Создайте модель с помощью Keras Sequential API

Пришло время создать нашу простую классификацию изображений искусственных нейронных сетей.

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28, 28]))
model.add(keras.layers.Dense(300, activation="relu"))
model.add(keras.layers.Dense(100, activation="relu"))
model.add(keras.layers.Dense(10, activation="softmax"))

Если вы не поняли, не волнуйтесь, позвольте мне объяснить код построчно.

Модель Последовательная представляет собой линейный набор слоев, соединенных последовательно.

Следующий слой, то есть Flatten, просто преобразует массив размером 28x28 в одномерный массив. Если он получает входные данные X, он вычисляет X.reshape (-1, 1). Для указания размера входных данных требуется аргумент input_shape. Однако Керас может автоматически определить input_shape.

Слой Плотный - это полностью связанные нейроны в нейронных сетях. Здесь есть два скрытых слоя с 300 нейронами в первом и 100 нейронами во втором скрытом слое соответственно.

Последний плотный слой состоит из 10 нейронов выходного слоя. Он отвечает за расчет убытков и прогнозы.

Теперь нам нужно скомпилировать нашу модель.

У Keras есть метод compile (), который определяет функцию потерь, оптимизатор и метрики.

model.compile(loss=keras.losses.sparse_categorical_crossentropy,
optimizer="sgd", metrics=["accuracy"])

Тренируй и оценивай

После компиляции модели мы все можем использовать метод fit (), указав эпохи, размер пакета и т. Д.

# Training model for 30 epochs
history = model.fit(X_train, y_train,
epochs=30, validation_data=(X_valid, y_valid))

Этот метод обучит модель 30 эпохам. Потери поездов, Потери при проверке и точность поездов, точность проверки можно найти в history.history.

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

import pandas as pd
pd.DataFrame(history.history).plot(figsize=(8, 5))
plt.grid(True)
plt.gca().set_ylim(0, 1) # set the vertical range to [0-1]
plt.show()

Мы видим, что промежуток между кривыми валидации и обучения невелик, поэтому проблем с переобучением нет.

Теперь мы можем опробовать различные гиперпараметры, чтобы добиться большей точности набора данных.

Если вас устраивает точность обучения и проверки, оцените ее на тестовом наборе.

model.evaluate(X_test, Y_test)

Точность на тестовом наборе может быть ниже, чем на проверочном наборе, поскольку гиперпараметры настроены для проверочного набора.

Сохраните обученную модель

После того, как вы обучили и оценили свою модель NN на тестовом наборе, вы можете загрузить свою модель с помощью метода Keras save (), а затем загрузить ее в любое время для вывода.

# save your model as HDF5 format
model.save("my_keras_model.h5")

Он сохраняет как архитектуру модели, так и значения всех параметров модели для каждого слоя (все обученные веса и смещения).

Если вы хотите использовать свою обученную модель для вывода, просто загрузите ее:

model = keras.models.load_model("my_keras_model.h5")

Пришло время самостоятельно обучить разные наборы данных. Удачи!

Рекомендуется:

  1. Специализация глубокого обучения (Coursera)
  2. «Практическое машинное обучение с помощью Scikit-Learn и TensorFlow», автор Орелиен Жерон (книга О’Рейли)

Вы можете связаться со мной по адресу twitter.com/aniketmaurya или написать 📧 по адресу [email protected]