78) #76 -> sparse coding Olshausen/Field
Результаты в ноутбуке s1_sparse_code_01.ipynb
1) Получилось добиться формирования фильтров a-la Gabor фильтр, как для 12х12, так и для 16х16 2) Пришлось собрать Python-модуль (cgf) для conjugate gradient descent (метод сопряженных градиентов) из исходников на C, которые использовали авторы в 1996. Слава Богу у Olshausen на сайте исходники были выложены (MATLAB + C). 3) Хотя метод сопряжённых градиентов есть в scipy (sparse.cs, sparse.cgs), но эта реализация не подходила. Дело в том, что в алгоритме нужно использовать хитрую регуляризацию (штраф на НЕразреженность), которую в scipy хз как реализовать. Поэтому пришлось собрать кастомное решение 4) Но после сборки модуля результаты всё равно продолжали расходиться, пришлось также собирать эту либу как MATLAB-модуль. Как оаказалось, это даже проще, чем Python модуль =) 5) Основная трабла была в том, что в матлабе используется COLUMN-MAJOR (FORTRAN) layout матриц, тогда как в питоне ROW-MAJOR (С) layout. Поэтому всё неверно считалось, пока не транспонировал все матрицы, которые из Питона были 6) Положительные результаты получены для WHITENED изображений. Тоже, Слава Богу, эти изображения 30 лет лежат на сайте Olshausen =) 7) При попытке использования RAW изображений получается шляпа, даже с увеличением циклов тренировки до 10_000. Тему с тренировка на не-whitened изображений решил не копать.