Введение
Привет, я пытаюсь создать CNN, способный играть в Forza Horizon 3. Вначале я строго следовал инструкциям, предоставленным Python Plays GTAV от sentdex. * Серия 1004 *. Теперь я отдаляюсь от него, кроме эля xnet, который он использует. Мне удалось заставить работать несколько моделей, которые хорошо учатся и играют, но сейчас я пытаюсь вывести их на следующий уровень. Я создал намного больший набор данных с другим разрешением.
Задача
Когда я впервые попробовал создать модель для нового набора данных, я позволил ей тренироваться в течение 9 часов (намного дольше). чем предыдущий), но точность не увеличилась, кроме нормальных колебаний, и потери не уменьшились, кроме как в начале. Теперь первая модель не училась из-за ошибки, а вторая - только через 1,45 часа, как вы можете видеть на картинке ниже. К сожалению, я удалил модель и журналы.
Решения
Это было несколько дней go, и я попробовал разные вещи, чтобы это исправить. Сначала я не смог повторить обучение модели через некоторое время, что было бы неплохо.
Причина, по которой я держал эль xnet, заключалась в том, что я не могу создать такой хороший CNN, поэтому я хотел бы оставить его хотя бы в качестве основы. Мои подходы к исправлению, ни один из них не увенчался успехом:
- Увеличение количества фильтров в слоях conv_2d.
- Увеличение количества единиц в слоях полностью_связанных.
- Комбинация двух вышеупомянутых.
- Меньший набор данных (меньше, чем последний рабочий)
- Изменение скорости обучения в пять раз (вероятно, не было хорошей идеей)
- Уменьшить высоту изображения. Правое - это работающее разрешение, а левое - новое (больше пикселей по всем). Кстати не масштабированием, а обрезанием черных частей.
Я сделал все это, потому что я думаю, что мой эль xnet не может обрабатывать больше разрешений, чем было сделано. У меня была еще одна идея - добавить новые слои. А сколько? Который из? а где?
Я благодарен за любые предложения или идеи.
Код
# 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