Рубрики
Без рубрики

Создайте свою первую нейронную сеть с помощью KERAS API

Целью этот учебник поможет программистам построить, поездить и проверить свою первую нервную сеть … помеченным новичками, учебником, Python, Deplearning.

Цель

Этот учебник поможет программистам построить, поездить и проверить свою первую нейронную сеть, используя мощную библиотеку Keras Python.

Оглавление

  • Введение
  • О нейронных сетях и керах
  • Код github
  • Постановка задачи
  • Создание набора данных
  • Создание последовательной модели
  • Обучение модели
  • Тестирование модели с использованием прогнозов
  • Предсказания построения с использованием путаницы матрицы
  • Окончательный код
  • Вывод

Введение

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

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

ПРИМЕЧАНИЕ. API KERAS наряду с 10 000 других таких библиотек Python доступна из AnaConda Navigator. Вы можете узнать все о приобретении ANACONDA и устанавливать KERAS API в настройках Python Exedch с использованием уроков AnaConda.

О нейронных сетях и керах

Искусственные нейронные сети, Anns или нейронные сети представляют собой серию алгоритмов, которые моделируются после биологической активности человеческого мозга. Нейронные сети составляют слои. Каждый слой состоит из узлов (также называемых нейронами).

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

Это видео является частью Машинное обучение и глубокие учебные основы Плейлист и был взят из Deeplizard YouTube Channel. .

KERAS – это библиотека Python, которая использует Tensorflow как его спина. Эта библиотека позволяет эффективно создавать, обучать и тестировать модели. Это также позволяет нам использовать свои собственные ранее существующие модели. Вы можете узнать больше о глубокой API обучения от Веб-сайт Keras Отказ

Код github

Следующее заявление о проблеме вместе с кодом для этого блога доступны на мой профиль GitHub и скомпилирован в ноутбуке Jupyter под названием Первая нейронная сеть с Keras API Отказ Вы можете просматривать и использовать код по своему вкусу. Я побудим вас прочитать через этот блог, а также для лучшего объяснения письменного кода.

Постановка задачи

Экспериментальный препарат был проверен на 2100 человек в клинической тропе. Возраст участников варьировался от тринадцати до ста. Половина участников было в возрасте до 65 лет, другая половина была 65 лет или старше.

Девяносто пять процентов пациентов, которые были 65 лет или более старыми опытными побочными эффектами. Девяносто пять процентов пациентов в возрасте до 65 лет не испытали побочных эффектов.

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

Шаги:

  • Генерировать случайный набор данных, который придерживается этих утверждений
  • Разделите набор данных на тренировку (90%) и проверку (10%) набор
  • Построить простую последовательную модель
  • Поезд и проверка модели с помощью набора данных
  • Случайно выберите 20% данные из набора данных в качестве тестового набора
  • Предсказания сюжета, сделанные моделью на тестовом наборе

Создание набора данных

Сначала мы импортируем некоторые библиотеки, необходимые для создания набора данных.

import numpy as np
from random import randint
from sklearn.utils import shuffle
from sklearn.preprocessing import MinMaxScaler

Мы импортируем numpy Поскольку все наши переменные являются неразмерными массивами. Остальные библиотеки будут использоваться для рандогимизации, спреивающих и масштабирования данных соответственно.

Далее мы инициализируем пустые списки для учебных образцов вместе со своими этикетками.

train_labels = []
train_samples = []

Список Train_sAmples включает в себя возраст участника и strow_Label включает в себя, были ли они побочными эффектами (обозначены «1») или нет (обозначены «ноль»).

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

for i in range(50):
    # The 5% of younger individuals who did experience side effects
    random_younger = randint(13, 64)
    train_samples.append(random_younger)
    train_labels.append(1)

    # The 5% of older individuals who did not experience side effects
    random_older = randint(65, 100)
    train_samples.append(random_older)
    train_labels.append(0)


