Добро пожаловать обратно! 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 и т. Д.



Спасибо за прочтение!