嗨,我正在尝试创建一个能够播放《极限竞速:地平线3》的CNN。一开始,我强烈遵循senddex的Python Plays GTAV系列提供的教程。现在,我正在逐渐摆脱它,除了他使用的alexnet。我能够使一些模型正常工作,这些模型学习和玩得很好,但现在我正尝试将其提高到一个新的水平。我创建了一个更大的具有不同分辨率的数据集。
我第一次尝试在新数据集上建立模型时,我让它训练了9个小时(比以前更长),但除了正常波动之外,精度没有增加,除了在正常情况下,损耗没有减少。开始。现在,第一个模型由于错误而无法学习,但是第二个模型却仅在1.45小时后才学习,如下图所示。可悲的是,我删除了模型和日志。
那是几天前的事,我尝试了不同的方法来解决。首先,过了一段时间,我无法复制模型学习。
我保留alexnet的原因是我无法创建如此出色的CNN,因此我希望至少保留它作为基础。我的修复方法,没有一个是成功的:
我完成了所有这些操作,因为我认为我的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