TFLearn模型不再学习

时间:2020-01-22 18:48:27

标签: python tensorflow tflearn

简介

嗨,我正在尝试创建一个能够播放《极限竞速:地平线3》的CNN。一开始,我强烈遵循senddex的Python Plays GTAV系列提供的教程。现在,我正在逐渐摆脱它,除了他使用的alexnet。我能够使一些模型正常工作,这些模型学习和玩得很好,但现在我正尝试将其提高到一个新的水平。我创建了一个更大的具有不同分辨率的数据集。

问题

我第一次尝试在新数据集上建立模型时,我让它训练了9个小时(比以前更长),但除了正常波动之外,精度没有增加,除了在正常情况下,损耗没有减少。开始。现在,第一个模型由于错误而无法学习,但是第二个模型却仅在1.45小时后才学习,如下图所示。可悲的是,我删除了模型和日志。

enter image description here

解决方案

那是几天前的事,我尝试了不同的方法来解决。首先,过了一段时间,我无法复制模型学习。

我保留alexnet的原因是我无法创建如此出色的CNN,因此我希望至少保留它作为基础。我的修复方法,没有一个是成功的:

  • 增加conv_2d层中的过滤器量。
  • 增加完全连接的层中的单元数。
  • 以上两种的结合。
  • 较小的数据集(小于上一个工作的数据集)
  • 将学习率改变了五倍(可能不是一个好主意)
  • 减小图像的高度。右边的是有效的分辨率,左边的是新的分辨率(全部像素更多)。顺便说一下,不是通过缩放,而是通过切除黑色部分。 enter image description here

我完成了所有这些操作,因为我认为我的alexnet无法处理比原定的分辨率更大的分辨率。我的另一个想法是添加新层。但是多少?哪一个?在哪里?

我很感谢任何建议或想法。

代码

# alexnet.py
import tflearn
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.estimator import regression
from tflearn.layers.normalization import local_response_normalization

def alexnet(width, height, lr):
    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, 3, activation='softmax')
    network = regression(network, optimizer='momentum',
                         loss='categorical_crossentropy',
                         learning_rate=lr, name='targets')

    tflearn.init_graph(num_cores=4,gpu_memory_fraction=0.8)

    model = tflearn.DNN(network, tensorboard_verbose=2, tensorboard_dir='../logs')

    return model

0 个答案:

没有答案