www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Keras Tutorial: глубокое обучение на Python

Дата публикации May 5, 2017

Первоначально опубликовано наhttps://www.datacamp.com/community/tutorials/deep-learning-python

К настоящему времени вы, возможно, уже знаете машинное обучение, отрасль компьютерных наук, которая изучает разработку алгоритмов, которые могут учиться. Сегодня вы сосредоточитесь на глубоком обучении, подполе машинного обучения, которое представляет собой набор алгоритмов, основанных на структуре и функциях мозга. Эти алгоритмы обычно называют искусственными нейронными сетями (ANN). Глубокое обучение - одна из самых горячих областей в науке о данных, в которой много примеров с замечательными результатами в робототехнике, распознавании изображений и искусственном интеллекте (ИИ).

Некоторые из историй успеха, которые вы, возможно, уже знаете, это автомобили с автоматическим управлением, автоматическая игра в игру (подумайте оAlphaGo, которая играет в настольную игру Go), почерк поколения,…

Keras - одна из самых мощных и простых в использовании библиотек Python для разработки и оценки моделей глубокого обучения. Он охватывает эффективные библиотеки численных вычислений Theano и TensorFlow. Преимущество этого состоит главным образом в том, что вы можете начать работу с нейронными сетями простым и увлекательным способом.

Сегодняшний учебник Keras для начинающих познакомит вас с основами глубокого изучения Python: пошаговое руководство покажет вам, как использовать Python и его библиотеки для исследования ваших данных, создания многослойных персептронов для классификации и регрессии. задач, для компиляции и подгонки данных к этим моделям, для прогнозирования целевых значений и проверки моделей, которые вы создали.

Хотели бы вы пройти курс кераса и углубленного изучения Python? Рассмотрите возможность использования DataCampГлубокое обучение на Pythonкурс!

Кроме того, не пропустите нашШпаргалка Keras, который показывает вам шесть шагов, которые вам нужно пройти, чтобы построить нейронные сети на Python с примерами кода!

Прежде чем углубляться в Keras и узнать, как его использовать, чтобы начать углубленное изучение Python, вы, вероятно, должны кое-что знать о нейронных сетях. Как вы кратко прочитали в предыдущем разделе, нейронные сети нашли свое вдохновение и биологию, где термин «нейронная сеть» также может использоваться для нейронов. Человеческий мозг является примером такой нейронной сети, которая состоит из нескольких нейронов.

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

Самой простой нейронной сетью является «персептрон», который в своей простейшей форме состоит из одного нейрона. Подобно биологическим нейронам, которые имеют дендриты и аксоны, один искусственный нейрон представляет собой простую древовидную структуру, которая имеет входные узлы и один выходной узел, который связан с каждым входным узлом. Вот визуальное сравнение двух:

Как видно из рисунка, в искусственных нейронах есть шесть компонентов. Слева направо это:

  1. Входные узлы, Как это происходит, каждый входной узел связан с числовым значением, которое может быть любым действительным числом. Помните, что действительные числа составляют полный спектр чисел: они могут быть положительными или отрицательными, целыми или десятичными числами.
  2. связи, Точно так же каждое соединение, которое отходит от входного узла, имеет вес, связанный с ним, и это также может быть любое действительное число.
  3. Затем все значения входных узлов и веса соединений объединяются: они используются в качестве входных данных длявзвешенная сумма: y = f (sum_ {i = 1} ^ {D} w_i * x_i)) или, иначе говоря, y = f (w_1 * x_1 + w_2 * x_2 +… w_D * x_D).
  4. Этот результат будет входом дляфункция передачи или активации, В простейшем, но тривиальном случае этой передаточной функцией была бы единичная функция, f (x) = x или, иначе говоря, y = x. В этом случае \ (x \) является взвешенной суммой входных узлов и соединений. Однако, точно так же, как биологический нейрон срабатывает только при превышении определенного порога, искусственный нейрон также срабатывает только тогда, когда сумма входов превышает порог, скажем, например, 0. Это то, что вы не можете найти в функция идентичности! Самый интуитивный способ, о котором можно подумать, - это разработать систему, подобную следующей: f (x) = 0, если x<0; f(x) = 0.5 if x=0; f(x) = 1 if x>0.
  5. Конечно, вы уже можете себе представить, что вывод не будет гладкой линией: это будет прерывистая функция. Поскольку это может вызвать проблемы в математической обработке, часто используется непрерывный вариант, сигмовидная функция. Примером сигмовидной функции, которую вы, возможно, уже знаете, является логистическая функция. Использование этой функции приводит к гораздо более плавному результату!
  6. В результате у вас естьвыходной узел, которая связана с функцией (такой как сигмоидная функция) взвешенной суммы входных узлов Обратите внимание, что сигмовидная функция является математической функцией, которая приводит к S-образной кривой; Вы узнаете об этом позже.
  7. Наконец, персептрон может быть дополнительным параметром, называемымсмещение, который на самом деле можно рассматривать как вес, связанный с дополнительным входным узлом, который постоянно установлен в 1. Значение смещения важно, потому что оно позволяет вам смещать функцию активации влево или вправо, что может определять успех ваше обучение.

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

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

