1. Обзор
В ходе этой лабораторной работы вы познакомитесь с различными инструментами в блокнотах AI Platform для изучения ваших данных и создания прототипов моделей машинного обучения.
Что вы узнаете
Вы узнаете, как:
- Создайте и настройте экземпляр AI Platform Notebooks.
- Отслеживайте код своих блокнотов с помощью git, напрямую интегрированного в блокноты AI Platform.
- Используйте инструмент «Что, если» в своем блокноте
Общая стоимость запуска этой лаборатории в Google Cloud составляет около 1 доллара США . Полную информацию о ценах на ноутбуки с платформой AI можно найти здесь .
2. Создайте экземпляр AI Platform Notebooks.
Для запуска этой лаборатории кода вам понадобится проект Google Cloud Platform с включенной оплатой. Чтобы создать проект, следуйте инструкциям здесь .
Шаг 2. Включите API Compute Engine.
Перейдите к Compute Engine и выберите «Включить» , если он еще не включен. Это понадобится вам для создания экземпляра блокнота.
Шаг 3. Создайте экземпляр блокнота
Перейдите в раздел «Блокноты AI Platform» в облачной консоли и нажмите «Новый экземпляр» . Затем выберите последний тип экземпляра TensorFlow 2 Enterprise без графических процессоров :
Дайте своему экземпляру имя или используйте имя по умолчанию. Затем мы рассмотрим варианты настройки. Нажмите кнопку «Настроить» :
AI Platform Notebooks имеет множество различных параметров настройки, в том числе: регион, в котором развернут ваш экземпляр, тип образа, размер компьютера, количество графических процессоров и многое другое. Мы будем использовать значения по умолчанию для региона и среды. Для конфигурации машины мы будем использовать машину n1-standard-8 :
Мы не будем добавлять графические процессоры и будем использовать настройки по умолчанию для загрузочного диска, сети и разрешений. Выберите «Создать» , чтобы создать свой экземпляр. Это займет несколько минут.
После создания экземпляра рядом с ним в пользовательском интерфейсе ноутбуков появится зеленая галочка. Выберите «Открыть JupyterLab» , чтобы открыть экземпляр и начать создание прототипа:
Открыв экземпляр, создайте новый каталог с именем codelab. Это каталог, из которого мы будем работать на протяжении всей лабораторной работы:
Откройте вновь созданный каталог codelab, дважды щелкнув его, а затем выберите блокнот Python 3 на панели запуска:
Переименуйте блокнот в demo.ipynb
или любое другое имя, которое вы хотите ему дать.
Шаг 4. Импортируйте пакеты Python
Создайте новую ячейку в блокноте и импортируйте библиотеки, которые мы будем использовать в этой лаборатории кода:
import pandas as pd
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
import json
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery
from witwidget.notebook.visualization import WitWidget, WitConfigBuilder
3. Подключите данные BigQuery к своему блокноту.
BigQuery, хранилище больших данных Google Cloud, сделало многие наборы данных общедоступными для вашего исследования. Ноутбуки AI Platform поддерживают прямую интеграцию с BigQuery без необходимости аутентификации.
В этой лабораторной работе мы будем использовать набор данных о рождаемости . Он содержит данные почти о каждом рождении в США за 40-летний период, включая вес ребенка при рождении, а также демографическую информацию о родителях ребенка. Мы будем использовать подмножество функций для прогнозирования веса ребенка при рождении.
Шаг 1. Загрузите данные BigQuery в свой блокнот.
Мы будем использовать клиентскую библиотеку Python для BigQuery для загрузки данных в DataFrame Pandas. Исходный набор данных имеет размер 21 ГБ и содержит 123 миллиона строк. Для простоты мы будем использовать только 10 000 строк из набора данных.
Создайте запрос и просмотрите полученный DataFrame с помощью следующего кода. Здесь мы получаем 4 функции из исходного набора данных, а также вес ребенка (то, что предсказывает наша модель). Набор данных собран много лет назад, но для этой модели мы будем использовать только данные после 2000 года:
query="""
SELECT
weight_pounds,
is_male,
mother_age,
plurality,
gestation_weeks
FROM
publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()
Чтобы получить сводку числовых функций в нашем наборе данных, запустите:
df.describe()
Здесь показано среднее значение, стандартное отклонение, минимум и другие показатели для наших числовых столбцов. Наконец, давайте получим некоторые данные в нашем логическом столбце, указывающие пол ребенка. Мы можем сделать это с помощью метода value_counts
Pandas:
df['is_male'].value_counts()
Похоже, набор данных почти сбалансирован 50/50 по полу.
Шаг 2. Подготовьте набор данных для обучения
Теперь, когда мы загрузили набор данных в наш блокнот в виде DataFrame Pandas, мы можем выполнить некоторую предварительную обработку и разделить его на обучающий и тестовый наборы.
Сначала давайте удалим строки с нулевыми значениями из набора данных и перетасируем данные:
df = df.dropna()
df = shuffle(df, random_state=2)
Затем извлеките столбец метки в отдельную переменную и создайте DataFrame только с нашими функциями. Поскольку is_male
— это логическое значение, мы преобразуем его в целое число, чтобы все входные данные нашей модели были числовыми:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
data['is_male'] = data['is_male'].astype(int)
Теперь, если вы просмотрите наш набор данных, запустив data.head()
, вы должны увидеть четыре функции, которые мы будем использовать для обучения.
4. Инициализируйте git
AI Platform Notebooks имеет прямую интеграцию с git, поэтому вы можете осуществлять контроль версий непосредственно в среде вашего блокнота. Это поддерживает фиксацию кода прямо в пользовательском интерфейсе ноутбука или через терминал, доступный в JupyterLab. В этом разделе мы инициализируем репозиторий git в нашем блокноте и сделаем первую фиксацию через пользовательский интерфейс.
Шаг 1. Инициализируйте репозиторий git.
В каталоге вашей лаборатории кода выберите Git , а затем Init в верхней строке меню JupyterLab:
Когда вас спросят, хотите ли вы сделать этот каталог репозиторием Git, выберите «Да» . Затем выберите значок Git на левой боковой панели, чтобы увидеть статус ваших файлов и коммитов:
Шаг 2. Сделайте свой первый коммит
В этом пользовательском интерфейсе вы можете добавлять файлы в фиксацию, просматривать различия файлов (мы вернемся к этому позже) и фиксировать свои изменения. Начнем с фиксации файла блокнота, который мы только что добавили.
Установите флажок рядом с файлом блокнота demo.ipynb
, чтобы подготовить его для фиксации (вы можете игнорировать каталог .ipynb_checkpoints/
). Введите сообщение о фиксации в текстовое поле, а затем нажмите на галочку, чтобы зафиксировать изменения:
Введите свое имя и адрес электронной почты при появлении запроса. Затем вернитесь на вкладку «История» , чтобы увидеть свой первый коммит:
Обратите внимание, что снимки экрана могут не совсем соответствовать вашему пользовательскому интерфейсу из-за обновлений, произошедших с момента публикации этой лабораторной работы.
5. Создайте и обучите модель TensorFlow.
Мы будем использовать набор данных BigQuery о рождаемости, который мы загрузили в наш блокнот, чтобы построить модель, прогнозирующую вес ребенка. В этой лабораторной работе мы сосредоточимся на инструментах ноутбука, а не на точности самой модели.
Шаг 1. Разделите данные на обучающие и тестовые наборы.
Мы воспользуемся утилитой Scikit Learn train_test_split
, чтобы разделить наши данные перед построением модели:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Теперь мы готовы построить нашу модель TensorFlow!
Шаг 2. Создайте и обучите модель TensorFlow.
Мы будем строить эту модель, используя API Sequential
модели tf.keras, который позволяет нам определить нашу модель как стек слоев. Весь код, который нам нужен для построения нашей модели, находится здесь:
model = Sequential([
Dense(64, activation='relu', input_shape=(len(x_train.iloc[0]),)),
Dense(32, activation='relu'),
Dense(1)]
)
Затем мы скомпилируем нашу модель, чтобы можно было ее обучить. Здесь мы выберем оптимизатор модели, функцию потерь и метрики, которые мы хотим, чтобы модель регистрировала во время обучения. Поскольку это регрессионная модель (предсказывающая числовое значение), в качестве показателя мы используем среднеквадратичную ошибку вместо точности:
model.compile(optimizer=tf.keras.optimizers.RMSprop(),
loss=tf.keras.losses.MeanSquaredError(),
metrics=['mae', 'mse'])
Вы можете использовать удобную функцию model.summary()
Keras, чтобы увидеть форму и количество обучаемых параметров вашей модели на каждом уровне.
Теперь мы готовы обучать нашу модель. Все, что нам нужно сделать, это вызвать метод fit()
, передав ему наши обучающие данные и метки. Здесь мы будем использовать дополнительный параметр validation_split, который будет хранить часть наших обучающих данных для проверки модели на каждом этапе. В идеале вы хотите, чтобы потери при обучении и проверке уменьшались . Но помните, что в этом примере мы больше сосредоточены на инструментах модели и блокнота, а не на качестве модели:
model.fit(x_train, y_train, epochs=10, validation_split=0.1)
Шаг 3. Сгенерируйте прогнозы на тестовых примерах
Чтобы увидеть, как работает наша модель, давайте сгенерируем несколько тестовых прогнозов для первых 10 примеров из нашего набора тестовых данных.
num_examples = 10
predictions = model.predict(x_test[:num_examples])
А затем мы перейдем к предсказаниям нашей модели, сравнивая их с фактическим значением:
for i in range(num_examples):
print('Predicted val: ', predictions[i][0])
print('Actual val: ',y_test.iloc[i])
print()
Шаг 4. Используйте git diff и зафиксируйте изменения.
Теперь, когда вы внесли некоторые изменения в блокнот, вы можете опробовать функцию git diff, доступную в пользовательском интерфейсе git блокнотов. Блокнот demo.ipynb
теперь должен находиться в разделе «Изменено» пользовательского интерфейса. Наведите курсор на имя файла и щелкните значок сравнения:
При этом вы сможете увидеть разницу ваших изменений, например:
На этот раз мы зафиксируем наши изменения через командную строку с помощью терминала. В меню Git в верхней строке меню JupyterLab выберите Git Command in Terminal . Если во время выполнения приведенных ниже команд у вас открыта вкладка git на левой боковой панели, вы сможете увидеть свои изменения, отраженные в пользовательском интерфейсе git.
В новом экземпляре терминала выполните следующую команду, чтобы подготовить файл записной книжки для фиксации:
git add demo.ipynb
А затем выполните следующую команду, чтобы зафиксировать изменения (вы можете использовать любое сообщение о фиксации):
git commit -m "Build and train TF model"
Затем вы должны увидеть свой последний коммит в истории:
6. Используйте инструмент «Что если» прямо из своего блокнота
Инструмент «Что, если» — это интерактивный визуальный интерфейс, предназначенный для того, чтобы помочь вам визуализировать наборы данных и лучше понять выходные данные моделей машинного обучения. Это инструмент с открытым исходным кодом, созданный командой PAIR в Google. Хотя он работает с любым типом модели, он имеет некоторые функции, созданные специально для Cloud AI Platform.
Инструмент «Что, если» предварительно установлен в экземплярах ноутбуков Cloud AI Platform с TensorFlow. Здесь мы будем использовать его, чтобы увидеть, как наша модель работает в целом, и проверить ее поведение на точках данных из нашего тестового набора.
Шаг 1. Подготовьте данные для инструмента «Что, если»
Чтобы максимально эффективно использовать инструмент «Что если», мы отправим ему примеры из нашего набора тестов вместе с метками истинности для этих примеров ( y_test
). Таким образом, мы сможем сравнить то, что предсказала наша модель, с истинной истиной. Запустите строку кода ниже, чтобы создать новый DataFrame с нашими тестовыми примерами и их метками:
wit_data = pd.concat([x_test, y_test], axis=1)
В этой лабораторной работе мы подключим инструмент «Что, если» к модели, которую мы только что обучили в своем блокноте. Для этого нам нужно написать функцию, которую инструмент будет использовать для запуска этих точек тестовых данных в нашу модель:
def custom_predict(examples_to_infer):
preds = model.predict(examples_to_infer)
return preds
Шаг 2. Создайте экземпляр инструмента «Что, если»
Мы создадим экземпляр инструмента «Что, если», передав ему 500 примеров из объединенного набора тестовых данных + метки истинности, которые мы только что создали. Мы создаем экземпляр WitConfigBuilder
для настройки инструмента, передавая ему наши данные, пользовательскую функцию прогнозирования, которую мы определили выше, вместе с нашей целью (то, что мы прогнозируем) и тип модели:
config_builder = (WitConfigBuilder(wit_data[:500].values.tolist(), data.columns.tolist() + ['weight_pounds'])
.set_custom_predict_fn(custom_predict)
.set_target_feature('weight_pounds')
.set_model_type('regression'))
WitWidget(config_builder, height=800)
Вы должны увидеть что-то подобное, когда загрузится инструмент «Что, если»:
На оси X вы можете видеть точки тестовых данных, распределенные по прогнозируемому значению веса модели, weight_pounds
.
Шаг 3. Изучите поведение модели с помощью инструмента «Что, если»
С помощью инструмента «Что, если» можно сделать много интересных вещей. Здесь мы рассмотрим лишь некоторые из них. Во-первых, давайте посмотрим на редактор точек данных. Вы можете выбрать любую точку данных, чтобы просмотреть ее функции и изменить значения функций. Начните с нажатия на любую точку данных:
Слева вы увидите значения функций для выбранной вами точки данных. Вы также можете сравнить метку истинности этой точки данных со значением, предсказанным моделью. На левой боковой панели вы также можете изменить значения признаков и повторно запустить прогноз модели, чтобы увидеть, как это изменение повлияло на вашу модель. Например, мы можем изменить значение gestation_weeks на 30 для этой точки данных, дважды щелкнув по ней для повторного прогнозирования:
Используя раскрывающиеся меню в разделе графика инструмента «Что, если» вы можете создавать всевозможные пользовательские визуализации. Например, вот диаграмма с прогнозируемым весом моделей на оси X, возрастом матери на оси Y и точками, окрашенными в соответствии с их ошибкой вывода (более темный цвет означает более высокую разницу между прогнозируемым и фактическим весом). Здесь это выглядит так, что с уменьшением веса погрешность модели немного увеличивается:
Затем нажмите кнопку «Графики частичной зависимости» слева. Это показывает, как каждая функция влияет на прогноз модели. Например, по мере увеличения срока беременности прогнозируемый нашей моделью вес ребенка также увеличивается:
Дополнительные идеи исследования с помощью инструмента «Что, если» можно найти по ссылкам в начале этого раздела.
7. Необязательно: подключите локальный репозиторий git к GitHub.
Наконец, мы узнаем, как подключить репозиторий git в экземпляре нашего блокнота к репозиторию в нашей учетной записи GitHub. Если вы хотите выполнить этот шаг, вам понадобится учетная запись GitHub .
Шаг 1. Создайте новый репозиторий на GitHub.
В своей учетной записи GitHub создайте новый репозиторий. Дайте ему имя и описание, решите, хотите ли вы, чтобы он был общедоступным, и выберите «Создать репозиторий» (вам не нужно инициализировать с помощью README). На следующей странице вы будете следовать инструкциям по отправке существующего репозитория из командной строки.
Откройте окно терминала и добавьте новый репозиторий в качестве удаленного. Замените username
в URL-адресе репозитория ниже на свое имя пользователя GitHub, а your-repo
на имя только что созданного:
git remote add origin git@github.com:username/your-repo.git
Шаг 2. Аутентификация на GitHub в экземпляре записной книжки.
Далее вам нужно будет пройти аутентификацию на GitHub из экземпляра записной книжки. Этот процесс зависит от того, включена ли у вас двухфакторная аутентификация на GitHub.
Если вы не знаете, с чего начать, следуйте инструкциям в документации GitHub, чтобы создать ключ SSH , а затем добавьте новый ключ в GitHub .
Шаг 3. Убедитесь, что вы правильно связали репозиторий GitHub.
Чтобы убедиться, что вы все настроили правильно, запустите git remote -v
в своем терминале. Вы должны увидеть свой новый репозиторий в списке удаленных. Как только вы увидите URL-адрес своего репозитория GitHub и пройдете аутентификацию на GitHub из своего блокнота, вы будете готовы отправлять данные непосредственно на GitHub из экземпляра блокнота.
Чтобы синхронизировать локальный репозиторий git записной книжки с недавно созданным репозиторием GitHub, нажмите кнопку загрузки в облако в верхней части боковой панели Git:
Обновите репозиторий GitHub, и вы увидите код блокнота с предыдущими коммитами! Если у других есть доступ к вашему репозиторию GitHub и вы хотите загрузить последние изменения в свой блокнот, щелкните значок загрузки в облако, чтобы синхронизировать эти изменения.
На вкладке «История» пользовательского интерфейса git в блокнотах вы можете увидеть, синхронизированы ли ваши локальные коммиты с GitHub. В этом примере origin/master
соответствует нашему репозиторию на GitHub:
Всякий раз, когда вы делаете новые коммиты, просто снова нажмите кнопку загрузки в облако, чтобы перенести эти изменения в репозиторий GitHub.
8. Поздравляем!
Вы очень много сделали в этой лаборатории 👏👏👏
Подводя итоги, вы узнали, как:
- Создайте модифицированный экземпляр AI Platform Notebook.
- Инициализируйте локальный репозиторий git в этом экземпляре, добавляйте коммиты через git UI или командную строку, просматривайте различия git в git UI Notebook.
- Создайте и обучите простую модель TensorFlow 2.
- Используйте инструмент «Что, если» в своем экземпляре Notebook
- Подключите git-репозиторий вашего ноутбука к внешнему репозиторию на GitHub.
9. Очистка
Если вы хотите продолжать использовать этот ноутбук, рекомендуется выключать его, когда он не используется. В пользовательском интерфейсе ноутбуков в облачной консоли выберите блокнот и нажмите «Стоп» :
Если вы хотите удалить все ресурсы, созданные в ходе этой лабораторной работы, просто удалите экземпляр блокнота, а не останавливайте его.
Используя меню навигации в облачной консоли, перейдите к разделу «Хранилище» и удалите оба сегмента, созданные вами для хранения ресурсов модели.