В этом руководстве по TensorFlow я определю, что означает обучение модели, как обучать модель путем вызова метода fit(), а также какие аргументы передаются в fit().
Наконец, я продемонстрирую на примере, где вы научитесь создавать модель тензорного потока с нуля, как ее обучать и делать прогнозы на основе нового набора данных. Это руководство предназначено для начинающих, но более сложная модель тензорного потока работает на тех же принципах.
Что означает?
Во-первых, у вас есть набор данных, который может быть связан с чем угодно, например с классификацией точки данных, классификацией изображений, аудио, видео и т. д.
Эти данные нормализуются и подготавливаются в форме для подачи в модель нейронной сети. Модель нейронных сетей принимает эти данные и учится на их основе. Он находит закономерности в данных.
Чтобы изучить закономерности, нейронная сеть имеет некоторые параметры, такие как (веса и смещения), которые корректируются на основе предоставленного ей набора данных.
Основная цель нейронной сети — найти наилучшие значения параметров, чтобы их можно было использовать в новом или ранее не существовавшем наборе данных для составления правильных прогнозов.
Обучение включает в себя итерационный процесс, в котором модель учится на примере (в наборе обучающих данных), чтобы улучшить свою способность делать правильные прогнозы на аналогичных или новых данных (набор тестовых данных).
Метод fit()
Чтобы обучить модель, вы вызываете метод fit() для модели с набором данных и параметрами, на которых вы хотите обучить модель.
Синтаксис:
model_name.fit(x_train_data, y_traing_data, epochs=10, batch_size=32, validation_split=0.2)
Давайте разберемся, как работает функция fit().
Сначала вы компилируете модель нейронной сети, и для обучения этой модели на наборе данных вам нужно вызвать метод fit() этой модели.
Метод fit() принимает некоторые аргументы, например:
- x_train_data: это входные данные, называемые функциями обучающих примеров; это пустой массив или тензор TensorFlow. Он содержит строку, представляющую точку данных; каждый столбец представляет собой функцию.
- y_train_data: это соответствующий набор меток для обучающих данных(x_train_data). Он также должен быть в numPy и тензоре тензорного потока.
Итак, вы предоставляете модели набор данных в x_train и y_train, поскольку x_train содержит объекты, а y_train содержит метки. Например, ваша модель определяет, является ли данный фрукт манго.
Набор данных будет таким, как показано ниже.
dataset = { 'Weight': [150, 200, 120, 180, 100], 'Color(0 = Green, 1 = Yello)': [0, 1, 0, 1, 0], 'Label(1 = Mango, 0 = Not Mango)': [0, 1, 0, 1, 0] }
В приведенном выше наборе данных x_train_data будет иметь такие функции, как вес столбца и цвет, а y_train_data — это метка для каждого объекта, например столбец Label.
Как видите, набор данных содержит 5 точек данных. Например, посмотрите на точку данных, где вес равен 180, цвет — 1, а метка — 1; когда модель видит эту точку данных, она понимает, что это манго.
Во время обучения модель изучает эти функции и соответствующие метки для значений этих функций:
- Epocs: это означает полный проход через весь набор данных. Например, набор обучающих данных содержит 5 точек данных. Если вы укажете epocs=2, то в течение всего процесса обучения модель повторяется по всему набору обучающих данных 2 раза.
- Batch_size: для каждой эпохи набор обучающих данных делится на пакеты; если вы укажете размер пакета равным 10, то на основе набора данных будет создано 10 пакетов, и каждый пакет будет содержать подмножество набора данных.
Например, если у вас есть набор обучающих данных, содержащий 50 точек данных, и вы указываете размер пакета, равный 5, создается пять пакетов, каждый из которых содержит 10 точек данных (подмножество данных).
В каждую эпоху он проходит через каждый пакет один за другим и обновляет значения своих параметров.
Validation_split: это небольшая часть набора обучающих данных, который вы предоставляете модели. Цель небольшого набора данных — отслеживать производительность модели во время ее обучения на этих невидимых небольших данных.
Поэтому, если вы укажете значение validation_split, равное 0,3, 30% данных из набора данных будут использоваться в целях проверки, чтобы увидеть, насколько хорошо модель обобщает данные, которые она не видела.
Эпохи, Batch_size и validation_split — это параметры, настроенные для оптимального обучения модели; это часть настройки гиперпараметра.
Создание и обучение
Например, вам нужно создать модель, чтобы определить, являются ли фрукты бананами или апельсинами.
Итак, вы собрали набор данных об обоих фруктах, и этот набор данных содержит два столбца: вес, цвет и этикетку.
Масса | Цвет (1 для смеси красного и желтого, 0 для желтого). | Этикетка (1 для апельсина, 0 для банана) |
150 | 1 | 1 |
200 | 0 | 0 |
100 | 1 | 1 |
250 | 1 | 1 |
130 | 0 | 0 |
140 | 0 | 0 |
Здесь, если фрукт имеет вес и цвет 1, что означает смесь красного и желтого, он оранжевый и помечен 1. Если фрукт имеет цвет 0, что означает желтый, это банан и помечен 0.
Теперь нам нужно преобразовать приведенный выше набор данных в формат, пригодный для использования в модели.
Итак, создайте числовые данные, используя массив numpy, поскольку модель работает с числовыми данными. Как показано ниже, преобразуйте данные двух фруктов в массив numpy.
Сначала импортируем необходимую библиотеку, которую мы будем использовать.
import tensorflow as tf from tensorflow.keras.models import Sequential, Model from tensorflow.keras.layers import Input, Dense import numpy as np
Создайте функцию для модели. В нашем наборе данных есть два признака: вес и цвет, поэтому преобразуйте значения этих признаков в числовой массив, как показано ниже.
x_train_data = np.array([ [150, 1], [200, 0], [100, 1], [250, 1], [130, 0], [140, 0], ])
Кроме того, у нас есть соответствующая метка для каждой точки данных в x_train_data, поэтому преобразуйте их в numpy, как показано ниже.
y_train_data = np.array([1, 0, 1, 1, 0, 0])
Затем определите последовательную модель с помощью функции Sequential(), как показано ниже.
model = tf.keras.models.Sequential()
Cоздайте входной, скрытый и выходной слои с помощью функции Dense(), как показано ниже.
input_layer = tf.keras.layers.Dense(units=2, activation='relu', input_shape=(2,)) hidden_layer = tf.keras.layers.Dense(units=10, activation= 'relu') output_layer = tf.keras.layers.Dense(units=1, activation='relu')
Добавьте вышеуказанные слои в модель, используя функцию add() ниже.
model.add(input_layer) model.add(hidden_layer) model.add(output_layer)
Вы создали модель. Укажите и настройте модель для обучения или скомпилируйте модель с помощью функции оптимизатора, потерь и метрик, используя метод compile(), как показано ниже.
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
После компиляции модели давайте обучим ее на x_train_data и y_train_data с эпохами = 100 и validation_split = 0,2.
model.fit(x_train_data, y_train_data, epochs=100, validation_split=0.2)
Судя по приведенным выше выводам, модель обучается на наборе данных в течение 100 эпох. После обучения вы можете использовать модель для прогнозирования.
Сначала оцените производительность модели, используя приведенный ниже код.
loss, accuracy = model.evaluate(x_train_data, y_train_data) print(f"Loss: {loss}, Accuracy: {accuracy}")
В приведенном выше коде вызов функции оценки модели с помощью x_train_data и y_train_data после оценки модели возвращает два значения потери и точности, что указывает на производительность модели.
Теперь используйте модель для прогнозирования новых данных о фруктах, как показано ниже.
new_fruit = np.array([[150, 1]]) prediction = model.predict(new_fruit) print("Predicted class:", "Bananas" if prediction[0][0] > 0 else "Orange")
Судя по приведенному выше изображению, при оценке модели ее точность составляет 0,5, что означает 50%, а потери составляют 7,712, что довольно высоко. Это означает, что наша модель нуждается в дополнительном обучении, но у нас очень мало данных, поэтому модель не может обучаться должным образом, поэтому потери высоки.
В реальном мире большой объем данных с различными вариациями передается в модель нейронной сети, которая обучается на основе этого набора данных. Здесь цель — минимизировать потери и повысить точность, чтобы модель могла делать правильные прогнозы на новом аналогичном наборе данных.
Также мы протестировали модель со значением new_fruit, равным(150,1). Вы можете видеть, что он предсказан, что он оранжевый, хотя модель не очень хорошо обучена.
Кроме того, помните, что вы можете точно настроить или изменить значение параметра эпох и т. д. на разные значения, чтобы повысить точность и уменьшить потери.
При обучении модели в реальном мире всегда предоставляйте достаточно данных для модели для обучения и убедитесь, что вы минимизируете ошибку потерь и максимизируете точность модели. Это параметр, с помощью которого мы можем измерить производительность модели.
Также вы можете скомпилировать модель с разными оптимизаторами, потерями и метриками.
Заключение
Вы узнали, как обучать модель в TensorFlow с помощью метода fit() модели, а также научились передавать набор данных в модель как x_training и y_train.
Затем вы узнали, как разделить набор данных на подмножества с помощью параметра пакетного размера.