for i in range(1000):
    # The 95% of younger individuals who did not experience side effects
    random_younger = randint(13, 64)
    train_samples.append(random_younger)
    train_labels.append(0)

    # The 95% of older individuals who did experience side effects
    random_older = randint(65, 100)
    train_samples.append(random_older)
    train_labels.append(1)

Первые 50 итераций генерируют случайные возрасты для Участники моложе 65, которые страдали от побочных эффектов (помечены ‘1’) и Участники 65 и старше, которые не страдали от побочных эффектов (помечены ‘0’). Случайный возраст генерируется, помещается внутри переменной Random_younger или Random_older, а затем добавлена в список rain_samples. Значение для метки также добавляется в список ruste_label. Для следующих 1000 итераций аналогичный подход принимается, но для Участники моложе 65, которые не страдали от побочных эффектов (помечены ‘0’) и Участники 65 и старше, которые страдали от побочных эффектов (маркирован ‘1’).

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

train_labels = np.array(train_labels)
train_samples = np.array(train_samples)
train_labels, train_samples = shuffle(train_labels, train_samples)

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

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

scaler = MinMaxScaler(feature_range = (0, 1))
scaled_train_samples = scaler.fit_transform(train_samples.reshape(-1,1))

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

Создание последовательной модели

Теперь мы движемся к созданию нашей нейронной сети. Первый шаг – импортировать библиотеку Tensorflow и KERAS, а также определенные параметры, необходимые для нашей модели. Эти параметры все импортируются из входят в KERAS, использующие бэкэнд Tensorflow.

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Activation, Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.metrics import categorical_crossentropy

Наша модель – простая последовательная модель, что означает, что слои линейно сложены, поэтому мы импортируем Последовательный Отказ От слоев мы импортируем полностью подключенные или Густым слой вместе с типом активация Функция, необходимая для масштабирования данных, отправленных на узлы. Оптимизаторы Также обязаны помочь минимизировать потери, что является решающим шагом в расчете нейронной сети. Наконец категория_crossentropy – это тип Функция потери Что мы будем использовать для нашей модели.

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

Давайте теперь построим нашу модель. Я создаю модель с одним входом (с 16 единицами), одной скрытой (с 32 единицами) и одним выходом (с 2 единицами) слоем. Решать количество слоев и агрегатов, чтобы установить отличаться от проблемы к проблеме и может быть улучшена сверхурочно через практику.

model = Sequential([
    Dense(units = 16, input_shape = (1,), activation = 'relu'), 
    Dense(units = 32, activation = 'relu'), 
    Dense(units = 2, activation = 'softmax')
])

Этот код довольно прост, мы создаем последовательную модель с тремя плотными слоями. Входной слой принимает кортеж целых чисел, которые соответствует форме входных данных, отсюда (1,). «RELU» и «Softmax» – это типы функций активации.

Вот какое резюме модели должно выглядеть:

Обучение модели

Для обучения нашей модели мы просто используем model.compile () Функция, а затем model.fit () функция.

