Искусственная нейронная сеть в TensorFlow

Искусственная нейронная сеть в TensorFlow Программирование и разработка

В этой статье мы увидим некоторые основы ИНС и простую реализацию искусственной нейронной сети. Tensorflow — мощная библиотека машинного обучения для создания моделей и нейронных сетей.

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

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

Нейрон в искусственной нейронной сети будет выполнять две операции внутри него.

  • Сумма всех весов
  • Функция активации

Итак, базовая искусственная нейронная сеть будет иметь вид,

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

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

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

Вот некоторые из характеристик, которые определяют качество нашей нейронной сети:

  1. Layers
  2. Activation function
  3. Loss function
  4. Optimizer

Теперь мы подробно обсудим каждый из них,

Первый этап построения нашей модели:

Python3

# Definig the model
model = keras.Sequential([
    keras.layers.Dense(32, input_shape=(2,), activation='relu'),
    keras.layers.Dense(16, activation = 'relu'),
    keras.layers.Dense(2, activation = 'sigmoid')
])

Layers

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

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

Здесь настоящие лица, принимающие решения, — это веса между каждым слоем, которые в конечном итоге передают значение от 0 до 1 на выходной уровень. До этого мы видели важность каждого уровня слоев в искусственной нейронной сети. В TensorFlow есть много типов слоев, но мы будем часто использовать Dense.

syntax: tf.keras.layers.Dense()

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

Activation function

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

  1. Sigmoid
  2. Relu
  3. Softmax
  4. Swish
  5. Linear

Каждая функция активации имеет свои конкретные варианты использования и недостатки. Но функция активации, которая используется в скрытом и входном слоях, — это «Relu», а другая функция, которая будет иметь большее влияние на результат, — это потери.

После этого мы можем увидеть параметры в компиляции модели в TensorFlow,

Python

# Compilation of model
model.compile(optimizer='adam'
              loss=a_loss_function
              metrics=['metrics'])

Losses

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

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

  1. Mean Absolute
  2. MeanSquaredError
  3. Binary Crossentropy
  4. Categorical Crossentropy
  5. Sparse Categorica Crossentropy

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

Optimizers

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

Опять же, TensorFlow поддерживает множество оптимизаторов, чтобы упомянуть несколько,

  1. Gradient descent
  2. SDG – Stochastic Gradient Descent
  3. Adagrad
  4. Adam

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

Python

# fitting the model
model.fit(train_data, train_label,
          epochs=5, batch_size=32)

Epochs

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

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

В TensorFlow добавление исключения в слое — это буквально строка кода,

syntax: tf.keras.layers.Dropout(rate, noise_shape=None, seed=None, **kwargs )

Как обучить нейронную сеть с помощью TensorFlow:

Step 1: Importing the libraries

Мы собираемся импортировать необходимые библиотеки.

Python

# Importing the libraries
import pandas as pd
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split

Step 2: Importing the data

Данные, которые мы использовали в этом примере, генерируются случайным образом с помощью Numpy. Вы можете скачать данные здесь. В этих данных x и y являются точкой координат, а цветовая характеристика — это целевое значение, которое было сгенерировано случайным образом, в двоичном формате, представляющем красный — 1, синий — 0.

Python

# Importing the data
df = pd.read_csv('data.txt')

Данные, которые мы использовали в этом примере

Данные будут выглядеть так:

ые будут выглядеть та

Step 3: Splitting the data

Теперь мы собираемся разделить набор данных на обучающее и тестовое разбиения, чтобы оценить модель с невидимыми данными и проверить ее точность.

Python

# split the data into train and test set
train, test = train_test_split(
    df, test_size=0.2, random_state=42, shuffle=True)

Step 4: Constructing the input

На этом этапе мы собираемся создать входные данные, которые нам нужно передать в сеть. Для простоты и модели мы собираемся сложить две характеристики данных в x, а целевую переменную — в y. Мы используем numpy.column_stack (), чтобы складывать

Python

# Constructing the input
x = np.column_stack((train.x.values, train.y.values)) 
y = train.color.values

Step 5: Building a model

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

Python

# Definig the model
model = keras.Sequential([
    keras.layers.Dense(4, input_shape=(2,), activation='relu'),
    keras.layers.Dense(2, activation='sigmoid')
])
 
# Compiling the model
model.compile(optimizer='adam',
              loss=keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])
 
# fitting the model
model.fit(x, y, epochs=10, batch_size=8)

Вывод:

Если мы оценим модель с невидимыми данными, она д

Если мы оценим модель с невидимыми данными, она даст очень низкую точность,

Python

# Evaluating the model
x = np.column_stack((test.x.values, test.y.values))
y = test.color.values
model.evaluate(x, y, batch_size=8)

model.evaluate(x, y, batch

Step 6: Building a better model

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

Python

# Definig the model
model_better = keras.Sequential([
    keras.layers.Dense(16, input_shape=(2,), activation='relu'),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dense(2, activation='softmax')
])
 
# Compiling the model
model_better.compile(optimizer='adam',
                     loss=keras.losses.SparseCategoricalCrossentropy(),
                     metrics=['accuracy'])
 
# Constructing the input
x = np.column_stack((train.x.values, train.y.values))
y = train.color.values
 
# fitting the model
model_better.fit(x, y, epochs=10, batch_size=8)

Вывод:

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

Step 7: Evaluating the model

Наконец, если мы оценим модель, мы ясно увидим, что точность модели на невидимых данных была улучшена с 66 до 85. Итак, мы построили эффективную модель.

Наконец, если мы оценим модель, мы ясно увидим, что точность модели

Читайте также:  Python нарезает многомерные массивы
Оцените статью
bestprogrammer.ru
Добавить комментарий