ПОСТРОЕНИЕ ПРОСТОЙ МОДЕЛИ ГЛУБОКОГО ОБУЧЕНИЯ

Необходимое условие: Глубокое обучение: искусственные нейронные сети

Давайте возьмем два списка x и y и построим простую простую модель, которая попытается определить взаимосвязь между ними.

Мы строим нашу модель на питоне, используя Tensorflow keras.

Импортировать необходимые пакеты

import tensorflow as tf
import numpy as np
import tensorflow_datasets as tfd

Создайте наш небольшой набор данных в формате списка

x = np.array([-40,-10,0,8,15,22,38],dtype = float)
y = np.array([-40,14,32,46,59,72,100],dtype = float)
for i, c in enumerate(x):
  print('{} x is equivalent to {} y'.format(c,y[i]))

Расстановка модели

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

Учитывая, что это простая задача, для нее потребуется только один слой с одним нейроном. Назовем наш слой L1, как показано ниже:

L_1 = tf.keras.layers.Dense(units=1,input_shape = [1])
  • Input_shape: указывает, что входной слой представляет собой одно значение, т. е. входная форма представляет собой одномерный массив с одним элементом.
  • единицы: Sуказывает количество нейронов в слое. Это количество внутренних переменных, которые слой должен попробовать, чтобы узнать, как решить проблему.

Сборка модели

Далее, давайте соберем слои в модель. Эта модель имеет только один слой.

model = tf.keras.Sequential(
 [
 L_1
 ]
)

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

#model = tf.keras.Sequential(
 # [
 # tf.keras.layers.Dense(units = 1,input_shape = [1])
 # ]
#)

Компиляция модели с функциями потерь и оптимизатора

При компиляции модели используются следующие параметры:

  • Функция потерь. Способ измерения того, насколько прогнозы далеки от желаемого результата.
  • Функция оптимизатора: способ корректировки внутренних значений для уменьшения потерь.
model.compile(loss = ‘mean_squared_error’,
 optimizer = tf.keras.optimizers.Adam(0.1))

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

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

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

history = model.fit(x,y, epochs=500,verbose=False)
print(“Finished training the model”)

x:Входные данные
y:Желаемый результат
Эпохи: указывает, сколько раз должен выполняться этот цикл. В этом случае мы обучаем семь пар входных данных за 500 эпох, т. е. 3500 использованных примеров.
Подробная информация: контролирует объем выходных данных модели.

Показать статистику тренировок

import matplotlib.pyplot as plt
plt.plot(history.history[‘loss’])
plt.xlabel(‘Epoch Number’)
plt.ylabel(‘Loss Magnitude’)

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

Результаты: веса слоев

Выведем внутренние переменные (веса) плотного слоя.

print(‘These are the weights used: {}’.format(L_1.get_weights()))

Из приведенного выше вывода веса аналогичны нашей функции активации: 100 * 1,8 + 32
, то есть 1,82 ~ 1,8 и 29,9 ~ 32.

Результаты: используйте модель для прогнозирования значений

print(model.predict([100.00]))

Правильный ответ при ручном расчете ожидается следующим образом: 100 * 1,8 + 32 = 212. Это означает, что наша модель работает довольно хорошо.

Вывод:

С дополнительными нейронами, входами и слоями формулы усложняются, но идея та же.