【发布时间】:2019-01-23 06:59:10
【问题描述】:
我正在尝试建立一个模型来检测输入图像是否是某物(例如,狗与否)。我正在用 keras 编码,但准确性很差。你有什么想法来正确调整这个吗?或者我应该使用 keras 以外的其他工具来解决一类分类问题?非常感谢您。
这是我到目前为止编写的代码和输出。
train_dir = './path/to/train_dir'
vali_dir = './path/to/validation_dir'
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=False)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary')
vali_datagen = ImageDataGenerator(rescale=1./255)
vali_generator = vali_datagen.flow_from_directory(
vali_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary')
model = Sequential()
model.add(Conv2D(16, 3, activation='relu', input_shape=(150, 150, 3)))
model.add(MaxPool2D(pool_size=2))
model.add(Conv2D(32, 3, activation='relu'))
model.add(MaxPool2D(pool_size=2))
model.add(Conv2D(64, 3, activation='relu'))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(
loss='binary_crossentropy',
optimizer=RMSprop(lr=0.003),
metrics=['acc']
)
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=8,
verbose=2,
validation_data=vali_generator,
validation_steps=20
)
输出:
Found 3379 images belonging to 2 classes.
Found 607 images belonging to 2 classes.
Epoch 1/8
- 136s - loss: 7.6617 - acc: 0.5158 - val_loss: 10.5220 - val_acc: 0.3400
Epoch 2/8
- 124s - loss: 7.7837 - acc: 0.5118 - val_loss: 10.5220 - val_acc: 0.3400
.......and this is just terrible.
【问题讨论】:
-
您似乎只训练了两个时期,所以我不希望它在那里有更高的准确性。其他需要考虑的事情是:您是否尝试过使用超参数?另外,您是否分析过您的数据(狗/非狗图片的不平衡分布)?
-
@DocDriven 感谢您的评论。抱歉,实际上我已经训练了 8 个 epoch,但其余的和前两个一样糟糕,所以我省略了它。似乎没有不平衡。我会尝试超参数。
-
这不是分类问题,而是对象检测问题。有大量关于如何在线实现这一点的文档。希望对您有所帮助。
标签: python tensorflow image-processing keras classification