Сети персептронов являются многослойными персептронами, и это то, что этот учебник будет реализовывать в Python с помощью Keras! Многослойные персептроны также известны как «нейронные сети с прямой связью». Как вы уже догадались, это более сложные сети, чем персептрон, так как они состоят из множества нейронов, организованных по слоям. Количество слоев обычно ограничено двумя или тремя, но теоретически ограничений нет!

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

Среди слоев можно выделить входной слой, скрытые слои и выходной слой. Многослойные персептроны часто полностью связаны между собой. Это означает, что существует связь от каждого персептрона в определенном слое с каждым персептроном в следующем слое. Хотя связность не является обязательным требованием, обычно это так.

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

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

Возможно, вы уже знаете этот набор данных, так как это один из самых популярных наборов данных, с которого можно начать изучение проблем машинного обучения. В этом случае это поможет вам начать глубокое изучение Python с Keras.

Давайте начнем сейчас!

Однако, прежде чем вы начнете загружать данные, было бы неплохо проверить, сколько вы действительно знаете о вине (конечно, в связи с набором данных). Большинство из вас знает, что, как правило, есть два очень популярных вида вина: красное и белое.

(Я уверен, что есть много других, но для простоты и из-за моего ограниченного знания вин, я буду держать это в этом. Извините, если я разочаровываю истинных ценителей среди вас :)).

Знать это уже одно, но если вы хотите проанализировать эти данные, вам нужно знать немного больше.

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

Данные состоят из двух наборов данных, связанных с красными и белыми вариантами португальского вина «Vinho Verde». Как указано в описании, вы найдете только физико-химические и сенсорные переменные, включенные в этот набор данных. Файл описания данных просто перечисляет 12 переменных, которые включены в данные, но для тех, кто, как и я, на самом деле не являются экспертами в области химии, вот краткое описание каждой переменной:

  1. Фиксированная кислотность: кислоты являются основными свойствами вина и вносят большой вклад в вкус вина. Обычно общая кислотность делится на две группы: летучие кислоты и нелетучие или фиксированные кислоты. Среди основных кислот, которые вы можете найти в винах: винная, яблочная, лимонная и янтарная. Эта переменная выражена в г (винная кислота) / дм³ в наборах данных.
  2. Летучая кислотность: изменчивая кислотность - это процесс превращения вина в уксус. В США допустимые пределы содержания летучей кислоты составляют 1,2 г / л для красного столового вина и 1,1 г / л для белого столового вина. В этих наборах данных летучая кислотность выражается в г (уксусная кислота) / дм³
  3. Лимонная кислотаявляется одной из фиксированных кислот, которые вы найдете в винах. Выражается в г / дм3 в двух наборах данных.
  4. Остаточный сахаробычно относится к сахару, остающемуся после прекращения брожения или прекращения. Выражается в г / дм3 вredа такжеwhiteданные.
  5. Хлоридыможет быть основным фактором солености в вине. Здесь вы увидите, что оно выражено в г (хлорид натрия) / дм3.
  6. Свободный диоксид серыГоворят, что часть диоксида серы, которая добавляется в вино и которая теряется в нем, связана, а активная часть считается свободной. Винодел всегда будет пытаться получить наибольшую долю свободной серы для связывания. Эти переменные выражены в мг / дм3 в данных.
  7. Общая двуокись серысумма связанного и свободного диоксида серы (SO2). Здесь оно выражено в мг / дм3. Существуют законные пределы содержания серы в винах: в ЕС красные вина могут иметь только 160 мг / л, в то время как белые и розовые вина могут иметь около 210 мг / л. Сладкие вина могут иметь 400 мг / л. Для США законодательные ограничения установлены на уровне 350 мг / л, а для Австралии - 250 мг / л.
  8. плотностьобычно используется в качестве меры превращения сахара в алкоголь. Здесь это выражено в г / см3.
  9. pHили потенциал водорода представляет собой числовую шкалу для указания кислотности или основности вина. Как вы, возможно, знаете, растворы с pH ниже 7 являются кислыми, а растворы с pH выше 7 являются основными. При pH 7 чистая вода является нейтральной. Большинство вин имеют рН от 2,9 до 3,9 и поэтому являются кислыми.
  10. Сульфатык вину, как глютен к еде. Вы можете уже знать сульфиты от головных болей, которые они могут вызвать. Они являются неотъемлемой частью виноделия во всем мире и считаются необходимыми. В этом случае они выражаются в г (сульфат калия) / дм3.
  11. АлкогольВино - это алкогольный напиток, и, как вы знаете, процент алкоголя может варьироваться от вина к вину. Не следует удивляться, что эта переменная включена в наборы данных, где она выражена в% об.
  12. КачественныйЭксперты оценили качество вина между 0 (очень плохо) и 10 (очень отлично). Окончательное число - это медиана как минимум трех оценок, сделанных теми же винными экспертами.

