为什么在训练我的FCN-8模型时,我的神经网络精度每第n个系统地降低一次?

时间:2019-06-29 09:32:38

标签: python tensorflow keras conv-neural-network image-segmentation

我正在尝试使用FCN模型对城市景观图像进行分割。 我正在使用基本的8层NN。训练数据量非常高(最多90k张图像)。训练集最大为5k,有效集最大为2.5k图像。

为适应我的模型,我在使用adam Optimizer,

  • 学习率1e-4
  • 没有学习率下降(因为亚当自己做了)
  • BatchSize 1
  • 正则化0.001,具有 categorical_crossentropy

我要使用data_generator来喂火车环。为了了解Train,我编写了一些Lambda-Callbacks,它们使用RGB-GT-Pred和ConfusionMatrix在Valid-Set上的每10个迭代中计算3x3子图。

图像数据的分辨率已大大降低(节省内存)。

在训练我的模型(大约55个历元->大约13小时)时,我的数据集Model-Accuracy Model-Loss上的损失将会增加或acc会减少。

在FCN体系结构中,没有Dropout。

在计算ConfusionMatrix和3x3子图时出现“负”峰值是非常可疑的。但是,在代码中进行大量搜索并没有找到原因。

对于混淆矩阵计算,我使用第二个data_generator来加快进度。

每个人都可以给我提示如何解决此问题吗? 令人怀疑的是,Train-Set上的acc减少并且val_acc在同一时期增加??

请忽略过度拟合的问题。

这是我的data_generator:

def data_generator(data, labels, batch_size, input_dims, [...]):
     batch_data = np.empty(shape = (batch_size, input_dims[0], input_dims[1], 3))
     batch_labels = np.empty(shape = (batch_size, input_dims[0], input_dims[1], num_classes))
    if shuffle:
        indices = generate_shuffled_indices(len(data), batch_size)
    else:
        indices = generate_indices(len(data), batch_size)
    [...]
    While True:
        for index, image in enumerate(batch_data_pil):
            batch_data[index] = np.asarray(image, dtype = np.uint8)

    yield batch_data, batch_labels

这是我的混淆矩阵计算:

def visualizeConfMatrix_2(X_val, Y_val, [...]):
    rnd_idx = np.random.randint(0, len(Y_val), maxData)
    X_val_red = np.ndarray([maxData, imageHeight, imageWidth, 3])
    Y_val_red = np.ndarray([maxData, imageHeight, imageWidth, 1])
    for i in range(0, len(rnd_idx)):
        X_val_red[i] = X_val[i, :, :, :]
        Y_val_red[i] = Y_val[i, :, :, :]
    softmax_output = model.predict(X_val_red, batch_size = 1)
    output = softmax_output.argmax(axis = -1).reshape(-1, 1)
    label_images = Y_val_red.squeeze().reshape(-1, 1)  

    cnf_mat = confusion_matrix(label_images, output)
    cnf_mat = cnf_mat.astype('float') / cnf_mat.sum(axis = 1)[:, np.newaxis]

    plt.figure(figsize = (35, 25))
    [...]

0 个答案:

没有答案