Только что прошла еще одна (4) неделя из моего 6-недельного проекта ML. Теперь мы закончили и приступили к самой важной и захватывающей задаче. ДА, я имею в виду обучение нашей модели с полным набором данных.
В предыдущие недели мы проделали довольно много работы, в том числе:
- Сбор данных.
- Поиск изображений и этикеток.
- Создание проверочного набора.
- Данные в пакеты. ("1 неделя").
- Построение нашей модели для задачи классификации.
- Создание обратных вызовов. (Неделя 2)
- Обучение нашей модели на подмножестве данных.
- Создание и оценка прогнозов. (Неделя 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: Ссылка
Что дальше
Следующее в списке дел - сделать прогнозы на основе тестовых данных, а также на некоторых случайных или настраиваемых изображениях и посмотреть, точно ли наша модель прогнозирует и на них.
Я чувствую себя очень взволнованным прямо сейчас, потому что я достаточно близок к завершению этого проекта, который очень помог мне во многих вещах, таких как чтение многих документов, поиск ошибок, их исправление, запуск кода всякий раз, когда я сомневался, поиск Интернет и следование чужому коду в некоторых специфических ситуациях. Насколько я понимаю, здесь не было абсолютно никакой потери времени или усилий, и я получил только много ценной информации в ходе этого процесса. Я очень хочу, чтобы мой проект «Кошка против собаки» ожил очень скоро.