Я работаю над нейронной сетью для прогнозирования шахматных ходов на основе набора данных из 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
Нейронная сеть для прогнозирования шахматных ходов не может получить соответствующий результат ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Нейронная сеть C# MNIST увеличивает точность примерно до 20 %, а затем снова падает до 10 %.
Anonymous » » в форуме C# - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-