Только что прошла еще одна (4) неделя из моего 6-недельного проекта ML. Теперь мы закончили и приступили к самой важной и захватывающей задаче. ДА, я имею в виду обучение нашей модели с полным набором данных.

В предыдущие недели мы проделали довольно много работы, в том числе:

  1. Сбор данных.
  2. Поиск изображений и этикеток.
  3. Создание проверочного набора.
  4. Данные в пакеты. ("1 неделя").
  5. Построение нашей модели для задачи классификации.
  6. Создание обратных вызовов. (Неделя 2)
  7. Обучение нашей модели на подмножестве данных.
  8. Создание и оценка прогнозов. (Неделя 3).

И наконец модель была обучена на полном наборе данных.

4 неделя

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

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

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

full_data_cat = create_data_batches(X_cat, y_cat)
full_data_dog = create_data_batches(X_dog, y_dog)
creating training data batches....
creating training data batches....

Далее нам нужно построить модель, и это легко сделать с помощью функции create_our_model().

full_cat_model = create_our_model()
full_dog_model = create_our_model()

Как и на прошлой неделе, здесь мы также используем обратные вызовы для ранней остановки, чтобы остановить обучение, если дальнейшее обучение не требуется, и делаем это, просто вызывая наши удобные функции create_callback() и tf.keras.callbacks.EarlyStopping().

full_model_tensorboard = create_callback()
full_model_early_stopping = tf.keras.callbacks.EarlyStopping(monitor='accuracy', patience=3)

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

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

Кошка

full_cat_model.fit(x=full_data_cat,
                   epochs=NUM_EPOCHS,
                   callbacks=[full_model_tensorboard, full_model_early_stopping])
Epoch 1/100
  1/125 [..............................] - ETA: 0s - loss: 0.2057 - accuracy: 0.9688
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/summary_ops_v2.py:1277: stop (from tensorflow.python.eager.profiler) is deprecated and will be removed after 2020-07-01.
Instructions for updating:
use `tf.profiler.experimental.stop` instead.
125/125 [==============================] - 1755s 14s/step - loss: 0.0064 - accuracy: 0.9990
Epoch 2/100
125/125 [==============================] - 20s 161ms/step - loss: 4.9371e-04 - accuracy: 1.0000
Epoch 3/100
125/125 [==============================] - 20s 162ms/step - loss: 2.3928e-04 - accuracy: 1.0000
Epoch 4/100
125/125 [==============================] - 20s 163ms/step - loss: 1.4022e-04 - accuracy: 1.0000
Epoch 5/100
125/125 [==============================] - 21s 165ms/step - loss: 9.4611e-05 - accuracy: 1.0000

Собака

full_dog_model.fit(x=full_data_dog,
                   epochs=NUM_EPOCHS,
                   callbacks=[full_model_tensorboard, full_model_early_stopping])
Epoch 1/100
126/126 [==============================] - 1808s 14s/step - loss: 0.0382 - accuracy: 0.9940
Epoch 2/100
126/126 [==============================] - 20s 158ms/step - loss: 0.0045 - accuracy: 0.9998
Epoch 3/100
126/126 [==============================] - 20s 159ms/step - loss: 0.0022 - accuracy: 1.0000
Epoch 4/100
126/126 [==============================] - 20s 161ms/step - loss: 0.0013 - accuracy: 1.0000
Epoch 5/100
126/126 [==============================] - 19s 154ms/step - loss: 8.2162e-04 - accuracy: 1.0000
Epoch 6/100
126/126 [==============================] - 19s 154ms/step - loss: 5.9812e-04 - accuracy: 1.0000

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

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

Сохранить и загрузить модель

Кошка

# Save our cat model
save_model(full_cat_model, suffix="full-cat_image-set-mobilenetv2-Adam")

Собака

# Save our dog model
save_model(full_dog_model, suffix="full-dog_image-set-mobilenetv2-Adam")

Теперь мы сохранили нашу модель и можем легко загрузить ее с помощью нашей функции load_model().

# Load our full dog model
loaded_full_dog_model = load_model("drive/My Drive/CatVsDog/models/20200818-05141597727686-full-dog_image-set-mobilenetv2-Adam.h5")
Loading saved model from drive/My Drive/CatVsDog/models/20200818-05141597727686-full-dog_image-set-mobilenetv2-Adam.h5....
# Load our full cat model
loaded_full_cat_model = load_model("drive/My Drive/CatVsDog/models/20200818-04411597725679-full-cat_image-set-mobilenetv2-Adam.h5")
Loading saved model from drive/My Drive/CatVsDog/models/20200818-04411597725679-full-cat_image-set-mobilenetv2-Adam.h5....

Мой репозиторий на Github: Ссылка

Что дальше

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

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