Модель tensorflow не может воспринять список данных

Рейтинг: 0Ответов: 1Опубликовано: 26.02.2023

Создавал тут нейронную сеть для игры 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)

Ответы

▲ 0Принят

Нужно изменить данный кусочек кода:

NE.model.fit(matr1, [direction], epochs=1)