python - 如何改进我的CNN?高且恒定的验证错误

标签 python tensorflow regression conv-neural-network

我正在研究一个问题,用于根据奶牛的图像预测奶牛的肥胖程度。
我应用了 CNN 来估计介于 0-5 之间的值(我拥有的数据集仅包含介于 2.25 和 4 之间的值)
我使用了 4 个 CNN 层和 3 个隐藏层。

我实际上有两个问题:
1/我得到了 0.05 的训练误差,但是在 3-5 个 epoch 之后,验证误差仍然保持在 0.33 左右。
2/我的神经网络预测的值在 2.9 到 3.3 之间,与数据集范围相比太窄了。正常吗?

我怎样才能改进我的模型?

model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(512, 424,1)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Flatten(input_shape=(512, 424)),
    tf.keras.layers.Dense(256, activation=tf.nn.relu),
    tf.keras.layers.Dense(128, activation=tf.nn.relu),
    tf.keras.layers.Dense(64, activation=tf.nn.relu),
    tf.keras.layers.Dense(1, activation='linear')
])

学习曲线:

Learning Curve

预言:

Prediction

最佳答案

这似乎是过度拟合的情况。你可以

  • Shuffle Data ,通过使用 shuffle=Truecnn_model.fit .代码如下所示:
    history = cnn_model.fit(x = X_train_reshaped, y = y_train, batch_size = 512, epochs = epochs, callbacks=[callback], verbose = 1, validation_data = (X_test_reshaped, y_test), validation_steps = 10, steps_per_epoch=steps_per_epoch, shuffle = True)
  • 使用 Early Stopping .代码如下所示
    callback = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=15)
  • 使用正则化。正则化代码如下所示(您也可以尝试 l1 正则化或 l1_l2 正则化):
  • from tensorflow.keras.regularizers import l2Regularizer = l2(0.001)cnn_model.add(Conv2D(64,3, 3, input_shape = (28,28,1), activation='relu', data_format='channels_last', activity_regularizer=Regularizer, kernel_regularizer=Regularizer))cnn_model.add(Dense(units = 10, activation = 'sigmoid', activity_regularizer=Regularizer, kernel_regularizer=Regularizer))
  • 您可以尝试使用 BatchNormalization .
  • 使用 ImageDataGenerator 执行图像数据增强.引用 this link有关更多信息。
  • 如果像素不是 Normalized ,将像素值除以 255也有帮助。
  • 最后,如果仍然没有变化,您可以尝试使用 Pre-Trained Models喜欢 ResNetVGG Net等。
  • 关于python - 如何改进我的CNN?高且恒定的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57061266/

    相关文章:

    python - tensorflow 分桶 : Pad with a sequence

    python-2.7 - 为什么 `tf.constant_initializer`不取常数张量?

    python - 线性回归中的正规方程返回 theta 系数为 'NaN'

    python - 将日转换为日期

    Python:如何将文本目录读入列表

    python - Scikit Learn 多标签分类 : ValueError: You appear to be using a legacy multi-label data representation

    python - 在 Pandas 数据框列的列表中搜索,错误

    tensorflow - 如何停止 tensorflow 中张量某些条目的梯度

    c++ - 最小二乘中位数稳健回归 C++

    r - 从 R 中的多元回归中绘制 "regression line"