我正在尝试构建一个CNN以在线玩游戏。这个游戏是精确的:
https://www.gameeapp.com/game-bot/ibBTDViUP
我已经收集了图像和每张图像的标签。这些标签告诉网络按空格键(输出1)或不执行任何操作(输出0)。
我正在使用Keras训练网络,像这样:
history = model.fit_generator(
train_generator,
steps_per_epoch=2000 // batch_size,
epochs=3,
validation_data=validation_generator,
validation_steps=800 // batch_size)
网络看起来像这样:
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(275, 208, 1)))
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(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'])
问题是。大多数情况下,即使图像与游戏图像完全无关,网络最终仍总是输出1或始终为零。
我是否以正确的方式为这个问题建模?
我该如何为网络确定出“不做任何事情”的最佳方法。
如果问题不清楚,请让我知道,谢谢!
答案 0 :(得分:1)
您想进行二进制图像分类(binary:is-not),我认为您的网络看起来不错。 Binary Image Classification with CNN - best practices for choosing "negative" dataset?中的内容是训练二进制图像分类网络的一般提示。 https://medium.com/@kylepob61392/airplane-image-classification-using-a-keras-cnn-22be506fdb53中提供了有关在keras中设置图像分类网络的完整指南。我不确定训练是否可以像https://medium.com/@kylepob61392/airplane-image-classification-using-a-keras-cnn-22be506fdb53
中那样使用普通的model.fit()