我正在尝试学习结合 VGG 和Adrian Ung Triplet Loss的 Paris6k 图像的嵌入。问题是,经过少量迭代后,在第一个 epoch 中,损失变为 nan,然后准确率和验证准确率增长到 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:] …Run Code Online (Sandbox Code Playgroud)