python - 我的模型的训练/验证准确性表现奇怪
问题描述
我认为我的问题来自我的数据,因为每个类中的图像非常不同,但在同一类中,有时我不能说两个图像是否不同(它们不是但它们非常相似)。如果有人能回答我该怎么做,我将不胜感激。
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])
解决方案
确实奇怪的行为。
我不会使用展平层,而是使用 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'])
推荐阅读
- r - 关于使用 lm() 函数的错误(在 R 中)
- java - com.sparsh.conferencedemo.controllers.SessionController 中的 sessionRepository 需要一个找不到的 bean
- reactjs - 在我的网络中,当我多次单击“保存”按钮时,它会保存很多。有什么解决办法吗?作为 React Js
- axios - axios:如何在axios中获取数据
- css - 我的引导卡隐藏在侧栏下
- php - laravel,mysql事务一旦回滚就不起作用
- elasticsearch - 包含字符串字段的对象上的嵌套术语聚合
- c# - 可为空的模板字段
- c# - 使用 nettcpbinding 时出现 WCF 通信异常
- javascript - 用于 Linux 挂载路径的正则表达式以验证用户在 java 脚本中输入的路径值