Ключевое слово
25 | 04 | 2025
Новости Библиотеки
Шахматы Онлайн
Welcome, Guest
Username: Password: Remember me

TOPIC: Практикум по нейронным сетям для шахмат №2

Практикум по нейронным сетям для шахмат №2 31 Март 2025 21:13 #61

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
... и сразу после компилляции модели вот это еще вставьте :

model.summary()

Чтобы видеть что там мы все таки обучаем

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 03:22 #62

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
Вот так правильно?
x_train = x
y_train = y
model = models.Sequential()
model.add(layers.Input(shape=(x_train.shape,))) # Указываем форму входа
model.add(layers.Dense(256, activation='sigmoid'))
model.add(layers.Dense(16, activation='sigmoid'))
model.add(layers.Dense(1, activation='sigmoid')) 
model.compile(loss='mse',
              optimizer='adam',
              metrics=['mae'])
model.summary()
model.fit(x_train, y_train, epochs=100)
model.save('/content/drive/MyDrive/Colab Notebooks/model_1.h5')
print('done saving at')

Прим.
У меня не определены layers и models
А если
model.add(Dense.Input(shape=(x_train.shape,))) # Указываем форму входа
то
AttributeError: type object 'Dense' has no attribute 'Input'

Сегодня не получится разобраться, - потом
Last Edit: 01 Апр 2025 03:33 by alexlaw.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 08:05 #63

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Так - правильно. Во всяком случае "правильно" с точки зрения нашей первоначальной гипотезы о том, что первый наш подход к сети будет таким, о котором мы договорились. Будет ли он финальным и "самым правильным" - вопрос второй.

layers лежит в tensorflow.keras
В принципе удобнее вообще сделать такой импорт :

from tensorflow.keras.layers import Input,Dense
и потом уже определить сеть как

model.add(Input(shape=(x_train.shape,))) # Указываем форму входа
model.add(Dense(256, activation='sigmoid'))
model.add(Dense(16, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))


А models лежит в

from tensorflow.keras import models

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 10:53 #64

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
Не удержался, попробовал. :)
В таком виде запустился :)
Warning: Spoiler! [ Click to expand ]

Посмотрим, что получится :)
Ну и сохранить обученную модель.
Как ее использовать в Делфи?
Наверное назрел этот вопрос.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 11:08 #65

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Да - запустите модель на какое-то большое количество эпох, мы с вами увидим после какой уже не нужно "скотину мучать" и где наступает предел обучения. Увидим ее точность (среднеарифметическую по всей эпохе).
Дальше предлагаю следующее : у вас там где-то я видел питоновский шахматный модуль? Можем сделать промежуточную проверку с файлом модели, как переходом из проекта в проект.
1. В новом проекте грузим обученную модель, и питоновский шахматный модуль получает от юзера позицию и генерит из нее все ходы ферзя (снова играет за белых).
2. Все полученные после этого позиции с ходом черных заносим в numpy массив X размером (кол-во ходов ферзя в позиции,192) предварительно создав его нулевым и заполнив единичками как ранее в файле с выборкой
3. Методом keras.model.evaluate(X) получим оценки всех этих ходов и выберем лучший. Так же можно эти оценки полученные от нейросети сравнить с идеальными оценками из эндшпильных таблиц. Чтоб понять налазит ли вообще эта модель на голову и чего от нее на практике ждать.
4. Ну а дальше уже действительно Делфи. Но там, правда, скучно, относительно долго и противно :-)

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 11:15 #66

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 111644
  • Thank you received: 2314
  • Karma: 112
booot76 wrote:
4. Ну а дальше уже действительно Делфи. Но там, правда, скучно, относительно долго и противно :)
Вообще, c++ намного лучше, но это я опять так :)
Тема учебная
Каждому - своё.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 13:14 #67

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Ну... смотря для чего лучше. Я не программист - когда-то в институте паскаль учил, вот и пригодилось для хобби. Но когда общался лично с авторами всеразличных движков от Стокфиша и Шреддера до Комодо и Лейлы, то сошлись все же на том, что в конечной реализации с точки зрения силы игры движка разница инструмента непринципиальна. Что лучше знаешь тем и рубишь. Один фиг 95%+ времени движок AVX2 инструкции крутит, а не откомпилированный в языке высокого уровня код.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 13:49 #68

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 111644
  • Thank you received: 2314
  • Karma: 112
