Как получить матрицу с кол-вом строк 10, если входящая матрица имеет 784 строк?
В примере по распознаванию цифр на вход сети подается матрица размером 784x1, а выходит матрица размером
10x1 . Как они этого достигают ? Мне приходит одна только одна мысль, что нужно транспонировать матрицу.
Например.
Сеть состоит из трех слоев.
Входная матрица = 784х1
Первый слой = матрица размером 1х100
Скрытый слой = матрица размером 100х10
Выходной слой = матрица размером 10х1
Результат умножения входной матрицы на слой : 784х1 * 1х100 = 784х10
Результат умножения первого слоя на скрытый : 784х10 * 100x10 = 784x10, транспонируем и получаем = 10х784
Результат умножения скрытого слоя на выходной : 10х784 * 10х1 = 10х1
Однако такое чувство, что это не путь джедая и есть лучший способ. Лучший способ это просто транспонировать входящую матрицу ?
ziplane, не совсем так. На каждом очередном слое можно получить любую размерность.
Забудьте про операции над матрицами. Всё просто как 2x2. Например: получить из 3 входов 5 выходов.
3 входа [i0, i1, i2], получаем 5 выходов [o0, o1, o2, o3, o4]
Коэффициенты, которые как-то иницаилизируем и потом как-то корректируем (в этом вся магия, но сейчас не об этом):
от i0 к каждому из выходов: [k00, k01, k02, k03, k04],
от i1 к каждому из выходов: [k10, k11, k12, k13, k14],
от i2 к каждому из выходов: [k20, k21, k22, k23, k24].
Значение на выходе o0 = i0 * k00 + i1 * k10 + i2 * k20,
на выходе o1 = i0 * k01 + i1 * k11 + i2 * k21,
и т.д.
Вот и получили из размерности (3,1) размерность (5,1). Точно так же из 784 получаем 10. Коэффициентов будет гораздо больше.
(На самом деле эти суммы произведений коэффициентов на входы ещё обрабатывают активаторной функцией, чтобы получить выходное значение)