Обучение нейронных сетей с помощью Google Colaboratory

Google искусственный интеллект Нейронные сети модульный тест
Обучение нейронных сетей с помощью Google Colaboratory
Автор: Сагар Ховал Сборник: слабенький

Примечание редактора: Сагар Ховал, разработчик данных, рассказывает об использовании 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Блок кода можно запустить, и результаты отображаются под блоком кода.

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

  1. !pip install -q keras

скопировать код

Ниже я буду использовать пример, чтобы продемонстрировать, как использовать Colaboratory для обучения нейронной сети. Мы будем обучать нейронную сеть на базе данных о раке молочной железы штата Висконсин, предоставленной репозиторием машинного обучения UCI.

Вот записная книжка Colaboratory, которая сопровождает эту статью.

глубокое обучение

В этой статье предполагается, что читатель немного знаком с нейронными сетями и глубоким обучением. Если вам нужно освежить в памяти этот вопрос, вы можете обратиться к статье Карлоса Грешенсона (ее очень легко читать). Вы также можете обратиться к другим онлайн-ресурсам.

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

код

проблема:

Исследователи получили данные тонкоигольной аспирационной биопсии (FNA) и создали соответствующие цифровые изображения. Набор данных содержит экземпляры, описывающие свойства ядер на изображении. Каждый экземпляр помечен как «злокачественный» или «доброкачественный». Наша задача — обучить сеть на этих данных для диагностики рака молочной железы.

Создайте новый блокнот (файл без названия.ipynb) в Colaboratory.

Как мы упоминали ранее, за ноутбуком находится виртуальная машина с Linux, поэтому вы можете установить пакеты, необходимые для вашего проекта. Попробуйте прямо сейчас, введите !ls в блоке кода (не забудьте поставить перед всеми командами префикс !):

Далее загружаем набор данных:

  1. # 上传数据集

  2. from google.colab import files

  3. uploaded = files.upload()

  4. # 保存上传的文件到虚拟机

  5. # 感谢StackOverflow的user3800642

  6. with open("breast_cancer.csv", 'w') as f:

  7.    f.write(uploaded[uploaded.keys()[0]])

скопировать код

Введите !ls, чтобы проверить, готов ли файл:

обработка данных:

Импортируйте набор данных (используя pandas):

  1. import numpy as np

  2. import pandas as pd

  3. # 导入数据集

  4. dataset = pd.read_csv('breast_cancer.csv')

  5. # 查看数据集的前5行

  6.    dataset.head(5)

скопировать код

Отдельные зависимые и независимые переменные:

  1. # 剔除最后一列(全是NaN值)

  2. X = dataset.iloc[:, 2:32].values

  3. y = dataset.iloc[:, 1].values

скопировать код

yСодержит отдельный столбец с двумя категориями, M и B, для «злокачественного» и «доброкачественного» соответственно. Их необходимо закодировать в соответствующую математическую форму, т.е.1и0. Этого можно добиться с помощью класса LabelEncoder (кодировщик меток).

  1. # 编码分类数据

  2. from sklearn.preprocessing import LabelEncoder

  3. labelencoder = LabelEncoder()

  4. y = labelencoder.fit_transform(y)

скопировать код

(Если ваши данные содержат более 2 категорий, вы можете использовать OneHotEncoder)

Имея данные, давайте разделим обучающий и тестовый наборы. Мы используем Scikit-Learntrain_test_splitсвоего рода:

  1. rom sklearn.model_selection import train_test_split

  2. 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:

  1. !pip show tensorflow

скопировать код

如有必要,你也可以安装特定版本的Tensorflow,例如:

  1. !pip install tensorflow==1.2

скопировать код

安装Keras:

  1. !pip install -q keras

скопировать код

加载Keras:

  1. mport keras

  2. from keras.models import Sequential

  3. from keras.layers import Dense

скопировать код

Sequential和Dense类用来指定神经网络的节点、连接。我们需要这两个类来定制和调整网络的参数。

创建一个Sequential对象以初始化神经网络:

  1. 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激活函数。(关于不同激活函数的选择,可以参考这篇文章。)

                                            
  1. # 输入层和第一个隐藏层

  2. classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu', input_dim = 30))

  3. # 第二个隐藏层

  4. classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu'))

  5. # 输出层

  6. classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))

  7. # 优化和损失

  8. classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

скопировать код

拟合:

运行人工神经网络,让反向传播魔法发挥威力吧!

  1. # 拟合训练集

  2. classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

скопировать код

上面的batch_size是你希望同时处理的输入数量。epoch是所有数据在神经网络中过一遍的完整周期。运行上述代码后,Colaboratory Notebook的输出是这样的:

进行预测,生成混淆矩阵。

  1. # 预测测试集结果

  2. y_pred = classifier.predict(X_test)

  3. y_pred = (y_pred > 0.5)

  4. # 生成混淆矩阵

  5. from sklearn.metrics import confusion_matrix

  6. 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.