booot76 wrote:
Один фиг 95%+ времени движок AVX2 инструкции крутит, а не откомпилированный в языке высокого уровня код.
Ну что они там крутят, это разработчики пусть объясняют
Но так или иначе, это реально инструкции процессора и результат работы компилятора.

И насколько мне известно, движки релизятся в разных вариантах для разных процессоров, SSE и т.д.

Надо качать для своего проца.

Что же касается языка, то это тут понятно оффтоп и холивар :)
Цель определяет средства
Каждому - своё.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 14:15 #69

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Ну я как разработчик четко вижу в профайлере какие процедуры и функции занимают больше всего процессорного времени при переборе в моем движке. Это как раз работа с матрицами (нейросетями). И эти процедуры пишутся не в С++ и не в Делфи, а в ассемблере. Они могут писаться прямо вместе с сишным или паскалевским кодом, но к нему отношения не имеют и транслируются в исполняемый код совершенно самостоятельно. Это отдельные, самостоятельные SIMD процедуры которые действительно могут быть написаны и под AVX2 и под SSE и под другие их типы,поддерживаемые конкретным процессором. Их задача матрицы складывать и перемножать. У меня в ранних версиях тоже была поддержка и SSE 4.2 и AVX512. Потом плюнул - оставил только AVX2. Сейчас ноут себе эппловский обновлю - добавлю еще под NEON и хорош.
Ну а холивары это на любителей :-) Ими пока еще ни одного лишнего пункта ЭЛО к силе движка прибавить никому не удавалось.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 14:24 #70

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 111644
  • Thank you received: 2314
  • Karma: 112
booot76 wrote:
И эти процедуры пишутся не в С++ и не в Делфи, а в ассемблере
Exactly

Отсюда и разные версии, например Воблы

AVX2 Intel (2013+) and AMD (2015+)
POPCNT
VNNI-512
VNNI-256
AVX-512
BMI2
64-bit

Есть язык и есть производительность.

Язык влияет на производительность написания и удобство оного.
А производительность на производительность исполнения.

Вот C++ удобнее в смысле написания :offtop:
Каждому - своё.
Last Edit: 01 Апр 2025 14:24 by Vladimirovich.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 14:54 #71

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
По поводу удобства, пожалуй, соглашусь. Если, конечно, его знать и уметь им пользоваться.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 14:59 #72

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 111644
  • Thank you received: 2314
  • Karma: 112
booot76 wrote:
По поводу удобства, пожалуй, соглашусь. Если, конечно, его знать и уметь им пользоваться.
Это с++ даже не самый удобный язык. Просто он компилируемый в бинарник.

Котлин или с# лучше и гораздо удобнее.
Но там уже байткод и совсем другая тема.
Каждому - своё.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 15:31 #73

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Ну,собственно, вопрос выбора инструмента оставим для дерзающих. Абы дерзали.

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 21:29 #74

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
200 эпох.
Несколько раз перезапускал, Гугл не давал завершить процесс
Warning: Spoiler! [ Click to expand ]

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 21:40 #75

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
Модель
Интересно оценить эту модель в действии :)

Практикум по нейронным сетям для шахмат №2 01 Апр 2025 21:53 #76

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
А неплохо выглядит! И как раз где-то уже в предел возможностей нашей сетки 256-16-1 уперлись. Среднее арифметическое ошибки 0,005 примерно. В районе 0,5% в диапазоне (0-1). Учитывая что в нашей схеме оценки позиции 1-(Rang/100) между соседними рангами 4% разницы (там только четные ранги в черном файле), то может вполне симпатично получиться :-). Пробуйте смело в питоне. Потом в Делфи перенесем.

Практикум по нейронным сетям для шахмат №2 02 Апр 2025 10:55 #77

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
Как сделать правильно?
Загрузил модель
Warning: Spoiler! [ Click to expand ]


Взял для пробы данные, но как получить от сети ответ?

dwg50.jpg

Практикум по нейронным сетям для шахмат №2 02 Апр 2025 12:18 #78

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
А ..., вроде так :)
Warning: Spoiler! [ Click to expand ]


dwg51.jpg


Позиция

dwg52.jpg


Строка - 65284
Last Edit: 02 Апр 2025 12:27 by alexlaw.

Практикум по нейронным сетям для шахмат №2 02 Апр 2025 13:01 #79

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
Сеть ответила - 0.56571287
Но это на порядок выше - mae

dwg53.jpg

