Примечание редактора: Сагар Ховал, разработчик данных, рассказывает об использовании Google Colaboratory, инструмента Google для совместной разработки данных и машинного обучения, на простом примере. Colaboratory очень полезный и бесплатный.
Google недавно выпустил Google Colaboratory (g.co/colab). Google Colaboratory изначально был внутренним инструментом Google для совместной работы по программированию данных, а теперь Google выпустил его как общедоступный сервис. Google Colaboratory основан на проекте с открытым исходным кодом Jupyter и интегрируется с Google Диском. Colaboratory позволяет пользователям использовать Jupyter Notebook так же легко, как Google Docs или электронные таблицы.
Colaboratory
Пользоваться Colaboratory просто. Если у вас есть учетная запись Google, перейдите непосредственно на веб-сайт Colaboratory, чтобы начать работу. Colaboratory позволяет выполнять задачи машинного обучения с использованием виртуальных машин Google, поэтому вы можете начать создавать модели, не беспокоясь о вычислительной мощности. И это бесплатно.
При первом открытии Colaboratory вы увидите приветственный файл «Hello, Colaboratory» с некоторыми основными примерами. Вы можете попробовать.
В Colaboratory вы можете писать код так же, как в Jupyter Notebook. в соответствии сShift+Enter
Блок кода можно запустить, и результаты отображаются под блоком кода.
В дополнение к коду вы также можете запускать команды оболочки с префиксом !, например:
!pip install -q keras
скопировать код
Ниже я буду использовать пример, чтобы продемонстрировать, как использовать Colaboratory для обучения нейронной сети. Мы будем обучать нейронную сеть на базе данных о раке молочной железы штата Висконсин, предоставленной репозиторием машинного обучения UCI.
Вот записная книжка Colaboratory, которая сопровождает эту статью.
глубокое обучение
В этой статье предполагается, что читатель немного знаком с нейронными сетями и глубоким обучением. Если вам нужно освежить в памяти этот вопрос, вы можете обратиться к статье Карлоса Грешенсона (ее очень легко читать). Вы также можете обратиться к другим онлайн-ресурсам.
Однако, даже если вы еще не разбираетесь в нейронных сетях, не волнуйтесь, потому что мы будем делать это шаг за шагом. Давайте начнем……
код
проблема:
Исследователи получили данные тонкоигольной аспирационной биопсии (FNA) и создали соответствующие цифровые изображения. Набор данных содержит экземпляры, описывающие свойства ядер на изображении. Каждый экземпляр помечен как «злокачественный» или «доброкачественный». Наша задача — обучить сеть на этих данных для диагностики рака молочной железы.
Создайте новый блокнот (файл без названия.ipynb) в Colaboratory.
Как мы упоминали ранее, за ноутбуком находится виртуальная машина с Linux, поэтому вы можете установить пакеты, необходимые для вашего проекта. Попробуйте прямо сейчас, введите !ls в блоке кода (не забудьте поставить перед всеми командами префикс !):
Далее загружаем набор данных:
# 上传数据集
from google.colab import files
uploaded = files.upload()
# 保存上传的文件到虚拟机
# 感谢StackOverflow的user3800642
with open("breast_cancer.csv", 'w') as f:
f.write(uploaded[uploaded.keys()[0]])
скопировать код
Введите !ls, чтобы проверить, готов ли файл:
обработка данных:
Импортируйте набор данных (используя pandas):
import numpy as np
import pandas as pd
# 导入数据集
dataset = pd.read_csv('breast_cancer.csv')
# 查看数据集的前5行
dataset.head(5)
скопировать код
Отдельные зависимые и независимые переменные:
# 剔除最后一列(全是NaN值)
X = dataset.iloc[:, 2:32].values
y = dataset.iloc[:, 1].values
скопировать код
y
Содержит отдельный столбец с двумя категориями, M и B, для «злокачественного» и «доброкачественного» соответственно. Их необходимо закодировать в соответствующую математическую форму, т.е.1
и0
. Этого можно добиться с помощью класса LabelEncoder (кодировщик меток).
# 编码分类数据
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
y = labelencoder.fit_transform(y)
скопировать код
(Если ваши данные содержат более 2 категорий, вы можете использовать OneHotEncoder)
Имея данные, давайте разделим обучающий и тестовый наборы. Мы используем Scikit-Learntrain_test_split
своего рода:
rom sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
скопировать код
test_size = 0.2
Параметр определяет масштаб набора тестов. То есть 80 % используются в качестве обучающего набора, а 20 % — в качестве тестового.
Keras
Keras — это высокоуровневый API для построения нейронных сетей, а базовые операции основаны на Tensorflow. Поэтому перед установкой Keras необходимо установить Tensorflow. На виртуальной машине Colaboratory предварительно установлен Tensorflow. Введите следующую команду, чтобы просмотреть текущую установленную версию Tensorflow:
!pip show tensorflow
скопировать код
如有必要,你也可以安装特定版本的Tensorflow,例如:
!pip install tensorflow==1.2
скопировать код
安装Keras:
!pip install -q keras
скопировать код
加载Keras:
mport keras
from keras.models import Sequential
from keras.layers import Dense
скопировать код
Sequential和Dense类用来指定神经网络的节点、连接。我们需要这两个类来定制和调整网络的参数。
创建一个Sequential对象以初始化神经网络:
classifier = Sequential()
скопировать код
现在我们需要设计网络。
我们需要为每个隐藏层定义3个基本参数:units、kernel_initializer、activation。units参数定义神经元数目。kernel_initializer定义初始权重(详见keras文档)。activation定义激活函数。
注意:如果这些术语让你感到头大,不用忧虑。请继续阅读,你会逐渐了解这些概念的。
第一层:
我们在第一层放置了16个神经元(统一初始化权重),使用ReLU激活函数。input_dim = 30是因为我们的数据集中有30个特征列。
作弊:
我们是如何决定神经元的数目的?人们会告诉你这是源自经验和专门知识的艺术。对于初学者来说,一个简单的方法是将X和y的列数相加,然后除以2。(30+1)/2 = 15.5 ~ 16. 所以units = 16
第二层:
除了不带input_dim参数外,第二层和第一层一模一样。
输出层:
由于我们的输出是二元值中的一个,我们可以使用统一初始化权重的单个神经元。这里我们使用了sigmoid激活函数。(关于不同激活函数的选择,可以参考这篇文章。)
-
# 输入层和第一个隐藏层
-
classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu', input_dim = 30))
-
-
# 第二个隐藏层
-
classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu'))
-
-
# 输出层
-
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
-
-
# 优化和损失
-
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
скопировать код
拟合:
运行人工神经网络,让反向传播魔法发挥威力吧!
# 拟合训练集
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)
скопировать код
上面的batch_size是你希望同时处理的输入数量。epoch是所有数据在神经网络中过一遍的完整周期。运行上述代码后,Colaboratory Notebook的输出是这样的:
进行预测,生成混淆矩阵。
# 预测测试集结果
y_pred = classifier.predict(X_test)
y_pred = (y_pred > 0.5)
# 生成混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
скопировать код
训练网络之后,可以在X_test上运行测试(之前的训练过程中,我们将它放在一边)。输入并执行cm,看看模型在新数据上的表现如何。
混淆矩阵
混淆矩阵,顾名思义,表示模型所做的正确和错误预测。当你打算独立地检查哪些预测混淆的时候,混淆矩阵很有用。下图是一个2x2的混淆矩阵的例子。
我们的混淆矩阵是这样的。
上面的数字表示:70个正确的否定预测,1个错误的肯定预测,1个错误的否定预测,42个正确的肯定预测。
看到没?混淆矩阵很简单。矩阵的尺寸随分类的类别的增加而增加。
在我们的例子中,我们达到了接近100%的精确度。只有2个错误预测。相当不错。但有时候你可能需要投入更多时间,查探模型的表现,以找到更好、更复杂的解决方案。如果网络的表现不佳,可以通过超参数调优来改进模型。
Я надеюсь, что эта статья помогла вам начать работу с Colaboratory. Блокнот, прилагаемый к этой статье, находится здесь (https://colab.research.google.com/notebook#fileId=1aQGl_sH4TVehK8PDBRspwI4pD16xIR0r).
Исходный адрес: https://towardsdatascience.com/neural-networks-with-google-colaboratory-artificial-intelligence-getting-started-713b5eb07f14.