Вот нужно вам понизить размерность входных данных. Почему CNN? Почему не PCA, t-SNE, автоэнкодеры?
Понижать размерность ради понижения размерности - сомнительная затея, вы ведь наверняка это используете для подготовки данных к решению какой-то задачи. Вот по качеству решения этой задачи и подбирайте параметры сетки
Гляньте в сторону HyperLogLog - можно считать приблизительное количество элементов в потоке. https://m.habrahabr.ru/post/119852/
Реализация есть в Redis
Либо не использовать при обучении признаки, которые не будут доступны в тесте, либо использовать информацию из трейна а-ля для команды 1 средняя доля выигрышей 0.67. Но тут просто переобучиться и натолкнуться на ситуацию, когда в тесте будет команда, которой не было в трейне
from pymongo import MongoClient, ASCENDING, DESCENDING
con = MongoClient('localhost:27017')
for x in con.db.collection.find( {'field' : 'value'} ).sort([('student_id', ASCENDING)]):
print x
Тут вопрос не в том, какой алгоритм использовать, а как представить данные, чтобы можно было натравить любимую логистическую регрессию или градиентный бустинг.
Если объектов не очень много, то можно нагенерировать все пары (а,б), где а из первого множества, а б из второго, придумать признаки для этих пар и обучать алгоритм на "есть связь / нет связи"