model.compile(optimizer = Adam(learning_rate = 0.0001), loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
model.fit(x = scaled_train_samples, y = train_labels, validation_split = 0.1, batch_size = 10, epochs = 30, shuffle = True, verbose = 2)

Функция компиляции кушает нашу модель вместе, когда функция FIT начинает процесс обучения. Мы указали метрику «точность», поскольку мы хотим увидеть точность нашей модели во время тренировки. Используя параметр Validation_split, мы автоматически расщепляем набор данных на наборы тренировки и проверки. «0.1» здесь означает, что 10% идет на набор валидации, а остальные 90% идет на набор тренировок. Набор данных также разделяется на партии 10 (batch_size) и будет передаваться через модель 30 раз. Каждый цикл упоминается как «эпоха». « Verbose ‘здесь относится к Насколько подробны обучающие результаты будут И поэтому мы устанавливаем, что на «2», что является максимальной деталью.

Предварительная обработка тестовых данных

Это похоже на масштабирование данных и преобразование, проведенное для наборов данных обучения и валидации.

Сначала мы инициализируем список тестов.

test_labels = []
test_samples = []

Один для возрастов и один для этикеток ( если пострадал от побочных эффектов (обозначается как «1») или Если не страдал от побочных эффектов (обозначается как «0»)).

Теперь мы случайным образом генерируем значения для обеих списков.

for i in range(10):
    # The 5% of younger individuals who did experience side effects
    random_younger = randint(13, 64)
    test_samples.append(random_younger)
    test_labels.append(1)

    # The 5% of older individuals who did not experience side effects
    random_older = randint(65, 100)
    test_samples.append(random_older)
    test_labels.append(0)


for i in range(200):
    # The 95% of younger individuals who did not experience side effects
    random_younger = randint(13, 64)
    test_samples.append(random_younger)
    test_labels.append(0)

    # The 95% of older individuals who did experience side effects
    random_older = randint(65, 100)
    test_samples.append(random_older)
    test_labels.append(1)

Первые 10 итераций генерируют случайные возрасты для Участники моложе 65, которые страдали от побочных эффектов (помечены ‘1’) и Участники 65 и старше, которые не страдали от побочных эффектов (помечены ‘0’). Случайный возраст генерируется, помещается внутри переменной Random_younger или Random_older, а затем добавлена в список test_samples. Значение для метки также добавляется в список Test_Label. Для следующих 200 итераций аналогичный подход принимается, но для Участники моложе 65, которые не страдали от побочных эффектов (помечены ‘0’) и Участники 65 и старше, которые страдали от побочных эффектов (маркирован ‘1’).

Теперь мы преобразуем списки для Numpy Archays и Shuffle, похоже на то, что мы сделали с набором обучения/проверки.

test_labels = np.array(test_labels)
test_samples = np.array(test_samples)
test_labels, test_samples = shuffle(test_labels, test_samples)

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

scaled_test_samples = scaler.fit_transform(test_samples.reshape(-1,1))

Тестирование модели с использованием прогнозов

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

predictions = model.predict(x = scaled_test_samples, batch_size = 10, verbose = 0)
rounded_predictions = np.argmax(predictions, axis = -1)

Предсказания построения с использованием путаницы матрицы

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

Теперь используйте соответствующие этикетки и построить матрицу.

cm_plot_labels = ['no_side_effects', 'had_side_effects']
plot_confusion_matrix(cm = cm, classes = cm_plot_labels, title = 'Confusion Matrix')

Ваш выход должен выглядеть что-то подобное:

И это все! Вы успешно создали свою первую нейронную сеть, которая действительно решает реальную проблему!

Окончательный код

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

import numpy as np
from random import randint
from sklearn.utils import shuffle
from sklearn.preprocessing import MinMaxScaler

train_labels = []     # one means side effect experienced, zero means no side effect experienced
train_samples = []

for i in range(50):
    # The 5% of younger individuals who did experience side effects
    random_younger = randint(13, 64)
    train_samples.append(random_younger)
    train_labels.append(1)

    # The 5% of older individuals who did not experience side effects
    random_older = randint(65, 100)
    train_samples.append(random_older)
    train_labels.append(0)


for i in range(1000):
    # The 95% of younger individuals who did not experience side effects
    random_younger = randint(13, 64)
    train_samples.append(random_younger)
    train_labels.append(0)

    # The 95% of older individuals who did experience side effects
    random_older = randint(65, 100)
    train_samples.append(random_older)
    train_labels.append(1)

train_labels = np.array(train_labels)
train_samples = np.array(train_samples)
train_labels, train_samples = shuffle(train_labels, train_samples)  # randomly shuffles each individual array, removing any order imposed on the data set during the creation process

scaler = MinMaxScaler(feature_range = (0, 1)) # specifying scale (range: 0 to 1)
scaled_train_samples = scaler.fit_transform(train_samples.reshape(-1,1)) # transforms our data scale (range: 13 to 100) into the one specified above (range: 0 to 1), we use the reshape fucntion as fit_transform doesnot accept 1-D data by default hence we need to reshape accordingly here

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Activation, Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.metrics import categorical_crossentropy

model = Sequential([
    Dense(units = 16, input_shape = (1,), activation = 'relu'), 
    Dense(units = 32, activation = 'relu'), 
    Dense(units = 2, activation = 'softmax')
])

model.compile(optimizer = Adam(learning_rate = 0.0001), loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])