Это, конечно же, некоторая базовая информация, которую вы, возможно, должны знать, чтобы начать. Если вы настоящий ценитель вина, вы, наверное, знаете все это и даже больше!

Теперь пришло время получить ваши данные!

Это легко сделать с помощью библиотеки манипулирования данными Python Pandas. Вы соблюдаете соглашение об импорте и импортируете пакет под псевдонимом,pd,

Далее вы используетеread_csv()Функция для чтения в файлах CSV, в которых хранятся данные. Кроме того, используйтеsepАргумент, указывающий, что разделитель в этом случае является точкой с запятой, а не обычной запятой.

Вы можете попробовать это вэтот блок данных DataCamp Light,

Потрясающе! Это был не кусок пирога, не так ли?

Возможно, вы уже сделали это миллион раз, но это всегда важный шаг для начала. Теперь вы полностью готовы начать исследовать, манипулировать и моделировать свои данные!

Имея данные под рукой, вы легко узнаете больше об этих винах! Первое, что вы, вероятно, захотите сделать, - это начать с быстрого просмотра обоих ваших фреймов данных вэто упражнение,

Теперь настало время проверить, был ли ваш импорт успешным: дважды проверьте, содержат ли данные все переменные, которые обещал вам файл описания данных из UCI Machine Learning Repository. Помимо количества переменных, также проверьте качество импорта: правильны ли типы данных? Все ли ряды прошли? Есть ли какие-либо нулевые значения, которые вы должны учитывать при очистке данных?

Вы также можете проверить свои данные не толькоinfo(), Вы можете сделать это вэто упражнение,

Краткий обзор всех этих функций панд: вы видите, чтоhead(),tail()а такжеsample()удивительно, потому что они предоставляют вам быстрый способ проверки ваших данных без каких-либо хлопот.

Следующий,describe()предлагает некоторые сводные статистические данные о ваших данных, которые могут помочь вам оценить качество ваших данных. Вы видите, что некоторые из переменных действительно имеют большую разницу в ихminа такжеmaxзначения. Это то, с чем вы будете иметь дело позже, но сейчас очень важно знать об этом.

Наконец, вы дважды проверили наличие нулевых значений вredс помощьюisnull(), Это функция, которая всегда может пригодиться, когда вы все еще сомневаетесь, прочитав результатыinfo(),

Чаевые: также проверьте, содержат ли данные вина нулевые значения. Вы можете сделать это с помощью оболочки IPython блока DataCamp Light, который вы видите выше.

Теперь, когда вы уже проверили свои данные, чтобы увидеть, был ли импорт успешным и правильным, пришло время копнуть немного глубже

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

Одна переменная, которую вы могли бы найти интересной с первого взгляда, этоalcohol, Это, вероятно, одна из первых вещей, которая привлекает ваше внимание, когда вы проверяете набор данных вина. Вы можете визуализировать распределения с помощью любой библиотеки визуализации данных, но в этом случае учебник используетmatplotlibчтобы быстро построить распределение. Вы можете найти кодВот,

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

