Я пытаюсь настроить CNG VGG-16 для задачи оценки трехмерного вращения с выходом длины 9, но каждый раз, когда я переучиваю сеть, различные элементы вывода предсказываются как 0.
Чтобы изолировать проблему, я натренировал сеть на одном изображении с одной меткой, но безрезультатно; только от 4 до 7 случайных элементов были предсказаны точно каждый раз, когда я пытался переобучиться.
Это модель архитектуры
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = MaxPooling2D()((base_model.layers[-1].output))
x = Flatten()(x)
x = Dense(4096, activation='relu')(x)
x = Dense(9, activation='relu')(x)
self.rotation_model = keras.Model(base_model.input, self.rotation_model.compile
(optimizer=keras.optimizers.adam(lr=1e-5), loss='mse')
и мои настройки тренировки
self.rotation_model.fit(x = images, y = image_labels,
shuffle = True, batch_size = 16, validation_split=0.2, epochs = 1)
Так что если, когда я попробовал пустую метку
[0.26223586,0.91181952,0.65450856,0.88794664,0.7791132,0.35305367,0.2927185,0.55000502,0.04774576]
Я получаю эти результаты, каждая строка - результат после переоборудования.
[ 0. 0.91180921 0. 0.88795239 0.77910495 0.35305357 0.29271764 0.55000424 0.04774512]
[ 0. 0. 0.65424091 0. 0. 0.35171098 0. 0.54911554 0. ]
[ 0.26255679 0. 0.65443498 0.88769507 0. 0. 0. 0.55067652 0. ]
Я предполагаю, что случайное поведение проистекает из случайно инициализированных весов плотного слоя, но как мне предотвратить это?