【发布时间】:2020-01-22 10:06:16
【问题描述】:
我正在尝试学习结合 VGG 和 Adrian Ung triplet loss 的 Paris6k 图像嵌入。问题是经过少量迭代,在第一个epoch,loss变成了nan,然后accuracy和validation accuracy都增长到了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] 范围内缩放。 该网络采用虚拟值,因为它试图从图像中学习嵌入,即同一类的图像应该具有较小的距离,而不同类的图像应该具有较大的距离,而真实类是训练的一部分。
我注意到我之前进行了不正确的分类(并保留了应该丢弃的图像),并且我没有遇到 nan loss 问题。
我应该怎么做?
提前感谢我的英语。
【问题讨论】: