二进制分类,预测为0

时间:2018-03-12 09:28:09

标签: python tensorflow conv-neural-network tflearn

我正在训练创建CNN以播放几何体冲刺。我使用AlexNet,稍微修改一下,产生-1到1之间的输出。

输出时> 0那么它应该跳。 当输出< 0然后它什么都不做。

我的训练数据是80x60灰度图像,其值为-1或1,表示在此帧应该做什么。 我有7700张图片。

(1是跳跃)(-1是什么都不做)

我的AlexNet:

    network = input_data(shape=[None, width, height, 1], name='input')
    network = conv_2d(network, 96, 11, strides=4, activation='relu')
    network = max_pool_2d(network, 3, strides=2)
    network = local_response_normalization(network)
    network = conv_2d(network, 256, 5, activation='relu')
    network = max_pool_2d(network, 3, strides=2)
    network = local_response_normalization(network)
    network = conv_2d(network, 384, 3, activation='relu')
    network = conv_2d(network, 384, 3, activation='relu')
    network = conv_2d(network, 256, 3, activation='relu')
    network = max_pool_2d(network, 3, strides=2)
    network = local_response_normalization(network)
    network = fully_connected(network, 4096, activation='tanh')
    network = dropout(network, 0.5)
    network = fully_connected(network, 4096, activation='tanh')
    network = dropout(network, 0.5)
    network = fully_connected(network, output, activation='sigmoid')
    network = regression(network, optimizer='adam', 
            loss='binary_crossentropy',
            learning_rate=lr, name='targets')
    model = tflearn.DNN(network, checkpoint_path='model_alexnet',
                        max_checkpoints=1, tensorboard_verbose=2, 
    tensorboard_dir='log')

如果我想学习CNN,它会一直预测所有输入的0左右。

我该怎么办?

我想预测每个帧1或-1。

我知道sigmoid不能达到1或-1,所以我将它移动0.001到0.999和-0.999,但它仍然不起作用。

修改

数据是平衡的,但随机播放。 相同数量的图像用于跳跃而不是跳跃。

此外,我尝试使用不平衡数据,但它以所有图像的不同数字结束。

1 个答案:

答案 0 :(得分:0)

最后,我做到了。

sigmoid函数从0到1,所以我不能使用从-1到1的y vectos。 然后我必须将学习率从1e-3降低到1e-6。 另外,我使用mean_square错误而不是binary_crossentropy。 这一切都解决了我的问题。