Использование разреженных матриц с Keras и Tensorflow

Мои данные можно рассматривать как матрицу из 10B записей (100M x 100), что очень мало (<1/100 * 1/100 записей не равны нулю). Я хотел бы передать данные в созданную мной модель нейронной сети Keras, используя бэкэнд Tensorflow.

Моей первой мыслью было расширить данные, чтобы они были плотными, то есть записать все записи 10B в серию CSV, причем большинство записей равно нулю. Тем не менее, это быстро ошеломляет мои ресурсы (даже выполнение ETL перегружает панд и заставляет postgres бороться). Поэтому мне нужно использовать истинные разреженные матрицы.

Как я могу сделать это с Keras (и Tensorflow)? В то время как Numpy не поддерживает разреженные матрицы, Scipy и Tenorflow оба поддерживают. Там много дискуссий (например,https://github.com/fchollet/keras/pull/1886 https://github.com/fchollet/keras/pull/3695/files https://github.com/pplonski/keras-sparse-check https://groups.google.com/forum/#!topic/keras-users/odsQBcNCdZg ) об этой идее - либо используя разреженные матрицы Сципи, либо перейдя непосредственно к разреженным матрицам Tensorflow. Но я не могу найти четкого заключения, и я не смог заставить что-либо работать (или даже четко знать, куда идти!).

Как я могу это сделать?

Я считаю, что есть два возможных подхода:

Сохраняйте его как скудную разреженную матрицу, а затем, давая Керасу мини-пакет, сделайте его плотнымДержите его разреженным и используйте Tensorflow Sparse Tensors

Я также думаю, что # 2 предпочтительнее, потому что вы получите намного лучшую производительность на всем протяжении (я верю), но # 1, вероятно, проще и будет адекватным. Я буду счастлив с любым из них.

Как это можно реализовать?

Ответы на вопрос(1)

Ваш ответ на вопрос