【问题标题】:Validation accuracy always constant after 2 epochs验证精度在 2 个 epoch 后始终保持不变
【发布时间】:2021-05-14 02:35:41
【问题描述】:

我有一个多类问题 (n=3),我的验证准确性总是卡住。可能是因为我没有足够的样本(每班只有 32 个)。这些图像包含 3 个我需要分类的不同对象,它们是从相同距离以 90° 视角拍摄的,它们位于桌子上。我希望由于任务简单,这么多照片就足够了,但也许我确实需要更多。我会简单地移动对象以创建更多图像还是没用?

我的模特:

import random
def make_model(input_shape, num_classes):
  with tf.device('/device:GPU:0'):
      inputs = keras.Input(shape=input_shape)
      # Image augmentation block
      x = data_augmentation(inputs)
      x = inputs
      # Entry block
      x = layers.experimental.preprocessing.Rescaling(1.0 / 255)(x)
      #x = x* random.uniform(0, 2)
      x = layers.Conv2D(32, 3, strides=2, padding="same")(x)
      x = layers.BatchNormalization()(x)
      x = layers.Activation("relu")(x)

      x = layers.Conv2D(64, 3, padding="same")(x)
      x = layers.BatchNormalization()(x)
      x = layers.Activation("relu")(x)

      previous_block_activation = x  # Set aside residual

      for size in [128, 256, 512, 728]:
          x = layers.Activation("relu")(x)
          x = layers.SeparableConv2D(size, 3, padding="same")(x)
          x = layers.BatchNormalization()(x)

          x = layers.Activation("relu")(x)
          x = layers.SeparableConv2D(size, 3, padding="same")(x)
          x = layers.BatchNormalization()(x)

          x = layers.MaxPooling2D(3, strides=2, padding="same")(x)

          # Project residual
          residual = layers.Conv2D(size, 1, strides=2, padding="same")(
              previous_block_activation
          )
          x = layers.add([x, residual])  # Add back residual
          previous_block_activation = x  # Set aside next residual

      x = layers.SeparableConv2D(1024, 3, padding="same")(x)
      x = layers.BatchNormalization()(x)
      x = layers.Activation("relu")(x)

      x = layers.GlobalAveragePooling2D()(x)
     
      activation = "softmax"
      units = num_classes

      x = layers.Dropout(0.2)(x)
      outputs = layers.Dense(units=3, activation=activation)(x)
      return keras.Model(inputs, outputs)


model = make_model(input_shape=image_size + (3,), num_classes=3)
#keras.utils.plot_model(model, show_shapes=True)

我的训练:

epochs = 10

callbacks = [
    keras.callbacks.ModelCheckpoint("save_at_{epoch}.h5"),
]
model.compile(
    optimizer=keras.optimizers.Adam(1e-5),
    loss="categorical_crossentropy",
    metrics=["accuracy"],
)


model.fit(
    train_ds, epochs=epochs, callbacks=callbacks, validation_data=val_ds,
)

Training progress

【问题讨论】:

    标签: tensorflow keras deep-learning conv-neural-network multiclass-classification


    【解决方案1】:

    这个过程显然是过拟合的,你在训练集上达到了 0.97 的准确率。

    我认为你的图片太少了,我建议你如下:

    • 让网络更小
    • 如果您有兴趣解决问题而不是使用神经网络,请尝试使用 SIFT 等特征提取器和其他分类算法。

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 2020-05-01
      • 2019-05-10
      • 2021-12-31
      • 2018-12-10
      • 2019-08-14
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      相关资源
      最近更新 更多