Модель TFLearn больше не учится - PullRequest
0 голосов
/ 22 января 2020

Введение

Привет, я пытаюсь создать CNN, способный играть в Forza Horizon 3. Вначале я строго следовал инструкциям, предоставленным Python Plays GTAV от sentdex. * Серия 1004 *. Теперь я отдаляюсь от него, кроме эля xnet, который он использует. Мне удалось заставить работать несколько моделей, которые хорошо учатся и играют, но сейчас я пытаюсь вывести их на следующий уровень. Я создал намного больший набор данных с другим разрешением.

Задача

Когда я впервые попробовал создать модель для нового набора данных, я позволил ей тренироваться в течение 9 часов (намного дольше). чем предыдущий), но точность не увеличилась, кроме нормальных колебаний, и потери не уменьшились, кроме как в начале. Теперь первая модель не училась из-за ошибки, а вторая - только через 1,45 часа, как вы можете видеть на картинке ниже. К сожалению, я удалил модель и журналы.

enter image description here

Решения

Это было несколько дней go, и я попробовал разные вещи, чтобы это исправить. Сначала я не смог повторить обучение модели через некоторое время, что было бы неплохо.

Причина, по которой я держал эль xnet, заключалась в том, что я не могу создать такой хороший CNN, поэтому я хотел бы оставить его хотя бы в качестве основы. Мои подходы к исправлению, ни один из них не увенчался успехом:

  • Увеличение количества фильтров в слоях conv_2d.
  • Увеличение количества единиц в слоях полностью_связанных.
  • Комбинация двух вышеупомянутых.
  • Меньший набор данных (меньше, чем последний рабочий)
  • Изменение скорости обучения в пять раз (вероятно, не было хорошей идеей)
  • Уменьшить высоту изображения. Правое - это работающее разрешение, а левое - новое (больше пикселей по всем). Кстати не масштабированием, а обрезанием черных частей. enter image description here

Я сделал все это, потому что я думаю, что мой эль 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
...