model.fit(x = scaled_train_samples, y = train_labels, validation_split = 0.1, batch_size = 10, epochs = 30, shuffle = True, verbose = 2)

test_labels = []
test_samples = []

for i in range(10):
    # The 5% of younger individuals who did experience side effects
    random_younger = randint(13, 64)
    test_samples.append(random_younger)
    test_labels.append(1)

    # The 5% of older individuals who did not experience side effects
    random_older = randint(65, 100)
    test_samples.append(random_older)
    test_labels.append(0)


for i in range(200):
    # The 95% of younger individuals who did not experience side effects
    random_younger = randint(13, 64)
    test_samples.append(random_younger)
    test_labels.append(0)

    # The 95% of older individuals who did experience side effects
    random_older = randint(65, 100)
    test_samples.append(random_older)
    test_labels.append(1)

test_labels = np.array(test_labels)
test_samples = np.array(test_samples)
test_labels, test_samples = shuffle(test_labels, test_samples)

scaled_test_samples = scaler.fit_transform(test_samples.reshape(-1,1))

scaled_test_samples = scaler.fit_transform(test_samples.reshape(-1,1))

rounded_predictions = np.argmax(predictions, axis = -1)

from sklearn.metrics import confusion_matrix
import itertools
import matplotlib.pyplot as plt

cm = confusion_matrix(y_true = test_labels, y_pred = rounded_predictions)

# This function has been taken from the website of scikit Learn. link: https://scikit-learn.org/0.18/auto_examples/model_selection/plot_confusion_matrix.html
def plot_confusion_matrix(cm, classes,
                          normalize=False,
                          title='Confusion matrix',
                          cmap=plt.cm.Blues):
    """
    This function prints and plots the confusion matrix.
    Normalization can be applied by setting `normalize=True`.
    """
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)

    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
        print("Normalized confusion matrix")
    else:
        print('Confusion matrix, without normalization')

    print(cm)

    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

cm_plot_labels = ['no_side_effects', 'had_side_effects']
plot_confusion_matrix(cm = cm, classes = cm_plot_labels, title = 'Confusion Matrix')

Этот код также доступен на мой профиль GitHub и скомпилирован в ноутбуке Jupyter под названием Первая нейронная сеть с Keras API Отказ Оттуда вы можете использовать этот код по своему вкусу и предложить там улучшения.

Вывод

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

Muizalvi/machine_learning_and_deep_learning_models.

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

Репозиторий, содержащий модели на основе идей машинного обучения и глубокого обучения. Список файлов:

  1. Простая последовательная модель

    • Использует случайно сгенерированный набор обуви (10% из которых используется в наборе валидации) и тестовые данные
    • Показывает окончательные прогнозы в путанице матрицы
  2. Классификатор Cat and Dog – свертка нейронной сети

    • Использует набор данных 1300 изображений (1000 для набора тренировок, 200 для набора валидации, 100 для набора тестов) Случайно выбранный из больших наборов данных 25000 изображений
    • Данные изображения: https://www.kaggle.com/c/dogs-vs-cats/data (25000 изображений кошек и собак)
    • Модель опыта перенапряжения и потребности быть улучшенным
    • Модель не была проверена на данный момент из-за переоценки на наборе обучения
  3. Классификатор Cat and Dog 2.0 [Использование существующей модели] – Уверенность нейронной сети

    • Поезда существующая модель VGG16 (с некоторыми изменениями)
    • Использует приготовление данных, используемую в предыдущей загрузке (CAT и DOG CLASSITINER – сверточная нейронная сеть)
    • Высокоточная модель с …

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

Оригинал: “https://dev.to/muizalvi/build-your-first-neural-network-with-the-keras-api-35b4”