Добро пожаловать обратно! Keras - отличный API, используемый для машинного обучения с Python, это очень важная часть, которую должен знать каждый специалист по данным / инженеру по машинному обучению. Давайте разберемся с важностью Keras и даже разработаем проект с этим API!
Введение
Во-первых, у вас есть бесконечное количество возможностей с Keras, поэтому мы будем работать над базовым проектом, который должен помочь вам разобраться в этом пакете. Keras - это API, разработанный Google, он также используется множеством других компаний по всему миру. Этот API работает с такими библиотеками, как TensorFlow, этот пакет также разработан Google. Некоторые преимущества использования Keras вместе с такими пакетами, как TensorFlow, заключаются в том, что его очень легко тестировать, и за ним стоит очень большое сообщество. Я также сделал базовое введение в TensorFlow, я настоятельно рекомендую прочитать эту статью, чтобы лучше понять машинное обучение с TensorFlow:
Создание проекта
Потрясающий! Теперь, когда у нас есть базовое представление о Keras, давайте продолжим и создадим базовый проект! Этот конкретный проект размещен на Google CoLab, чтобы просмотреть весь проект, просмотрите исходный код ниже:
Для начала давайте перейдем к нашей среде Python и установим / импортируем следующие пакеты:
import json import os import pandas as pd import pprint import tensorflow as tf import time import numpy as np from tensorflow import keras
Далее мы также хотим импортировать следующий пакет:
print(tf.__version__) import distutils if distutils.version.LooseVersion(tf.__version__) < '1.14': raise Exception('This notebook is compatible with TensorFlow 1.14 or higher, for TensorFlow 1.13 or lower please use the previous version at https://github.com/tensorflow/tpu/blob/r1.13/tools/colab/classification_iris_data_with_keras.ipynb')
Теперь мы хотим разрешить наш адрес TPU, для этого мы используем следующий код:
use_tpu = True #@param {type:”boolean”} if use_tpu: assert ‘COLAB_TPU_ADDR’ in os.environ, ‘Missing TPU; did you request a TPU in Notebook Settings?’ if ‘COLAB_TPU_ADDR’ in os.environ: TF_MASTER = ‘grpc://{}’.format(os.environ[‘COLAB_TPU_ADDR’]) else: TF_MASTER=’’
Далее мы хотим назначить адрес TPU:
tpu_address = TF_MASTER
Затем мы хотим назначить определенное количество эпох:
epochs = 50
Затем мы хотим установить количество шагов для нашей эпохи:
steps_per_epoch = 5
Потрясающий! Мы готовы импортировать некоторые данные, мы хотим сначала ввести наборы данных радужной оболочки глаза с веб-сайтов TensorFlow:
TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv" TEST_URL = "http://download.tensorflow.org/data/iris_test.csv"
Давайте продолжим и создадим еще несколько фреймов данных для этого проекта:
CSV_COLUMN_NAMES = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species'] SPECIES = ['Setosa', 'Versicolor', 'Virginica'] PREDICTION_INPUT_DATA = { 'SepalLength': [6.9, 5.1, 5.9, 6.0, 5.5, 6.2, 5.5, 6.3], 'SepalWidth': [3.1, 3.3, 3.0, 3.4, 2.5, 2.9, 4.2, 2.8], 'PetalLength': [5.4, 1.7, 4.2, 4.5, 4.0, 4.3, 1.4, 5.1], 'PetalWidth': [2.1, 0.5, 1.5, 1.6, 1.3, 1.3, 0.2, 1.5], } PREDICTION_OUTPUT_DATA = ['Virginica', 'Setosa', 'Versicolor', 'Versicolor', 'Versicolor', 'Versicolor', 'Setosa', 'Virginica']
Затем мы хотим разработать некоторые функции для загрузки / загрузки данных в эти фреймы данных, используя для этого следующий код:
def maybe_download(): train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1], TRAIN_URL) test_path = tf.keras.utils.get_file(TEST_URL.split('/')[-1], TEST_URL) return train_path, test_path def load_data(y_name='Species'): """Returns the iris dataset as (train_x, train_y), (test_x, test_y).""" train_path, test_path = maybe_download() train = pd.read_csv(train_path, names=CSV_COLUMN_NAMES, header=0, dtype={'SepalLength': pd.np.float32, 'SepalWidth': pd.np.float32, 'PetalLength': pd.np.float32, 'PetalWidth': pd.np.float32, 'Species': pd.np.int32}) train_x, train_y = train, train.pop(y_name) test = pd.read_csv(test_path, names=CSV_COLUMN_NAMES, header=0, dtype={'SepalLength': pd.np.float32, 'SepalWidth': pd.np.float32, 'PetalLength': pd.np.float32, 'PetalWidth': pd.np.float32, 'Species': pd.np.int32}) test_x, test_y = test, test.pop(y_name) return (train_x, train_y), (test_x, test_y)
Затем мы хотим определить модель Keras, для этого мы используем следующий код:
def get_model(): return keras.Sequential([ keras.layers.Dense(10, input_shape=(4,), activation=tf.nn.relu, name = "Dense_1"), keras.layers.Dense(10, activation=tf.nn.relu, name = "Dense_2"), keras.layers.Dense(3, activation=None, name = "logits"), keras.layers.Dense(3, activation=tf.nn.softmax, name = "softmax") ])
Далее мы собираемся использовать TPU для запуска этого проекта, мы хотим сначала создать и скомпилировать дистрибутив:
resolver = tf.distribute.cluster_resolver.TPUClusterResolver(TF_MASTER) tf.config.experimental_connect_to_cluster(resolver) tf.tpu.experimental.initialize_tpu_system(resolver) strategy = tf.distribute.experimental.TPUStrategy(resolver)
Далее мы хотим запустить следующий код:
with strategy.scope(): model = get_model() model.compile(optimizer=tf.keras.optimizers.Adagrad(learning_rate=0.1), loss=tf.keras.losses.sparse_categorical_crossentropy, metrics=[‘accuracy’]) model.summary()
Теперь мы переходим к обучению реальной модели, для этого мы используем следующий синтаксис:
# Fetch the data (train_x, train_y), (test_x, test_y) = load_data() # Train the model model.fit( train_x.values, train_y.values, steps_per_epoch = steps_per_epoch, epochs=epochs, )
Далее мы хотим оценить модель:
model.evaluate(test_x.values, test_y.values, batch_size=8)
Сохраняем модель:
model.save_weights(‘./DNN_TPU_1024.h5’, overwrite=True)
Теперь мы хотим сделать фрейм данных прогноза:
COLUMNS_NAME=['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'] data = pd.DataFrame(PREDICTION_INPUT_DATA, columns=COLUMNS_NAME) print(data)
Результат будет выглядеть так:
А теперь сделаем прогноз на ТПУ:
predictions = model.predict(data.values.astype(np.float32)) template = ('\nPrediction is "{}" ({:.1f}%), expected "{}"') for pred_dict, expec in zip(predictions, PREDICTION_OUTPUT_DATA): class_index = np.argmax(pred_dict) class_probability = np.max(pred_dict) print(template.format(SPECIES[class_index], 100*class_probability, expec))
Прогнозы должны выглядеть примерно так:
Наконец, мы хотим сделать прогноз для ЦП:
cpu_model = get_model() cpu_model.load_weights('./DNN_TPU_1024.h5') cpu_predictions = cpu_model.predict(data) template = ('\nPrediction is "{}" ({:.1f}%), expected "{}"') for pred_dict, expec in zip(cpu_predictions, PREDICTION_OUTPUT_DATA): class_index = np.argmax(pred_dict) class_probability = np.max(pred_dict) print(template.format(SPECIES[class_index], 100*class_probability, expec))
Результат должен выглядеть так:
Вот и все! На этом этапе у вас должно быть базовое представление о Keras и вы разработали проект с этим API! Я настоятельно рекомендую взглянуть на несколько других проектов с участием Кераса, чтобы лучше понять этот мощный API машинного обучения. Планируете ли вы использовать Keras в будущем? Я хотел бы услышать ваш опыт работы с Керасом!
Как всегда
если у вас есть предложения, мысли или вы просто хотите пообщаться, не стесняйтесь связаться / подписаться на меня в Twitter! Кроме того, ниже приведены ссылки на некоторые из моих любимых ресурсов по изучению программирования, Python, R, Data Science и т. Д.
Спасибо за прочтение!