Информация об изменениях

Сообщение Re[7]: Нейросеть для чайников от 18.07.2018 16:12

Изменено 18.07.2018 17:07 Erop

Re[7]: Нейросеть для чайников
Здравствуйте, Khimik, Вы писали:

K> Нет, на входе всё те же 16*16 пикселей, просто картинка может быть чуть сдвинута.

То есть исходная 16х16 с полями? Или часть картинки утрачивается при сдвиге?

E>>Ну, например, можно твою сеть заменить на CNN 16х16х3 -> 1х1х256, а потом 1х1х256 -> 1х1х10

E>>Это будет аналог твоей сети, а потом сделать пуллинг со всего окна до 1x1x10

K>Что такое CNN? Что такое пуллинг?


https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%91%D1%80%D1%82%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C

Попробуй перестать представлять НС как набор кружков со связями и перейти к представлению, как набору последовательно применяемых операторов, отображающих трёхмерные массивы в трёхмерные массивы.

Идя CNN в том, что есть некое "окошко", например 13х13, которое скользит по исходной картинке, и вычисляет с ОДНИМИ И ТЕМИ ЖЕ коэффициентами свёртки, например 128 разных свёрток. В результате (если не дополнять исходную картинку 16х16 нулями), получим "картинку" 4х4 в каждом "пикселе" которой лежит 128 чисел. Теперь можем сделать ещё одну свёртку, которая из 128 числе делает 10 (то есть матрица 128х10), получаем 10 вероятностей, что в соответствующем тому или иному "пикселю" квадрате есть та или иная цифра.

Пуллинг -- это ещё один нелинейный слой, который берёт наш "квадратик" 2х2х10 и заменяет его квадратиком 1х1х10, выбирая каждый раз максимальной значение из 4-х.

Ещё хорошо бы на выходе поставить soft-max (лучше глянь в вики формулу), но его хорошо и на выходе твоей сетки поставить, кстати. Он просто более удобным для сети способом нормирует вектор из 10 вероятностей.
Re[7]: Нейросеть для чайников
Здравствуйте, Khimik, Вы писали:

K> Нет, на входе всё те же 16*16 пикселей, просто картинка может быть чуть сдвинута.

То есть исходная 16х16 с полями? Или часть картинки утрачивается при сдвиге?

E>>Ну, например, можно твою сеть заменить на CNN 16х16х3 -> 1х1х256, а потом 1х1х256 -> 1х1х10

E>>Это будет аналог твоей сети, а потом сделать пуллинг со всего окна до 1x1x10

K>Что такое CNN? Что такое пуллинг?


https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%91%D1%80%D1%82%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C

Попробуй перестать представлять НС как набор кружков со связями и перейти к представлению, как набору последовательно применяемых операторов, отображающих трёхмерные массивы в трёхмерные массивы.

Идя CNN в том, что есть некое "окошко", например 13х13, которое скользит по исходной картинке, и вычисляет с ОДНИМИ И ТЕМИ ЖЕ коэффициентами свёртки, например 128 разных свёрток. В результате (если не дополнять исходную картинку 16х16 нулями), получим "картинку" 4х4 в каждом "пикселе" которой лежит 128 чисел. Теперь можем сделать ещё одну свёртку, которая из 128 числе делает 10 (то есть матрица 128х10), получаем 10 вероятностей, что в соответствующем тому или иному "пикселю" квадрате есть та или иная цифра.

Пуллинг -- это ещё один нелинейный слой, который берёт наш "квадратик" 4х4х10 и заменяет его квадратиком 1х1х10, выбирая каждый раз максимальной значение из 16-и.

Ещё хорошо бы на выходе поставить soft-max (лучше глянь в вики формулу), но его хорошо и на выходе твоей сетки поставить, кстати. Он просто более удобным для сети способом нормирует вектор из 10 вероятностей.