В отличие от предыдущих версий, 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")
Пришло время самостоятельно обучить разные наборы данных. Удачи!
Рекомендуется:
- Специализация глубокого обучения (Coursera)
- «Практическое машинное обучение с помощью Scikit-Learn и TensorFlow», автор Орелиен Жерон (книга О’Рейли)
Вы можете связаться со мной по адресу twitter.com/aniketmaurya или написать 📧 по адресу [email protected]