我正在使用CNN回归运行对象本地化任务。我用原始数据得到了相当不错的结果。
然而,在我在增强过程中将5%的噪音添加到原始数据后,训练期间的损失值看起来没问题,但验证在训练期间波动很大。当我在训练结束后检查结果时,神经网络总是预测出一个恒定的输出。也就是说,无论输入数据如何,网络的输出都不会改变,这意味着神经网络被困在死谷中。怎么会发生这种情况,因为我在数据中添加了可变性,以及如何避免这种情况?
添加噪音的代码:
sindex = 0;
for n in range(n_train):
cndata = normalized_data[n, :, :, :]
# plt.matshow(np.squeeze(prepped_data[sindex, :, :,:]))
# add noise, augmentation, and shift in x and y
for x in range(1):
noise = np.random.normal(0, noise_sd, (xres, xres, slices))
ishift = np.random.randint(low=1, high=(row - xres), size=2)
prepped_data[sindex, :, :, :, 0] = cndata[ishift[0]:ishift[0] + xres, ishift[1]:ishift[1] + xres, :] + noise
prepped_label[sindex, :] = labelData[:, n] + [-ishift[0], -ishift[1], 0, -ishift[0], -ishift[1], 0, 0]
sindex = sindex + 1
Loss function definition:
model.compile(optimizer=opt, loss='mean_squared_error', metrics=['accuracy', root_mean_squared_error])
RMSE definition:
def root_mean_squared_error(y_true, y_pred):
return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1))