Нан потери в керасе с потерей триплета - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь изучить вложение для изображений Paris6k, сочетающих VGG и потеря триплета Адриана Унга . Проблема в том, что после небольшого количества итераций, в первую эпоху, потеря становится наном, а затем точность и точность проверки возрастают до 1.

Я уже пытался снизить скорость обучения, увеличивая размер пакета (только до 16 из-за объема памяти), изменение оптимизатора (Adam и RMSprop), проверка наличия в моем наборе данных значений None, изменение формата данных с «float32» на «float64», добавление к ним небольшого смещения и упрощение модель.

Вот мой код:

base_model = VGG16(include_top = False, input_shape = (512, 384, 3))
input_images = base_model.input
input_labels = Input(shape=(1,), name='input_label')

embeddings = Flatten()(base_model.output)
labels_plus_embeddings = concatenate([input_labels, embeddings])

model = Model(inputs=[input_images, input_labels], outputs=labels_plus_embeddings)

batch_size = 16
epochs = 2
embedding_size = 64

opt = Adam(lr=0.0001)

model.compile(loss=tl.triplet_loss_adapted_from_tf, optimizer=opt, metrics=['accuracy'])

label_list = np.vstack(label_list)

x_train = image_list[:2500]
x_val = image_list[2500:]

y_train = label_list[:2500]
y_val = label_list[2500:]

dummy_gt_train = np.zeros((len(x_train), embedding_size + 1))
dummy_gt_val = np.zeros((len(x_val), embedding_size + 1))

H = model.fit(
    x=[x_train,y_train],
    y=dummy_gt_train,
    batch_size=batch_size,
    epochs=epochs,
    validation_data=([x_val, y_val], dummy_gt_val),callbacks=callbacks_list)

Изображения 3366 со значениями, масштабированными в диапазоне [0, 1]. Сеть принимает фиктивные значения, потому что она пытается изучить вложения из изображений таким образом, чтобы изображения одного и того же класса имели небольшое расстояние, в то время как изображения разных классов должны иметь большие расстояния, а реальный класс является частью обучения.

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

Что я должен попытаться сделать?

Заранее спасибо и извините за мой английский sh.

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