Нейронная сеть для прогнозирования шахматных ходов не может получить соответствующий результатPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Нейронная сеть для прогнозирования шахматных ходов не может получить соответствующий результат

Сообщение Anonymous »

Я работаю над нейронной сетью для прогнозирования шахматных ходов на основе набора данных из 1 200 000 шахматных позиций. Несмотря на большой набор данных, моя модель не обучается должным образом, достигая максимальной точности всего 0,0104. Выходные данные модели не совпадают с ожидаемыми массивами с горячим кодированием размером 128, которые представляют собой действительные шахматные ходы. Я проверил свои обучающие данные и входные тензоры, но производительность нейронной сети остается неоптимальной. Я подозреваю, что может возникнуть проблема с архитектурой моей нейронной сети или процессом обучения.
Детали данных и модели
Входные тензоры: я использую 3D-тензоры 8x8x12 для представления состояния шахматная доска с горячим кодированием нулями и единицами.
Выходные тензоры: я использую одномерные массивы размером 128, также с горячим кодированием, где две единицы представляют собой переход из одной позиции в другую.Набор данных и предварительная обработка
Для набора обучающих данных я использовал набор данных Kaggle CSV из 20 000 игр. Я перебирал каждую игру, генерируя тензорный поезд и данные результатов для каждой последовательной последовательности ходов, в результате чего в конце получилось 1 200 000 точек перемещения пары данных. Я проверил свои данные обучения с помощью тестовых примеров, гарантируя их правильность.
Постановка проблемы
Несмотря на эти приготовления, моя нейронная сеть достигает очень низкой точности во время обучения. Хотя я ожидал некоторых проблем при прямом предсказании шахматных ходов, я в первую очередь стремился к тому, чтобы нейронная сеть выучила основные шахматные правила из набора данных. Мой план состоял в том, чтобы использовать постобработку, чтобы отфильтровать наиболее вероятные правильные ходы. Однако производительность модели намного ниже ожиданий.
Вопросы
Архитектура модели: есть ли какие-либо очевидные проблемы с архитектурой моей нейронной сети, которые могли бы привести к такой низкой производительности?
Процесс обучения: Могут ли возникнуть какие-либо проблемы с обучением модели, которые могли бы объяснить эти результаты?
Предложения по улучшению: Есть ли предложения по улучшению производительности модели, чтобы хотя бы выучить основные шахматные правила и обеспечить достоверные результаты ходов?< /p>
#model class part of code, and dataset fetch game part
class ChessModel:
def __init__(self):
self.model = self.create_model()

def create_model(self):
model = tf.keras.models.Sequential([
# Convolutional Block 1
tf.keras.layers.Conv2D(64, (3, 3), activation='relu', input_shape=(8, 8, 12)),
tf.keras.layers.BatchNormalization(),

# Convolutional Block 2
tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),
tf.keras.layers.BatchNormalization(),

# Convolutional Block 3
tf.keras.layers.Conv2D(256, (3, 3), activation='relu'),
tf.keras.layers.BatchNormalization(),

# Global Pooling Layer
tf.keras.layers.GlobalAveragePooling2D(),

# Dense Block
tf.keras.layers.Dense(1024, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(128, activation='softmax')
])

model.summary()

model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])

return model

def train_model(self, X_train, y_train, X_val, y_val):
self.model.fit(X_train, y_train, epochs=10, batch_size=128, validation_data=(X_val, y_val))

def save_model(self, model_name):
model_dir = r'C:\Users\schul\Desktop\Chess Engine Python\Neural_Net_Models'
if not os.path.exists(model_dir):
os.makedirs(model_dir)
model_path = os.path.join(model_dir, '{}.keras'.format(model_name))
try:
self.model.save(model_path)
print(f"Model saved successfully at {model_path}")
except Exception as e:
print(f"An error occurred while saving the model: {e}")

def process_games(self):
all_states = []
for index, row in self.games_df.iterrows():
moves_san = row['moves']

board = chess.Board()

move_list = moves_san.split()
uci_moves = []

for move_san in move_list:
try:
move = board.parse_san(move_san)
uci_move = move.uci()
uci_moves.append(uci_move)
board.push(move)
except ValueError:
continue

uci_moves_str = " ".join(uci_moves)

states = self.split_conversion_one_hot_127_array(uci_moves_str)

if states is not None: # Check states not none by prs.
all_states.extend(states)

self.all_current_states = []
self.all_next_states = []

for state in all_states:
if state is not None:
current_state, next_state = state
self.all_current_states.append(current_state)
self.all_next_states.append(next_state)

self.all_current_states = np.array(self.all_current_states)
self.all_next_states = np.array(self.all_next_states)

def split_data(self):
X_train, X_val, y_train, y_val = train_test_split(self.all_current_states, self.all_next_states, test_size=0.2, random_state=42)

print(len(self.all_current_states))
print(len(self.all_next_states))

print("x train e.g. length sizes: ")
print(len(X_train))
print(len(X_val))
print(len(y_train))
print(len(y_val))

return X_train, y_train, X_val, y_val



Подробнее здесь: https://stackoverflow.com/questions/786 ... ate-output
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Python Regex для анализа шахматных ходов
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Python Regex для анализа шахматных ходов
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Python Regex для анализа шахматных ходов
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Нейронная сеть C# MNIST увеличивает точность примерно до 20 %, а затем снова падает до 10 %.
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Нейронная сеть в R (ответ не генерируется)
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»