Машинное обучение с помощью ресурсов Google

Google машинное обучение искусственный интеллект

В этом посте я покажу, как использовать машинное обучение с Google Colab. (требуется научный доступ в Интернет)

Google colab — это внутренний исследовательский инструмент для Google Data Science. Они выпустили этот инструмент для широкой публики ранее, распространяя высокую цель обучения и исследований в области машинного обучения. Прошло довольно много времени, но в последнее время появилась новая функция, которая вызывает большой интерес.

You can use GPU as a backend for free for 12 hours at a time.

Вы можете бесплатно использовать GPU в качестве серверной части в течение 12 часов подряд.

«Графические вычисления бесплатно? Вы издеваетесь?»

Вот такой вопрос сразу приходит мне в голову. На самом деле, он отлично работает и очень полезен. пожалуйста, передайте этоОбсуждение на КагглеУзнайте больше об этом объявлении. Несколько моментов для обсуждения:

1. В настоящее время в серверной части используется графический процессор K80.
Ограничение в 2,12 часа предназначено для непрерывного выделения виртуальных машин. Это означает, что мы можем использовать вычисления на GPU даже через 12 часов, подключившись к другой виртуальной машине.

В Google Colab много приятных функций, и совместная работа — одна из основных. Я не буду описывать здесь эти функции (см. мой последний постВведение в Google-Colab), но особенно хорошо, если вы работаете с группой людей.

Итак, давайте начнем использовать фастаи с этим сервисом.

Get Started

1. Войдите в систему с помощью учетной записи Google

2. Установка и использование библиотеки

Colab поставляется с базовыми библиотеками глубокого обучения, такими как Tensorflow, Matplotlib, Numpy и Pandas. Если вам нужны другие зависимости, такие как Keras, вы можете создать новый блок кода и ввести

#Установка других библиотек аналогична# Например: # Установите последнюю версию Keras https://keras.io/# !pip install keras# Укажите версию для установки !pip install keras==2.0.9

3 операции с файлами Google Диска

Авторизованный вход

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

# Установите операционную библиотеку PyDrive, которую нужно выполнить только один раз для каждого ноутбука! pip install -U -q PyDrive

Формальная аутентификация

from pydrive.auth import GoogleAuthfrom pydrive.drive import GoogleDrivefrom google.colab import authfrom oauth2client.client import GoogleCredentials# Авторизация входа, аутентификация будет выполнена только в первый раз auth.authenticate_user()gauth = GoogleAuth()gauth.credentials = GoogleCredentials.get_application_default()drive = GoogleDrive(gauth)

После выполнения этого кода будет напечатано следующее содержимое: щелкните соединение, чтобы авторизовать вход в систему, получите значение токена и заполните поле ввода, а затем нажмите Enter, чтобы продолжить, чтобы завершить вход.img

обход каталога

# Список всех файлов в корневом каталоге # "q" См. руководство по условиям запроса: https://developers.google.com/drive/v2/web/search-parametersfile_list = drive.ListFile({'q': "'root ' у родителей и в корзине = false"}).GetList() для файла1 в file_list: print('title: %s, id: %s, mimeType: %s' % (файл1['название'], файл1['id'], файл1["MIMEType"]))

Вы можете увидеть результат печати консоли

title: Colab Test, id: 1cB5CHKSdL26AMXQ5xrqk2kaBv5LSkIsJ8HuEDyZpeqQ, mimeType: application/vnd.google-apps.documenttitle: Colab Notebooks, id: 1U9363A12345TP2nSeh2K8FzDKSsKj5Jj, mimeType: application/vnd.google-apps.folder

где id — уникальный идентификатор файла, полученный в следующем туториале. По mimeType можно узнатьColab 测试Файл является документом, а блокноты Colab — папкой (то есть корневым каталогом хранилища блокнотов Colab).Если вы хотите запросить файлы в папке блокнотов Colab, условия запроса можно записать следующим образом:

# 'Идентификатор каталога' в parentfile_list = drive.ListFile({'q': "'1cB5CHKSdL26AMXQ5xrqk2kaBv5LBkIsJ8HuEDyZpeqQ' в родительском файле и сброшено=false"}).GetList()

прочитать содержимое файла

В настоящее время протестированы следующие форматы, которые могут напрямую читать содержимое:.txt(mimeType: text/plain), прочитать код:

file = drive.CreateFile({'id': "Замените идентификатором вашего файла .txt"}) file.GetContentString()

и.csvЕсли вы используетеGetContentString()Только первая строка данных может быть напечатана, используйте ``

file = drive.CreateFile({'id': "Замените идентификатором вашего файла .csv"}) #Операция загрузки здесь представляет собой просто кеш, она не будет загружать лишний файл в каталог вашего Google Диска file.GetContentFile('iris .csv', "text/csv") # напрямую вывести содержимое файла с помощью open('iris.csv') as f: print f.readlines()# прочитать с помощью pandas import pandaspd.read_csv('iris.csv', index_col=[0,1], skipinitialspace=Истина)

