Я экспериментирую с тренировочными моделями на наборе данных, содержащем изображения симптомов болезней растений.
Я обучил модель VGG16 с нуля, а также использовал трансферное обучение.
В трансферном обучении я удалил глава модели VGG16, предварительно обученный на базе данных imag enet. Затем я подключил эту пользовательскую головку к ней.
from keras.layers.core import Dropout
from keras.layers.core import Flatten
from keras.layers.core import Dense
head_model = base_model.output
head_model = Flatten(name='flatten')(head_model)
head_model = Dense(256,activation='relu')(head_model)
head_model = Dropout(0.5)(head_model)
# Add a softmaxc layer
head_model = Dense(len(class_names),activation='softmax')(head_model)
Я заморозил все слои в базовой модели и тренировал голову около 25 эпох.
Затем я разморозил некоторые слои в конец базовой модели и обучение для еще 100 эпох.
Это приводит к большей точности, чем обучение с нуля.
Я хочу также поэкспериментировать с моделью ResNet50.
Мой вопрос: как мне определить подходящий головной раздел для прикрепления? Для вышесказанного, я получил архитектуру головы из учебника. Но я не очень понимаю причины этого. Например, слои CONV там не используются. Только плотный, сплющенный и выпадающий. Почему не используются слои CONV?
Как выбрать подходящую головку для Re sNet?
EDIT
У меня есть 100- 1500 изображений в классе. Всего 10 классов.
Точность тренировки для повторного snet
После прогрева. Здесь я замораживаю все слои базовой модели и тренирую произвольную головку только в течение 25 эпох.
[INFO] evaluating after initialization...
precision recall f1-score support
Tomato___Tomato_mosaic_virus 0.00 0.00 0.00 532
Tomato___Early_blight 0.00 0.00 0.00 239
Tomato___Late_blight 0.00 0.00 0.00 470
Tomato___Leaf_Mold 0.00 0.00 0.00 238
Tomato___Bacterial_spot 0.00 0.00 0.00 435
Tomato___Target_Spot 0.00 0.00 0.00 362
Tomato___Tomato_Yellow_Leaf_Curl_Virus 0.30 1.00 0.46 1355
Tomato___healthy 0.00 0.00 0.00 98
Tomato___Septoria_leaf_spot 0.00 0.00 0.00 414
Tomato___Two-spotted_spider_mite 0.00 0.00 0.00 397
avg / total 0.09 0.30 0.14 4540
После завершения прогрева я попытался постепенно разморозить некоторые слои. Вот результаты.
Слои, начиная с 165, незамерзшие. (работает за 60 эпох)
425/425 [==============================] - 233s 548ms/step - loss: 0.2656 - accuracy: 0.9201 - val_loss: 93.4192 - val_accuracy: 0.2998
Слои из 161 незамерзших (пробег около 50 эпох)
425/425 [==============================] - 221s 521ms/step - loss: 0.2627 - accuracy: 0.9235 - val_loss: 91.5139 - val_accuracy: 0.1066
Слои из 168 незамерзших (пробег 50 эпох) val_accuracy = 0.30198
Итак, val_accuracy увеличивается очень редко. И это также уменьшается.
В отличие от vgg16 получает очень хорошую точность.