我正在训练创建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,但它仍然不起作用。
修改
数据是平衡的,但随机播放。 相同数量的图像用于跳跃而不是跳跃。
此外,我尝试使用不平衡数据,但它以所有图像的不同数字结束。
答案 0 :(得分:0)
最后,我做到了。
sigmoid函数从0到1,所以我不能使用从-1到1的y vectos。 然后我必须将学习率从1e-3降低到1e-6。 另外,我使用mean_square错误而不是binary_crossentropy。 这一切都解决了我的问题。