Обратите внимание, что вы можете проверить это дважды, если вы используетеhistogram()функция отnumpyпакет для вычисления гистограммыwhiteа такжеredданные. Вы можете найти кодВот,

Если вы заинтересованы вmatplotlibучебники, не забудьте проверить DataCamp'sMatplotlibучебник для начинающих иПросмотр 3D объемных данныхучебник, в котором показано, как использовать API-обработчик событий Matplotlib.

Далее, одна вещь, которая меня интересует, это связь между сульфатами и качеством вина. Как вы читали выше, сульфаты могут вызывать головные боли у людей, и мне интересно, влияет ли это на качество вина. Более того, я часто слышу, что женщины особенно не хотят пить вино именно потому, что оно вызывает головные боли. Может, это влияет на рейтинги красного вина?

Давайте посмотрим: вы можете найти кодВот,

Как вы можете видеть на изображении ниже, в красном вине содержится больше сульфатов, чем в белом, в котором меньше сульфатов выше 1 г / дм3. Для белого вина, кажется, есть только несколько исключений, которые падают чуть выше 1 г / дм3, хотя это определенно больше для красных вин. Это могло бы объяснить общее высказывание, что красное вино вызывает головные боли, но как насчет качества?

Вы можете ясно видеть, что есть белое вино с относительно небольшим количеством сульфатов, которое получает оценку 9, но в остальном трудно правильно интерпретировать данные на данном этапе.

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

Помимо сульфатов, кислотность является одной из основных и важных характеристик вина, которая необходима для достижения качества вина. Великолепные вина часто уравновешивают кислотность, танин, алкоголь и сладость. Еще одно исследование показало, что в количествах от 0,2 до 0,4 г / л летучая кислотность не влияет на качество вина. Однако на более высоких уровнях изменчивая кислотность может дать вину острое, уксусное тактильное ощущение. Чрезвычайно изменчивая кислотность означает серьезно испорченное вино.

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

Обратите внимание, что цвета на этом изображении выбираются случайным образом с помощью NumPy.randomмодуль. Вы всегда можете изменить это, передав списокredcolorsилиwhitecolorsпеременные. Убедитесь, что они совпадают (за исключением 1, потому что данные белого вина имеют один уникальныйqualityцените больше, чем данные о красном вине), иначе ваши легенды не совпадут!

Проверьте полный график здесь:

На изображении выше вы видите, что уровни, о которых вы читали выше, особенно актуальны для белого вина: большинство вин с меткой 8 имеют летучие уровни кислотности 0,5 или ниже, но влияет ли это на качество или нет, слишком Трудно сказать, так как все точки данных очень плотно упакованы в одну сторону графика.

Это просто быстрое исследование данных. Если вы заинтересованы в разработке этого шага в своих собственных проектах, рассмотрите посты DataCamp по исследованию данных, такие какИсследовательский анализ данных Pythonа такжеПрофилирование данных Pythonучебники, которые проведут вас через основы EDA.

Возможно, это было много, чтобы переварить, так что никогда не поздно для небольшого резюме того, что вы видели во время вашей EDA, что может быть важно для дальнейшего курса этого урока:

  • Некоторые переменные ваших наборов данных имеют значения, которые значительно отличаются друг от друга. Вы можете и будете иметь дело с этим в следующем разделе учебника.
  • У вас идеальный сценарий: в наборах данных нет нулевых значений.
  • Большинство вин, которые были включены в набор данных, содержат около 9% алкоголя.
  • Красное вино, кажется, содержит больше сульфатов, чем белое вино, которое содержит меньше сульфатов выше 1 г / дм3.
  • Вы видели, что большинство вин имели летучую кислотность 0,5 и ниже. На данный момент нет прямого отношения к качеству вина

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

Есть только один способ выяснить это: предварительно обработать данные и смоделировать их таким образом, чтобы вы могли видеть, что происходит!

Теперь, когда вы изучили свои данные, пришло время действовать в соответствии с полученной информацией! Давайте предварительно обработаем данные, чтобы вы могли начать строить свою собственную нейронную сеть!

Чтобы увидеть код, перейдите наоригинальный учебник,

