Какая модель обучения глубокому обучению для раздвижной головоломки? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь построить модель для обучения нейронной сети с глубоким обучением на основе головоломки-игры на языке Python и хотел узнать, какую модель лучше всего построить с помощью тензорного потока и почему?Какие слои мне нужно использовать?Какие значения для значений фильтра, kernel_size и других аргументов и что они на самом деле означают в моем случае?Пожалуйста, имейте в виду, что для меня это первая попытка работы с машинным обучением, и есть много слов, которые я не совсем правильно понимаю:)

Я уже создал часть, генерирующую данные, ипервая модель со слоями Conv2D, Activation и Dense (которая пытается получить точность более 0,22), но я также получаю некоторые ошибки с отрицательными размерами при добавлении большего количества слоев Conv2D.Пазл с раздвижной игрой, о котором я говорю, представляет собой сетку NxM, содержащую цвета (здесь мы используем только 2 цвета), и цель состоит в том, чтобы сместить строки и столбцы, чтобы все одинаковые плитки были смежными.Сдвиг выполняется с помощью клавиши перемещения, которая указывает направление сдвига для данного столбца или строки.

Вот изображение игры: https://www.youtube.com/watch?v=pCwELYqLAGg

Для генерации тренировкиНа данных я построил небольшую реализацию игры и для заданных N и M я могу сгенерировать случайное решенное состояние со случайным количеством плиток каждого цвета.После этого я перетасовываю сетку 10 раз (может быть, это слишком много) и получаю путь к успеху.Как только я получаю путь к успеху, я связываю каждое состояние сетки с его ключом перемещения в следующее состояние (то есть каждый раз ближе к решенному состоянию).Это повторяется много раз для генерации фактического набора данных тренировки.Затем сетки (элементы) и клавиши перемещения (метки) разделяются, и на них запускается модель.

Если есть лучший способ обучения nn (измените метод генерирования данных, измените фактический ввод данных), пожалуйста, дайте мне знать, что вы думаете.

Так, например, вот фактическая модель, которую я построил из учебных пособий, найденных на YouTube и других веб-сайтах, которые в основном имели дело с обработкой изображений и категоризацией между классами, поэтому я ужеЗнайте, что это не очень хороший подход к проблеме:

Настройка переменных

input_shape = (-1, height, width, 1) # height and width of grid playground
outputl = len(moves) # number of different moves, the output must be one of these

epoch_nb = 10
batch_size = 32

train_data_gen = data_generator(10000)
eval_data_gen = data_generator(200)

X = [] # feature set
y = [] # label set

Настройка тренировочных массивов

for _set in train_data_gen : 

  for feature, label in _set :
     X.append(feature)
     y.append(label)

X = np.array(X).reshape(*input_shape)
y = to_categorical(y)

Построение модели

model = Sequential()
model.add(Conv2D(64, (3,3), input_shape=input_shape[1:], activation='relu'))
model.add(Activation('relu'))

# this part triggers the negative dimension ValueError
# model.add(Conv2D(64, (3,3), input_shape=input_shape[1:], activation='relu'))

model.add(Conv2D(128, kernel_size=(3,3), activation='relu'))
model.add(Flatten())
model.add(Dense(128, activation='tanh'))
model.add(Dropout(0.5))
model.add(Dense(outputl, activation='softmax'))

Запустите его

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X, y, batch_size=batch_size, validation_split=0.1, epochs=epoch_nb)

А вот вывод:

Train on 93465 samples, validate on 10385 samples
Epoch 1/10
93465/93465 [==============================] - 10s 110us/sample - loss: 2.8523 - accuracy: 0.1491 - val_loss: 2.7131 - val_accuracy: 0.2074
Epoch 2/10
93465/93465 [==============================] - 10s 110us/sample - loss: 2.7095 - accuracy: 0.2078 - val_loss: 2.6579 - val_accuracy: 0.2203
...
...
Epoch 9/10
93465/93465 [==============================] - 10s 107us/sample - loss: 2.5634 - accuracy: 0.2466 - val_loss: 2.6467 - val_accuracy: 0.2235
Epoch 10/10
93465/93465 [==============================] - 10s 111us/sample - loss: 2.5504 - accuracy: 0.2500 - val_loss: 2.6484 - val_accuracy: 0.2216

Если вам нужны более подробные данные о тренировках, например, как это делается в деталях и т. Д., Я могу объяснить более подробно.

Заранее спасибо, что нашли время, чтобы помочь мне;)

...