Colab выведет результаты непосредственно в виде таблицы (на рисунке ниже показаны первые несколько строк набора данных радужной оболочки), а адрес набора данных радужной оболочкиЭмма. В это время. Беркли. Квота/данные/Ирис. Из…, студенты, которые учатся, могут загружать на свой собственный Google Диск.img

операция записи файла

# Создать текстовый файл uploaded = drive.CreateFile({'title': 'Example.txt'})uploaded.SetContentString('Test content')uploaded.Upload()print('Идентификатор файла после создания: {}'. формат (uploaded.get('id')))

Другие операции можно просмотретьPython hosted.org/py drive/FI уже…

4 Операции с электронными таблицами Google

Авторизованный вход

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

# Установите соответствующую библиотеку pip install --upgrade -q gspread

Аутентификация

from google.colab import authauth.authenticate_user()import gspreadfrom oauth2client.client import GoogleCredentialsgc = gspread.authorize(GoogleCredentials.get_application_default())

читать

Импортируйте данные iris.csv, чтобы создать файл Google Sheet для демонстрации, который можно поместить в любой каталог Google Диска.

worksheet = gc.open('iris').sheet1# получить список [# [строка 1, столбец 1, строка 1, столбец 2, ..., строка 1, столбец n], ..., [строка n, столбец 1, строка n, столбец 2, ..., строка n, столбец n]]rows = worksheet.get_all_values()print(rows)# читать с помощью pandas import pandas как pdpd.DataFrame.from_records (строки)

Результаты печати