Ты устанавливаешьignore_indexвTrueв этом случае, потому что вы не хотите сохранять метки индексаwhiteкогда вы добавляете данные вred: вы хотите, чтобы ярлыки продолжались с того места, на котором они остановилисьred, а не дублировать индексные метки от объединения обоих наборов данных.

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

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

Как и следовало ожидать, есть некоторые переменные, такие какdensityа такжеresidual sugar, Такжеvolatile acidityа такжеtypeболее тесно связаны, чем вы могли предположить, рассматривая два набора данных по отдельности, и можно было ожидать, чтоfree sulfur dioxideа такжеtotal sulfur dioxideсобирались соотнести.

Очень интересно!

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

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

На данный момент импортируйтеtrain_test_splitотsklearn.model_selectionи назначить данные и целевые метки для переменныхXа такжеy, Вы увидите, что вам нужно сгладить массив целевых меток, чтобы быть полностью готовым к использованиюXа такжеyпеременные в качестве входных данных дляtrain_test_split()функция. На работу, начать вэтот блок данных DataCamp Light,

Вы уже на пути к созданию своей первой нейронной сети, но есть еще одна вещь, о которой вам нужно позаботиться! Вы все еще знаете, что обнаружили, когда просматривали резюмеwhiteа такжеredнаборы данных?

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

Стандартизация - это способ справиться с этими ценностями, которые так далеко друг от друга. Пакет scikit-learn предлагает вам отличный и быстрый способ стандартизации ваших данных: импортируйтеStandardScalerмодуль изsklearn.preprocessingи вы готовы масштабировать свой поезд и тестировать данные!

# Import `StandardScaler` from `sklearn.preprocessing` 
from sklearn.preprocessing import StandardScaler # Define the scaler
scaler = StandardScaler().fit(X_train) # Scale the train set
X_train = scaler.transform(X_train) # Scale the test set
X_test = scaler.transform(X_test)

Теперь, когда ваши данные предварительно обработаны, вы можете перейти к реальной работе: созданию собственной нейронной сети для классификации вин.

Прежде чем приступить к моделированию, вернитесь к исходному вопросу: можете ли вы предсказать, красное вино или белое, взглянув на его химические свойства, такие как летучая кислотность или сульфаты?

Поскольку у вас есть только два класса, а именно белый и красный, вы собираетесь выполнить бинарную классификацию. Как вы можете себе представить, «двоичный» означает 0 или 1, да или нет. Поскольку нейронные сети могут работать только с числовыми данными, вы уже закодировали красный как 1, а белый как 0.

Типом сети, которая хорошо справляется с такой проблемой, является многослойный персептрон. Как вы прочитали в начале этого урока, этот тип нейронной сети часто полностью связан. Это означает, что вы хотите построить довольно простой стек полностью связанных слоев для решения этой проблемы. Что касается функции активации, которую вы будете использовать, то лучше всего использовать одну из наиболее распространенных здесь для ознакомления с Keras и нейронными сетями, которая является функцией активации relu.

Теперь, как вы начинаете строить свой многослойный персептрон? Быстрый способ начать работу - использовать последовательную модель Keras: это линейный стек слоев. Вы можете легко создать модель, передав список экземпляров слоя конструктору, который вы настроили, запустивmodel = Sequential()

Далее, лучше вспомнить структуру многослойного персептрона, как вы, возможно, читали об этом в начале этого урока: у вас есть входной слой, несколько скрытых слоев и выходной слой. Поэтому, когда вы создаете свою модель, важно учитывать, что ваш первый слой должен прояснить входную форму. Модель должна знать, какую форму ввода ожидать, и поэтому вы всегда найдетеinput_shape,input_dim,input_length, илиbatch_sizeаргументы в документации слоев и в практических примерах этих слоев.

В этом случае вам придется использоватьDenseслой, который является полностью связанным слоем. Плотные слои выполняют следующую операцию:output = activation(dot(input, kernel) + bias), Обратите внимание, что без функции активации ваш плотный слой будет состоять только из двух линейных операций: точечного произведения и сложения.

В первом слоеactivationаргумент принимает значениеrelu, Далее вы также видите, чтоinput_shapeбыл определен. Этоinputоперации, которую вы только что видели: модель принимает в качестве входных массивов формы(12,), или(*, 12), Наконец, вы видите, что первый слой имеет12в качестве первого значения дляunitsаргументDense(), который является размерностью выходного пространства и который на самом деле 12 скрытых единиц. Это означает, что модель будет выводить массивы формы(*, 12): это размерность выходного пространства. Не волнуйтесь, если вы не получите это полностью только сейчас, вы узнаете об этом позже!

unitsна самом деле представляетkernelприведенной выше формулы или матрицы весов, составленной из всех весов, заданных для всех входных узлов, созданных слоем. Обратите внимание, что в приведенном ниже примере вы не указали предвзятость, поскольку вы не включилиuse_biasаргумент и установить его вTRUE, что тоже возможно.

Промежуточный слой также используетreluфункция активации. Выход этого слоя будет массивом формы(*,8),

Вы заканчиваете сеть сDenseслой размера 1. Последний слой также будет использовать функцию активации сигмоида, так что ваш вывод на самом деле является вероятностью; Это означает, что в результате будет получено значение от 0 до 1, указывающее, насколько вероятно, чтобы образец имел целевой показатель «1», или вероятность того, что вино должно быть красного цвета.

Вы можете найти код и упражнениеВот,

В общем, вы видите, что есть два ключевых архитектурных решения, которые вам нужно принять, чтобы создать свою модель: сколько слоев вы собираетесь использовать и сколько «скрытых единиц» вы выберете для каждого слоя.

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

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

Обратите внимание, что когда у вас не так много доступных данных обучения, вы должны предпочесть использовать небольшую сеть с очень небольшим количеством скрытых слоев (обычно только один, как в примере выше).

Если вы хотите получить некоторую информацию о только что созданной модели, вы можете использоватьoutput_shapeилиsummary()функция, среди других. Некоторые из самых основных из них перечислены ниже.

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

Затем пришло время скомпилировать вашу модель и подогнать модель к данным: еще раз, используйтеcompile()а такжеfit()чтобы сделать это.

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 
model.fit(X_train, y_train,epochs=20, batch_size=1, verbose=1)

При компиляции вы конфигурируете модель сadamоптимизатор и томуbinary_crossentropyфункция потери. Кроме того, вы также можете контролировать точность во время обучения, передавая['accuracy']кmetricsаргумент.

optimizerиlossдва аргумента, которые необходимы, если вы хотите скомпилировать модель. Некоторые из наиболее популярных алгоритмов оптимизации - это Stochastic Gradient Descent (SGD), ADAM и RMSprop. В зависимости от того, какой алгоритм вы выберете, вам нужно будет настроить определенные параметры, такие как скорость обучения или импульс. Выбор функции потерь зависит от задачи, которая у вас есть: например, для задачи регрессии вы обычно будете использовать среднеквадратичную ошибку (MSE). Как вы видите в этом примере, вы использовалиbinary_crossentropyдля бинарной классификации проблемы определения, является ли вино красным или белым. И наконец, с помощью мультиклассовой классификации вы будете использоватьcategorical_crossentropy,

После этого вы можете обучить модель в течение 20 эпох или итераций по всем образцам вX_trainа такжеy_train, в партиях по 1 образцу. Вы также можете указатьverboseаргумент. Установив его на1, вы указываете, что хотите видеть индикатор выполнения

Другими словами, вы должны обучить модель определенному количеству эпох или экспозиций обучающему набору данных. Эпоха - это однократное прохождение всего обучающего набора с последующим тестированием проверочного набора. Размер пакета, указанный в приведенном выше коде, определяет количество выборок, которые будут распространяться по сети. Кроме того, таким образом вы оптимизируете эффективность, поскольку вы не загружаете слишком много входных шаблонов в память одновременно.

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

y_pred = model.predict(X_test)

Прежде чем приступить к оценке вашей модели, вы уже можете быстро получить представление о точности, проверив, какy_predа такжеy_testДля сравнения:

y_pred[:5] 
array([[0], [1], [0], [0], [0]], dtype=int32)
y_test[:5]
array([0, 1, 0, 0, 0])

Вы видите, что эти значения складываются, но что все это без каких-либо твердых цифр?

Теперь, когда вы создали свою модель и использовали ее для прогнозирования данных, которые ваша модель еще не видела, пришло время оценить ее производительность. Вы можете визуально сравнить прогнозы с фактическими метками теста (y_test), или вы можете использовать все типы метрик для определения фактической производительности. В этом случае вы будете использоватьevaluate()сделать это. Передайте данные теста и метки теста и, если хотите, поставьтеverboseаргумент 1. Вы увидите больше журналов, появляющихся при этом.

