Комментарии 23
Отличная статья, спасибо!
Глаз зацепился за padding='same', я даже собрался вам написать об ошибке на краях, а у вас дальше такой классный разбор :)
Хм… а сможет ли сеть делать предсказания на несколько шагов вперед за время выше чем классический алгоритм игры жизнь?
А если попробовать скармливать в обучающем наборе последующий шаг как input и требовать от нейросети предыдущий как output?(тогда наверное все поле должно быть в качестве input layer). Получится ли таким способом искать сады Эдема?
Моделировать такой простой детерминированный алгоритм нейросеткой — это как то грустно, хотя я и не специалист чтобы судить.
Смотрите эпиграф.
А если попробовать скармливать в обучающем наборе последующий шаг как input и требовать от нейросети предыдущий как output?
Имеется ввиду, предсказывать временной ряд?
(тогда наверное все поле должно быть в качестве input layer). Получится ли таким способом искать сады Эдема?
Не знаю, сам не занимался, статей на эту тему не видел, и сам этот клеточный автомат вижу первый раз, почитаю, спасибо за наводку.
Но не сказал бы что что-то интересное или прорывное там было.
Как в таком случае будет вести себя ИНС — не знаю. Но что-то подсказывает мне, что ничего хорошего не выйдет.
Интересно здесь следующее. На самом деле игра жизнь необратима, но ходу развития автомата, на неком этапе развития ему всегда свойственны определенные паттерны со своими вероятностями.
Если сеть будет очень хорошо знать все эти паттерны, она сможет довольно точно предсказывать прошлое для необратимого автомата.
Если это действительно возможно, то тогда возможны интересные аналогии с физикой реального мира, которая тоже вроде-бы обратима, хотя один из базовых принципов квантовой механики необратим…
Правила продолжают применяться рекурсивно
Рекурсия — это всё же вызов функцией самой себя («Рекурсия: см. Рекурсия»). В данном случае просто повторное применение правил, чтобы получить новое поколение.
filters=50
? Как подбирался этот параметр? Что-то мне подсказывает, что можно сильно меньше взять, без просадки точности. Тоже и к другим параметрам относится.Напомню, что это перевод. Но параметр, вероятно, подбирался эмпирически. Некоторые параметры очевидно, почему такие, например размер ядра 3x3 — потому, что клетка в центре зависит от соседей по бокам.
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.
https://kite.com/python/docs/tensorflow.keras.Sequential.predict_classes
Я так понял, статья довольно старая, т.к. на том-же keras.io и в книге самого Шолле активация уже не выделяется в отдельный слой, а передается параметром слоя.
Нет, вывод неверный. Статья от 02.2019. Активацию возможно указать без отдельного слоя года с 2016, если не ошибаюсь, тут видимо привычка.
model.add(Dense(hidden_dims))
model.add(Dense(1))
без нелинейности после первого уровня оба уровня заменяются одним Dense(1)
Использование сверточной нейронной сети для игры в «Жизнь» (на Keras)