[[‘5,1’, ‘3,5’, ‘1,4’, ‘0,2’, ‘сетоза’], [‘4,9’, ‘3’, ‘1,4’, ‘0,2’, ‘сетоза’], …img

написать

sh = gc.create('Google Sheet') # Старайтесь быть на английском языке # Открыть книгу и рабочий лист worksheet = gc.open('Google Sheet').sheet1cell_list = worksheet.range('A1:C2')import randomfor cell in cell_list : cell.value = random.randint(1, 10)worksheet.update_cells(cell_list)

5 Загрузите файл на локальный

с open('example.txt', 'w') as f: f.write('test content')files.download('example.txt')

6. Дополнительные примечания

Через фронт вы уже знаете, как выполнять операции с Google Диском и Листом. Вы можете загрузить необходимые файлы в соответствующее место.

Вы также можете загрузить прямо в colab.File->Upload Notebook.

7. Нет графического процессора

Вот мой проект классификации текста LSTM с открытым исходным кодом на Github в качестве примера.GitHub.com/код ключа jin/… master/dataТри файла в каталоге хранятся на Google Диске. В этом примере показана классификация заголовков по трем категориям: «Здоровье», «Технологии» и «Дизайн».

новый

Создайте новую записную книжку Python2 в Colabimg

Установить зависимости

!pip install keras!pip install jieba!pip install h5pyimport h5pyimport jieba as jbimport numpy as npimport keras as krsimport tensorflow as tffrom sklearn.preprocessing import LabelEncoder

Скачать данные

Авторизованный вход

# Установите операционную библиотеку PyDrive, которую нужно выполнить только один раз для каждого ноутбука! # Авторизация входа, только первый раз будет аутентифицирован auth.authenticate_user() gauth = GoogleAuth() gauth.credentials = GoogleCredentials.get_application_default() drive = GoogleDrive(gauth) return drive

Список всех файлов в GD

def list_file(drive): file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList() for file1 in file_list: print('title: %s, id: %s, mimeType: %s' % (file1['title'], file1['id'], file1["mimeType"])) drive = login_google_drive()list_file(drive)

Кэшировать данные в рабочую среду

def cache_data(): # Замените id соответствующим идентификатором файла, прочитанным на предыдущем шаге }) design_txt = drive.CreateFile({'id': "1J4lndcsjUb8_VfqPcfsDeOoB21bOLea3"}) #Операция загрузки здесь представляет собой просто кеширование, она не загружает дополнительный файл в каталог вашего Google Диска health_txt.GetContentFile('health.txt', "text/plain") /plain") design_txt.GetContentFile('design.txt', "text/plain") print("Кэш выполнен успешно") cache_data()

Чтение данных рабочей среды

def load_data(): titles = [] print("Загрузка данных категории здоровья...") with open("health.txt", "r") as f: for line in f.readlines(): titles.append( line.strip()) print("Загрузка данных технической категории...") с open("tech.txt", "r") as f: для строки в f.readlines(): titles.append (line.strip ()) print("Загрузка данных категории дизайна...") с open("design.txt", "r") as f: для строки в f.readlines(): titles.append(line.strip()) print (" Всего загружено %s заголовков" % len(titles)) return titles titles = load_data()

вкладка загрузки

def load_label(): arr0 = np.zeros(shape=[12000, ]) arr1 = np.ones(shape=[12000, ]) arr2 = np.array([2]).repeat(7318) target = np. hstack([arr0, arr1, arr2]) print("Всего загружено %s этикеток" % target.shape) encoder = LabelEncoder() encoder.fit(target) encoded_target = encoder.transform(target) dummy_target = krs.utils.np_utils.to_categorical(encoded_target) return dummy_target target = load_label()

предварительная обработка текста

max_sequence_length = 30embedding_size = 50# Сегментация заголовков titles = [".".join(jb.cut(t, cut_all=True)) для t в заголовках]# word2vec набор слов vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor( max_sequence_length, min_frequency=1)text_processed = np.array(list(vocab_processor.fit_transform(titles)))# читать метки слов dict = vocab_processor.vocabulary_._mappingsorted_vocab = sorted(dict.items(), key = lambda x : x[1])

Создавайте нейронные сети

Здесь в качестве первых двух слоев используются Embedding и lstm, а результаты вывода активируются softmax.

# Настроить структуру сети def build_netword(num_vocabs): # Настроить структуру сети model = krs.Sequential() model.add(krs.layers.Embedding(num_vocabs, embedding_size, input_length=max_sequence_length)) model.add(krs.layers. LSTM (32, отсев = 0,2, recurrent_dropout = 0,2)) model.add(krs.layers.Dense(3)) model.add(krs.layers.Activation("softmax")) model.compile(loss="categorical_crossentropy", оптимизатор="adam", metrics=["точность" ]) модель возврата num_vocabs = len(dict.items())model = build_netword(num_vocabs=num_vocabs)import timestart = time.time()# модель обучения model.fit(text_processed, target, batch_size=512, epochs=10, )finish = time.time()print("Время обучения: %f секунд" %(finish-start ) )

выборка предсказания

sen можно заменить своим предложением, и прогнозируемый результат будет[健康类文章概率, 科技类文章概率, 设计类文章概率], статья с наибольшей вероятностью относится к этой категории, но когда максимальная вероятность ниже 0,8, она оценивается как статья, которая не может быть классифицирована.

sen = "Небольшие навыки для изучения бизнес-дизайна" sen_prosessed = " ".join(jb.cut(sen, cut_all=True))sen_prosessed = vocab_processor.transform([sen_prosessed])sen_prosessed = np.array(list(sen_prosessed) )result = model.predict(sen_prosessed)catalogue=list(result[0]).index(max(result[0]))threshold=0.8if max(result[0]) > threshold: if catalog == 0: print("Это статья о здоровье") elif catalog == 1: print("Это статья о технологиях") elif catalog == 2: print("Это статья о дизайне") else: print("У этой статьи нет заслуживающих доверия категорий")

8. Используйте графические процессоры

а. Включите серверную часть графического процессора для вашего ноутбука.Runtime->Change runtime type->Hardware Accelerator->GPU

Б. Проверьте, включен ли графический процессор для запуска первого устройства в моем общем ноутбуке. (Я загрузил блокнот Fastai Урок 1. Пожалуйста, посетите этотноутбукдля справки)

в. Установите fast.ai и pytorch.

!pip install http://download.pytorch.org/whl/cu75/torch-0.3.0.post4-cp36-cp36m-linux_x86_64.whl && pip install torchvision!pip install fastai

г. Загрузите данные, вы также можете загрузить их на диск заранее

9. Описание эффекта

Исполнение не очень гладкое, но ожидаемо

А. При попытке подключиться к среде выполнения графического процессора иногда выдается ошибка о невозможности подключения. Это связано с большим количеством людей, пытающихся воспользоваться услугой, по отношению к количеству компьютеров с графическим процессором. Согласно ранее опубликованным обсуждениям на kaggle, они планируют добавить больше машин с графическим процессором.
Б. Иногда среда выполнения периодически умирает. Для этого может быть много возможных причин.
C. Объем доступной оперативной памяти составляет 13 ГБ, что очень хорошо, поскольку она бесплатна. Но с большими сетями, такими как первый урок, большую часть времени появляются предупреждения о памяти.

10. Резюме

Google действительно помог снизить барьеры на пути к глубокому обучению. И такой инструмент поможет многим людям, которые не могут позволить себе ресурсы графического процессора. Я очень надеюсь, что скоро эта услуга будет полностью сокращена и останется бесплатной.

Я буду обновлять этот пост, пока не пойму, как справиться с небольшими заминками и запустить процесс. Дайте мне знать в комментариях, если кто-то может исправить эти небольшие проблемы.

Справочная статья:

1.Fast.ai Lesson 1 on Google Colab (Free GPU)

2.Хотите обучать нейронные сети с помощью ресурсов Google бесплатно? Подробное руководство по Colab