代码之家  ›  专栏  ›  技术社区  ›  WilsonPena Sil Kucz

机器学习-建立CNN模型,以确定图像是不是什么东西

  •  0
  • WilsonPena Sil Kucz  · 技术社区  · 8 年前

    我正试图建立一个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或总是零,即使图像完全与游戏图像无关。

    我是否以正确的方式模拟这个问题?

    我如何才能使网络能够识别出“不做”任何事情的最佳方式。

    如果问题不清楚请告诉我,并提前感谢!

    1 回复  |  直到 8 年前
        1
  •  1
  •   ralf htp    8 年前

    你想做二值图像分类(binary:is-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 是在喀拉什建立图像分类网络的完整指南。我不确定培训是否可能用普通的 model.fit() 就像在 https://medium.com/@kylepob61392/airplane-image-classification-using-a-keras-cnn-22be506fdb53