二分类,预测为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。
这一切都解决了我的问题。
我正在训练创建 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。 这一切都解决了我的问题。