我正在尝试训练一个基于MobileNet的模型来对Dog Faces进行地标检测(输出是一个张力,有x / y坐标,用于眼睛的位置和狗的鼻子)。
在我的培训中,我看到 val_loss 的以下图表:
问题:val_loss中的随机峰值是怎么回事?
我的模型看起来像这样:
model = applications.MobileNet(weights="imagenet",
include_top=False,
input_shape=(224, 224, 3))
for layer in model.layers:
layer.trainable = True
x = model.output
p = 0.6
x = AveragePooling2D()(output_layer)
x = BatchNormalization(axis=1, name="net_out")(x)
x = Dropout(p/4)(x)
x = Flatten()(x)
x = Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(p)(x)
x = Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(p/2)(x)
# PREDICT_SIZE is 6 - the number of landmarks I'm extracting
x = Dense(PREDICT_SIZE, activation="linear")(x)
points = Reshape((PREDICT_SIZE,), name="f")(x)
model_final = Model(input=model.input, output=points)
model_final.compile(loss="mse",
optimizer=optimizers.Adam(epsilon=1e-7),
metrics=["accuracy"])
更多问题:我应该在我的优化器中将epsilon设置为更大的数字吗?如果我把epsilon变大,我的模型会受到影响吗?
我应该尝试不同的损失功能吗?
模型本身有错吗?
我应该为我的模型尝试不同的顶层吗?
更新:删除" relu"激活导致val_loss中没有更多时髦的跳跃,而且还有一个损耗更低,精度更高的模型!哇噢!
删除" relu"后, val_loss 值来自顶层(没有其他变化)。