Некоторое время назад мы поделились тем, как бесплатно обучать модели машинного обучения с помощью графических процессоров Google.Нажмите здесь, чтобы узнать подробности.
На этот раз у нас появилась новая возможность разбить шерсть:Используйте графические процессоры NVIDIA бесплатно с ядрами Kaggle!
Что такое ядра Kaggle?
Некоторые друзья могут быть не очень хорошо знакомы с ядрами Kaggle, но Kaggle должен знать, что, по крайней мере, те, кто занимается наукой о данных и машинным обучением, слышали о вызовах Kaggle. Kaggle — это платформа для проведения исследований в области науки о данных или обмена знаниями в области науки о данных С Kaggle мы можем не только практиковать науку о данных, но и многому научиться у сообщества Kaggle.
А продукт Kaggle Kaggle Kernels эквивалентен встроенному в браузер Jupyter Notebooks, все работает у вас на глазах, на ваше усмотрение. В одном предложении:Kaggle Kernels — бесплатная платформа для запуска Jupyter Notebooks в браузере..
То есть, пока есть сеть и браузер, вы можете иметь среду Jupyter Notebook в своем браузере в любое время и в любом месте, без необходимости самостоятельно настраивать локальную среду.
Поскольку вычислительная мощность Kaggle Kernels исходит от облачного сервера, а не от локальной машины, мы можем выполнять на нем много работы по науке о данных и машинному обучению, не потребляя много энергии ноутбука.
После регистрации учетной записи на Kaggle вы можете выбрать набор данных, который хотите использовать, и запустить новое ядро или блокнот несколькими щелчками мыши.
Все используемые нами наборы данных предварительно загружены в ядро, поэтому нам не нужно выполнять трудоемкий процесс импорта набора данных в машину и ожидания ввода набора данных в модель.
Для получения подробной информации о том, как использовать ядра Kaggle, вы можете обратиться кэтот учебник.
Недавно Kaggle запустил еще один большой бонус:Пользователи могут бесплатно использовать графические процессоры NVidia K80 через ядро Kaggle.!
Тесты Kaggle показывают, что использование графического процессора позволяет обучать модели глубокого обучения в 12,5 раз быстрее.
Если взять пример обучения модели с использованием набора данных ASL Alphabet, общее время обучения на ядрах Kaggle с графическим процессором составило 994 секунды по сравнению с 13 419 секундами ранее с процессором. Напрямую позволяет обучить модель в 12 раз меньше времени. Конечно, в моем реальном использовании то, как долго сокращается время обучения модели, будет зависеть от множества факторов, таких как архитектура модели, размер пакета, сложность входного конвейера и так далее. В любом случае, теперь мы можем бесплатно использовать графические процессоры с помощью Kaggle Kernels!
Как использовать GPU с ядрами Kaggle
На официальном веб-сайте Kaggle рассказывается, как использовать GPU в ядрах Kaggle, и приводится пример кода:
Добавить графический процессор
Начнем с того, что откроем интерфейс управления ядром и запустим GPU для текущих настроек ядра.
Выберите параметр «Настройка», затем выберите «Включить графический процессор». Затем проверьте на панели управления, подключено ли ваше ядро к графическому процессору, статус подключения должен отображаться как «GPU ON», как показано ниже:
Многие библиотеки обработки данных не используют графические процессоры, поэтому для некоторых задач (особенно при использовании библиотек глубокого обучения, таких как TensorFlow, Keras и PyTorch) графические процессоры могут быть очень полезны.
данные
Используемый нами набор данных содержит изображения 29 американских языков жестов, используемые для обозначения 26 английских букв, а также значения пробелов, удалений, ничего и многого другого. Наша модель смотрит на эти изображения и учится классифицировать язык жестов на каждом изображении.
# 导入深度学习所需的库和数据
from keras.layers import Conv2D, Dense, Dropout, Flatten
from keras.models import Sequential
from keras.preprocessing.image import ImageDataGenerator
# 保证运行中的连续性
from numpy.random import seed
seed(1)
from tensorflow import set_random_seed
set_random_seed(2)
# 导入以查看数据
import cv2
from glob import glob
from matplotlib import pyplot as plt
from numpy import floor
import random
def plot_three_samples(letter):
print("Samples images for letter " + letter)
base_path = '../input/asl_alphabet_train/asl_alphabet_train/'
img_path = base_path + letter + '/**'
path_contents = glob(img_path)
plt.figure(figsize=(16,16))
imgs = random.sample(path_contents, 3)
plt.subplot(131)
plt.imshow(cv2.imread(imgs[0]))
plt.subplot(132)
plt.imshow(cv2.imread(imgs[1]))
plt.subplot(133)
plt.imshow(cv2.imread(imgs[2]))
return
plot_three_samples('A')
plot_three_samples('B')
Образец изображения, соответствующий букве «Б»:
Настройки обработки данных
data_dir = "../input/asl_alphabet_train/asl_alphabet_train"
target_size = (64, 64)
target_dims = (64, 64, 3) # add channel for RGB
n_classes = 29
val_frac = 0.1
batch_size = 64
data_augmentor = ImageDataGenerator(samplewise_center=True,
samplewise_std_normalization=True,
validation_split=val_frac)
train_generator = data_augmentor.flow_from_directory(data_dir, target_size=target_size, batch_size=batch_size, shuffle=True, subset="training")
val_generator = data_augmentor.flow_from_directory(data_dir, target_size=target_size, batch_size=ba
78 300 изображений найдено в 29 категориях
8700 изображений найдено в 29 категориях
Настройки модели
my_model = Sequential()
my_model.add(Conv2D(64, kernel_size=4, strides=1, activation='relu', input_shape=target_dims))
my_model.add(Conv2D(64, kernel_size=4, strides=2, activation='relu'))
my_model.add(Dropout(0.5))
my_model.add(Conv2D(128, kernel_size=4, strides=1, activation='relu'))
my_model.add(Conv2D(128, kernel_size=4, strides=2, activation='relu'))
my_model.add(Dropout(0.5))
my_model.add(Conv2D(256, kernel_size=4, strides=1, activation='relu'))
my_model.add(Conv2D(256, kernel_size=4, strides=2, activation='relu'))
my_model.add(Flatten())
my_model.add(Dropout(0.5))
my_model.add(Dense(512, activation='relu'))
my_model.add(Dense(n_classes, activation='softmax'))
my_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=["accuracy"])
модель подходит
my_model.fit_generator(train_generator, epochs=5, validation_data=val_generator)
Epoch 1/5
1224/1224 [==============================] - 206s 169ms/step - loss: 1.1439 - acc: 0.6431 - val_loss: 0.5824 - val_acc: 0.8126
Epoch 2/5
1224/1224 [==============================] - 179s 146ms/step - loss: 0.2429 - acc: 0.9186 - val_loss: 0.5081 - val_acc: 0.8492
Epoch 3/5
1224/1224 [==============================] - 182s 148ms/step - loss: 0.1576 - acc: 0.9495 - val_loss: 0.5181 - val_acc: 0.8685
Epoch 4/5
1224/1224 [==============================] - 180s 147ms/step - loss: 0.1417 - acc: 0.9554 - val_loss: 0.4139 - val_acc: 0.8786
Epoch 5/5
1224/1224 [==============================] - 181s 148ms/step - loss: 0.1149 - acc: 0.9647 - val_loss: 0.4319 - val_acc: 0.8948
<keras.callbacks.History at 0x7f5cbb6537b8>
О том, как выиграть соревнования Kaggle, вам также могут понравиться:
Руководство по принудительным алгоритмам искусственного интеллекта, которое нельзя пропустить