【问题标题】:my model's Training/Validation accuracy behave strange我的模型的训练/验证准确性表现奇怪
【发布时间】:2019-07-22 14:16:19
【问题描述】:

我是 ML 新手,我正在尝试为一些图像拟合一个模型来进行二元分类。我为这两个类别中的每一个类别提供了一个包含 550 个图像的数据集,并且我使用每个类别的 100 个图像进行验证.我对我的数据和张量板使用增强来可视化准确度和损失。我的损失函数是'binary_crossentropy',我使用'rmsprop'作为优化器。我的图像我在这里写了我的代码。问题是我的准确度仍然在49到52之间前 3 个时期,上升到 95% 到第 5 个时期,但在第 8 个时期回落到 50%,这种上升和下降也发生在下一个时期。我还提供了一些从 tensorboard 到第 8 个时期的图像。我使用了完全相同的代码kaggle 猫和狗分类,它的准确率超过 86% (它们不是,但它们非常相似)。如果有人能回答我该怎么做,我将不胜感激。

https://i.imgur.com/jLJwnWN.png

https://i.imgur.com/94odStK.png

https://i.imgur.com/xUE9K4a.png

https://i.imgur.com/gGy3hO7.png

我尝试添加和删除一些图层,但没有成功

我试图改变批量大小,但我认为这并不重要,但仍然会发生同样的事情。

我也尝试更改输入尺寸。我的图像实际上是 720*500,但我在这里尝试了不同的输入。它不起作用:

  model = Sequential()
  model.add(Conv2D(32, (3, 3),input_shape=(300,300,3)))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  model.add(Conv2D(32, (3, 3)))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  model.add(Conv2D(64, (3, 3)))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  model.add(Flatten()) 
  model.add(Dense(64))
  model.add(Activation('relu'))
  model.add(Dropout(0.5))
  model.add(Dense(1))
  model.add(Activation('sigmoid'))
  model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
  batch_size = 10
  train_datagen = ImageDataGenerator(
          rescale=1./255,
          shear_range=0.2,
          zoom_range=0.2,
          horizontal_flip=True)

  test_datagen = ImageDataGenerator(rescale=1./255)

  train_generator = 
           train_datagen.flow_from_directory('castData/train-set', 
           batch_size=batch_size,
           class_mode='binary') 

  validation_generator = test_datagen.flow_from_directory(,
          target_size=(300, 300),
          batch_size=batch_size,
          class_mode='binary')

   model.fit_generator(
          train_generator,
          steps_per_epoch=1075 ,
          epochs=50,
          validation_data=validation_generator,validation_steps=200,
          callbacks=[tensorboard_cb])

【问题讨论】:

    标签: python machine-learning keras neural-network conv-neural-network


    【解决方案1】:

    确实很奇怪的行为。

    我不会使用展平层,而是使用 GlobalAveragePooling2D 或 GlobalMaxPooling2D

    from keras.layers import GlobalAveragePooling2D
    model = Sequential()
    model.add(Conv2D(32, (3, 3),input_shape=(300,300,3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(32, (3, 3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(64, (3, 3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(GlobalAveragePooling2D()) 
    model.add(Dense(64))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    

    如果这不起作用,请尝试降低学习率

    from keras.optimizers import RMSprop
    model.compile(loss='binary_crossentropy',optimizer=RMSprop(lr=0.0001),metrics=['accuracy'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2023-03-24
      • 2018-04-03
      • 2021-07-30
      • 1970-01-01
      • 2019-01-30
      • 2020-08-08
      相关资源
      最近更新 更多