Я пытаюсь построить модель для обучения нейронной сети с глубоким обучением на основе головоломки-игры на языке 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
Если вам нужны более подробные данные о тренировках, например, как это делается в деталях и т. Д., Я могу объяснить более подробно.
Заранее спасибо, что нашли время, чтобы помочь мне;)