Проверяю работу самописной нейросети при помощи PyTorch
Как самостоятельно собрать нейросеть своей моделью и с помощью библиотеки PyTorch. Проверяем правильность работы нейросети.
2К открытий2К показов
Тестирование нейронной сети PyTorch после написания симулятора естественного отбора.
Я второй день пытаюсь провернуть один тест: собрать одну и ту же сетку своей моделью nn_module (мною написанный класс) и с помощью библиотеки PyTorch. Посмотрим, как получится. Пока свел их, чтобы они имели одинаковую структуру. Теперь эти входы надо задать вручную и сравнить выходы.
Зачем? А хз. Просто хочется предсказуемости в результатах, и в том, что я делаю. Да и проверить свой класс нейронной сети, написанный уже фиг знает когда, без нормальных знаний, наощупь.
Что касается собственно отбора, загвоздка с вращением существ, возможно и не должна разрешаться как-то математически, как с sin(): данная конфигурация отбора не вынуждает существ бесконечно адаптироваться, достаточно выживать на каком-то уровне, когда основная массу существ все-таки дает потомство, тогда отбор фактически останавливается. Такая у меня гипотеза. Они бегают, находят хоть немного пищи, достаточно чтобы дожить до размножения.
Ну, поглядим, надо расширять функционал наблюдения за существами, чтобы увидеть ситуацию в деталях.
В общем, возвращаясь к тесту, вот в это надо попасть:
Выход вроде этот:
А получилось: 0.532279745246279
Хм.. даже неясно как это трактовать. Проще всего поменять входы, посмотреть как будет реагировать выход.
Болван,
было "inputs = ..", вместо "nn1._inputs = .."
Соответственно, сетка стартовала с нулевыми инпутами. Поправил, и…
Странно, что входы так мало влияют на выходы. Многовато слоёв? Оставим один скрытый слой и 1 нейрон на выходе.
Так, непонятно. Такая точность в предыдущем эксперименте, и такие промахи в этом. Ага, ошибся в одном из весов. 0.1045 вместо 0.1802. Еще раз проверим.
Ладно, думаю, этому можно верить. Что мы имеем? Ну, ура, потому что мой класс nn_module, который считает полносвязную сетку прямого распространения правильно, в точности также, как
Давно хотел подобный эксперимент провести. Теперь можно заменить мой класс на конструкцию из pytorch и получить что-то аналогичное (они будут вести себя также странно и крутиться? Или что-то поменяется?). А потом можно поиграть со разными конфигурациями сетей. LSTM, я ползу к тебе.
Еще, как побочная информация, заметил, что у трехслойных сетей, выход как-то слабо коррелирует с входом, по крайней мере, в сравнении с двуслойными сетями. Ну, или по крайней мере, можно поразмышлять об этом явлении.
2К открытий2К показов