Я пытаюсь внедрить Keras в первый раз (извините за тупой вопрос) в рамках более широкого проекта по созданию ИИ, который учится играть на соединении 4. Как часть этого, я передаю NN a 6* 7 сетка и выводит массив из 7 значений, дающий вероятности для каждого столбца в игре.Вот вывод метода Model.summary () для более подробной информации:
______________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 42) 0
_________________________________________________________________
dense (Dense) (None, 20) 860
_________________________________________________________________
dense_1 (Dense) (None, 20) 420
_________________________________________________________________
dense_2 (Dense) (None, 7) 147
=================================================================
Total params: 1,427
Trainable params: 1,427
Non-trainable params: 0
_________________________________________________________________
_________________________________________________________________
модель даст (на данный момент случайный) прогноз, когда я передам ей массивы массива формы (1, 6, 7), однако, когда я пытаюсь обучить модель с массивом формы (221, 6, 7) для данных и массивом формы (221, 7) для меток, я получаю эту ошибку:
ValueError: Ошибка при проверке цели: ожидается, что плотность_2 будет иметь форму (1,), но получен массив с формой (7,)
Это код, который я использую для обучения модели (какие выходы (221, 6, 7) и (221, 7)):
board_tensor = np.array(full_board_list)
print(board_tensor.shape)
label_tensor = np.array(full_label_list)
print(label_tensor.shape)
self.model.fit(board_tensor, label_tensor)
это код, который я использую для определения модели:
self.model = keras.Sequential([
keras.layers.Flatten(input_shape=(6, 7)),
keras.layers.Dense(20, activation=tf.nn.relu),
keras.layers.Dense(20, activation=tf.nn.relu),
keras.layers.Dense(7, activation=tf.nn.softmax)])
self.model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
(модельчасть объекта AI, чтобы его можно было сравнивать с другими типами объектов AI). Этот код успешно предсказывает пакет размером 1, сгенерированный из двухмерного списка, представляющего плату (он выводит (1, 6, 7)) и (1, 7)):
input_tensor = np.array(board.board)
input_tensor = np.expand_dims(input_tensor, 0)
print(input_tensor.shape)
probability_distribution = self.model.predict(input_tensor)
print(probability_distribution.shape)
Я понимаю, что ошибка, вероятно, связана с отсутствием пониманиямоя часть относительно того, что методы в Керасе ожидают, что будут даны;Итак, в качестве небольшого дополнения, есть ли у кого-нибудь хорошие, подробные учебные ресурсы, которые действительно помогут вам понять, что делает каждый метод (т.е. не просто сообщают вам, какой код вводить, чтобы сделать распознаватель изображений), который был бы понятенлюдям, новичкам в Keras и Tensorflow, вроде меня?
Заранее большое спасибо!