Модель tensorflow не может воспринять список данных
Создавал тут нейронную сеть для игры 2048 на python. В качестве входных данных идет матрица самой карты, а на выход клавиша на которую надо нажать(вверх, вправо и тд.) Была проблема с входными данными, получилось так то, что моя модель может получить список данных. Но возникла проблема при обработке входных данных. Они сами выглядят примерно так:
[[[0.0, 0.0, 0.0, 0.0],
[2.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 4.0, 0.0],
[0.0, 0.0, 2.0, 0.0]]]
Такая ошибка выходит:
File "C:\Users\User\Desktop\Kivy-2048-master\2048.py", line 261, in move
NE.model.fit(matr1, float(direction), epochs=1)
File "D:\Python\Python Versions\Python310\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler
raise e.with_traceback(filtered_tb) from None
File "D:\Python\Python Versions\Python310\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 909, in __getitem__
return self._dims[key]
IndexError: tuple index out of range
Основной действующий код:
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.core.window import Window
from kivy.uix.popup import Popup
from kivy.animation import Animation
import tensorflow as tf
import matplotlib as plt
from tensorflow import keras
import numpy as np
class NE():
def __init__(self):
self.l = ()
model = keras.Sequential([
keras.layers.Flatten(input_shape=(1, 4, 4)),
keras.layers.Dense(1024, activation='relu'),
keras.layers.Dense(4, activation='softmax')
])
model.compile(optimizer=tf.keras.optimizers.SGD(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.summary()
def tran(l):
g = []
for i in range(0, 4):
h = []
for k in range(0, 4):
h.append(float(l[i][k]))
g.append(h)
return [g]
def move(self, direction, matrix, trial=False):
#matrix - матрица поля ,
#direction - клавиша нажатия
changed = False
score = 0
shift_dir = (direction + 1) % 2
matr1 = tran(matrix)
print(matr1)
print(direction)
NE.model.fit(matr1, float(direction), epochs=1)
Источник: Stack Overflow на русском