Комментарии 23
Отличная статья, спасибо!
Глаз зацепился за padding='same', я даже собрался вам написать об ошибке на краях, а у вас дальше такой классный разбор :)
Хм… а сможет ли сеть делать предсказания на несколько шагов вперед за время выше чем классический алгоритм игры жизнь?
Моделировать такой простой детерминированный алгоритм нейросеткой — это как то грустно, хотя я и не специалист чтобы судить.
А если попробовать скармливать в обучающем наборе последующий шаг как input и требовать от нейросети предыдущий как output?(тогда наверное все поле должно быть в качестве input layer). Получится ли таким способом искать сады Эдема?
А если попробовать скармливать в обучающем наборе последующий шаг как input и требовать от нейросети предыдущий как output?(тогда наверное все поле должно быть в качестве input layer). Получится ли таким способом искать сады Эдема?
Моделировать такой простой детерминированный алгоритм нейросеткой — это как то грустно, хотя я и не специалист чтобы судить.
Смотрите эпиграф.
А если попробовать скармливать в обучающем наборе последующий шаг как input и требовать от нейросети предыдущий как output?
Имеется ввиду, предсказывать временной ряд?
(тогда наверное все поле должно быть в качестве input layer). Получится ли таким способом искать сады Эдема?
Не знаю, сам не занимался, статей на эту тему не видел, и сам этот клеточный автомат вижу первый раз, почитаю, спасибо за наводку.
Было соревнование на кагле по инвертированию игры: www.kaggle.com/c/conway-s-reverse-game-of-life/overview/description
Но не сказал бы что что-то интересное или прорывное там было.
Но не сказал бы что что-то интересное или прорывное там было.
Инвертирование не является однозначным. Т.е. у одной фигуры может быть несколько различных потомков.
Как в таком случае будет вести себя ИНС — не знаю. Но что-то подсказывает мне, что ничего хорошего не выйдет.
Как в таком случае будет вести себя ИНС — не знаю. Но что-то подсказывает мне, что ничего хорошего не выйдет.
Сама по себе задача довольно интересна. Можно создавать случайные миры, запускать их до стабилизации а потом обучать сеть на записи обратного развития.
Интересно здесь следующее. На самом деле игра жизнь необратима, но ходу развития автомата, на неком этапе развития ему всегда свойственны определенные паттерны со своими вероятностями.
Если сеть будет очень хорошо знать все эти паттерны, она сможет довольно точно предсказывать прошлое для необратимого автомата.
Если это действительно возможно, то тогда возможны интересные аналогии с физикой реального мира, которая тоже вроде-бы обратима, хотя один из базовых принципов квантовой механики необратим…
Интересно здесь следующее. На самом деле игра жизнь необратима, но ходу развития автомата, на неком этапе развития ему всегда свойственны определенные паттерны со своими вероятностями.
Если сеть будет очень хорошо знать все эти паттерны, она сможет довольно точно предсказывать прошлое для необратимого автомата.
Если это действительно возможно, то тогда возможны интересные аналогии с физикой реального мира, которая тоже вроде-бы обратима, хотя один из базовых принципов квантовой механики необратим…
Правила продолжают применяться рекурсивно
Рекурсия — это всё же вызов функцией самой себя («Рекурсия: см. Рекурсия»). В данном случае просто повторное применение правил, чтобы получить новое поколение.
А почему
filters=50
? Как подбирался этот параметр? Что-то мне подсказывает, что можно сильно меньше взять, без просадки точности. Тоже и к другим параметрам относится.А сразу на несколько шагов сеть может предсказать, без промежуточных шагов?
Решение самой «Жизни» есть куда более красивое) Взято с
def iterate(Z):
# Count neighbours
N = (Z[0:-2,0:-2] + Z[0:-2,1:-1] + Z[0:-2,2:] +
Z[1:-1,0:-2] + Z[1:-1,2:] +
Z[2: ,0:-2] + Z[2: ,1:-1] + Z[2: ,2:])
# Apply rules
birth = (N == 3) & (Z[1:-1,1:-1]==0)
survive = ((N == 2) | (N == 3)) & (Z[1:-1,1:-1] == 1)
Z[...] = 0
Z[1:-1,1:-1][birth | survive] = 1
return Z
Что такое model.predict_classes? Не нашел описания на сайте keras.io. Я так понял, статья довольно старая, т.к. на том-же keras.io и в книге самого Шолле активация уже не выделяется в отдельный слой, а передается параметром слоя.
Что такое model.predict_classes? Не нашел описания на сайте keras.io.
https://kite.com/python/docs/tensorflow.keras.Sequential.predict_classes
Я так понял, статья довольно старая, т.к. на том-же keras.io и в книге самого Шолле активация уже не выделяется в отдельный слой, а передается параметром слоя.
Нет, вывод неверный. Статья от 02.2019. Активацию возможно указать без отдельного слоя года с 2016, если не ошибаюсь, тут видимо привычка.
Похоже либо пропущена нелинейность либо промежуточный слой лишний:
без нелинейности после первого уровня оба уровня заменяются одним Dense(1)
model.add(Dense(hidden_dims))
model.add(Dense(1))
без нелинейности после первого уровня оба уровня заменяются одним Dense(1)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Использование сверточной нейронной сети для игры в «Жизнь» (на Keras)