Практикум по нейронным сетям для шахмат №2 02 Апр 2025 13:04 #80

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Ну как бы позиция 40-го ранга. Это в идеале соответствовало бы 1-(40:100)=0,6. Дало 0,5657. Многовато, но такие ранги как раз менее характерны для этого эедшпиля. Видим научилась сеть ничейные позиции в основном точно предсказывать :-)

Практикум по нейронным сетям для шахмат №2 02 Апр 2025 13:21 #81

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3







8/3Q4/4k3/8/8/2K5/8/8 b - - 0 1
Строка - 65276
Ответ сети - 0.05184881
Неплохо :)

Практикум по нейронным сетям для шахмат №2 02 Апр 2025 17:04 #82

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Да - тут хорошо научился чужих ферзей жрать.

Практикум по нейронным сетям для шахмат №2 02 Апр 2025 18:00 #83

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
Мне нравится Делфи, хотелось бы добавить модель и сеть туда и там исследовать

Практикум по нейронным сетям для шахмат №2 02 Апр 2025 20:15 #84

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Ну тогда завтра приступим. Набирайтесь терпения - с нуля это быстро сделать трудно. Я присмотрю :-)

Практикум по нейронным сетям для шахмат №2 03 Апр 2025 07:38 #85

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
Чисто ради спортивного интереса продолжил обучение сети.
Загрузил сохраненную модель и еще 200 эпох :)
Warning: Spoiler! [ Click to expand ]

Практикум по нейронным сетям для шахмат №2 03 Апр 2025 08:44 #86

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Там "больше" далеко не всегда значит "лучше". Есть такое понятие как "переобучение сети". К нам это не относится потому что мы подаем на сетку ВСЕ возможные данные, но в реальной жизни где обучаешь ее лишь по небольшой частице всех возможных вариантов очень важно , чтобы сетка более-менее корректно обобщала бы их и на те данные, которых в обучающей выборке не было. Ей же потом их предсказывать.

Практикум по нейронным сетям для шахмат №2 03 Апр 2025 08:44 #87

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
На 159 эпохе Гугл отрубился, поэтому не сохранил новую модель
Warning: Spoiler! [ Click to expand ]

Практикум по нейронным сетям для шахмат №2 03 Апр 2025 08:47 #88

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Думный дьяк
  • Posts: 297
  • Thank you received: 13
  • Karma: 3
booot76 wrote:
Там "больше" далеко не всегда значит "лучше".
Это чисто ради эсперемента.
Просто интересно, что будет ...
PS
И все же думаю добью Гугла и заставлю еще 200 эпох отработать :)

А вообще еще интересно узнать о NNUE.
Last Edit: 03 Апр 2025 08:53 by alexlaw.

Практикум по нейронным сетям для шахмат №2 03 Апр 2025 09:51 #89

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Да тут нервов никаких не хватит с этим гуглом :-). Я поэтому сразу все себе локально ставлю : вечер потратил, среду настроил и она всегда со мной на ноуте или рабочем компе.

"Переобучение" возникает когда на небольшой обучающей выборке сеть жестко настраивается на уже существующие данные. У нее же задача минимизировать лосс-функцию. Она ее и минимизирует. Может оказаться так, что столкнувшись с новыми данными , которых она никогда не видела и ради которых мы ее , собственно, и обучаем она выдаст очень большую ошибку. В идеале сеть после обучения должна видеть "усредненную картинку" , в которую и вписывать новые полученные данные. Для этого существуют разные методы и , может, позже поговорим.

NNUE это интересно, но это еще сложнее. Давайте сначала перенесем сетку в ДЕлфи, настроим как она есть, а уж потом на ней же потренируемся в NNUE играться. Если получится - там по хорошему нашу сетку изначально нужно обучать в специально ограничивающих гиперпараметрах. Чтобы точно получилось.

Практикум по нейронным сетям для шахмат №2 03 Апр 2025 09:52 #90

  • booot76
  • booot76's Avatar
  • OFFLINE
  • Чашник
  • Posts: 94
  • Thank you received: 7
  • Karma: 4
Ну так-то вроде сеть еще больше минимизировала ошибку. Забавно где у нее предел и как это отражается на "больших" и "самых интересных" рангах? Может оказаться так, что в угоду минимизации ошибки в ничейных позициях она "загрубляет" выигранные.
Moderators: Grigoriy
Рейтинг@Mail.ru

Научно-шахматный клуб КвантоФорум