score = model.evaluate(X_test, y_test,verbose=1) 
print(score)
[0.025217213829228164, 0.99487179487179489]

Счет представляет собой список, который содержит сочетание потери и точности. В этом случае вы видите, что оба кажутся очень хорошими, но в этом случае хорошо помнить, что ваши данные были несколько несбалансированными: у вас было больше белого вина, чем наблюдений за красным вином. Точность может просто отражать распределение классов ваших данных, потому что это будет просто предсказатьwhiteпотому что эти наблюдения в изобилии присутствуют!

Прежде чем вы начнете переупорядочивать данные и собирать их по-другому, всегда полезно попробовать разные метрики оценки. Для этого вы можете положиться на scikit-learn (который вы импортируете какsklearnтак же, как раньше, когда вы делали поезд и тестовые наборы) для этого.

В этом случае вы опробуете некоторые основные методы оценки классификации, такие как:

  • Матрица путаницы, представляющая собой разбивку прогнозов на таблицу, в которой показаны правильные прогнозы и типы неверных прогнозов. В идеале вы будете видеть только цифры в диагонали, а это значит, что все ваши прогнозы были правильными!
  • Точность является мерой точности классификатора. Чем выше точность, тем точнее классификатор.
  • Напомним, является мерой полноты классификатора. Чем выше отзыв, тем больше случаев охватывает классификатор.
  • Оценка F1 или F-оценка - средневзвешенная точность и отзыв.
  • Каппа или каппа Коэна - это точность классификации, нормированная дисбалансом классов в данных.
# Import the modules from `sklearn.metrics` 
from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score, cohen_kappa_score # Confusion matrix
confusion_matrix(y_test, y_pred)
array([[1585, 3], [ 8, 549]]) # Precision
precision_score(y_test, y_pred)
0.994565217391 # Recall
recall_score(y_test, y_pred)
0.98563734290843807 # F1 score
f1_score(y_test,y_pred)
0.99008115419296661 # Cohen's kappa
cohen_kappa_score(y_test, y_pred)
0.98662321692498967

Все эти оценки очень хорошие! Вы сделали довольно точную модель, несмотря на то, что у вас значительно больше рядов типа белого вина.

Отличная работа!

Вы успешно создали свою первую модель, но с этой вы можете пойти еще дальше. Почему бы не попробовать следующие вещи и посмотреть, каков их эффект? Как вы читали выше, два ключевых архитектурных решения, которые вам нужно принять, включают слои и скрытые узлы. Это отличные отправные точки:

  • Вы использовали 1 скрытый слой. Попробуйте использовать 2 или 3 скрытых слоя;
  • Используйте слои с более скрытыми или менее скрытыми единицами;
  • Возьмитеqualityстолбец как метки назначения и остальные данные (включая закодированныеtypeколонка!) как ваши данные. Теперь у вас есть проблема классификации нескольких классов!

Но почему бы не попробовать изменить функцию активации? Вместо relu, попробуйте использовать функцию активации tanh и посмотрите, каков будет результат!

Ваша классификационная модель выполнена отлично для первого запуска!

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

В этом случае учебник предполагает, чтоqualityявляется непрерывной переменной: тогда задача является не задачей двоичной классификации, а порядковой регрессионной задачей. Это тип регрессии, который используется для прогнозирования порядковой переменной:qualityзначение существует в произвольном масштабе, где относительный порядок между различнымиqualityзначения значимы. В этой шкале шкала качества от 0-10 для «очень плохо» до «очень хорошо» является таким примером.

Обратите внимание, что вы также можете рассматривать этот тип проблемы как проблему классификации и рассматривать метки качества как метки фиксированного класса.

Чтобы увидеть, как вы также можете использовать нейронные сети для решения проблемы регрессии, перейдите коригинальный учебник,

Этот урок был только началом вашего глубокого изучения с Python и Keras Есть еще много чего, так почему бы не взять DataCampГлубокое обучение на Pythonкурс? В то же время, не забудьте проверитьKeras документацияЕсли вы еще этого не сделали. Вы найдете больше примеров и информации по всем функциям, аргументам, большему количеству слоев и т. Д. Это, несомненно, будет незаменимым ресурсом, когда вы узнаете, как работать с нейронными сетями в Python!


Первоначально опубликовано наwww.datacamp.com,

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map