Регрессия CNN случайным образом удерживает элементы выходного тензора на 0 - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь настроить 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.        ]

Я предполагаю, что случайное поведение проистекает из случайно инициализированных весов плотного слоя, но как мне предотвратить это?

...