二分类,预测为0

Binary classification, prediction is 0

我正在训练创建 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,但还是不行

编辑:

数据平衡,但打乱了顺序。 跳跃和不跳跃的图像数量相同。

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

我终于做到了

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