Ответы пользователя по тегу C++
  • Сравнение двух фотографий?

    Luonic
    @Luonic
    Студент, Unity3d, DotNet, Xamarin
    Можно сделать с помощью нейронной сети
    Это делается так, берем обученную, например, на имэджнэте глубокую сверточную сеть, отбрасываем у нее последние 2-3 слоя, так как они являются классификаторами и нам не нужны
    То, что сталось - это слои, которые выделяют признаки
    И потом прогоняем одну картинку через НС, вторую, если активированные на выходе нейроны практически одинаковы, значит и картинки похожи
    Ответ написан
    2 комментария
  • Чем отличаются нейронные сети?

    Luonic
    @Luonic
    Студент, Unity3d, DotNet, Xamarin
    Перцептрон позволяет подобрать примерно такую функцию, которая позволит классифицировать данные или предсказывать то, какими будут неизвестные признаки у данных, обучившись на данных, для которых искомые признаки уже известны.

    Сверточный слой в нейронной сети - просто слой, который позволяет уменьшить размерность карты признаков (признаки называтся features в англоязычной литературе и лекциях). Свертки не являются противоположностью глубоких нейронных сетей, глубокие нейронные сети - это просто нейронные сети с большим, по сравнению с перцептроном, количеством слоев, только и всего. Для классификации изображений используют в основном несколько основных типов слоев: сверточный (convolutional), max pooling, ReLU (Linear Rectifier Unit), и в качестве нескольких последних слоев, для проведения самой классификации, используют полносвязные слои, как в перцептроне, а количество выходов = количеству классов для классификации.

    А глубокое обучение само определяет, сколько слоев делать, какие будут идентификаторы. Т.е. само определяет, как находить дорожный знак и конкретизировать его.

    Нет, количество слоев, их размер, размер входа НС нельзя определить автоматически. Эти параметры называются гиперпараметрами. Существуют методики их подбора, но в основном полагаются на опыт и интуицию.

    Для работы с сетями существует несколько основных фреймворков, а это Caffe (пожалуй, самый распространенный), Torch, Theano, TensorFlow. И еще есть CNTK, он подкупает тем, что может работать на 4 gpu одновременно на одной машине. Но большинство из них работают с питоном, среди data scientist'ов для управления нейросетями больше распространены скриптовые языки, или матлаб.

    В качестве совета, как изучать эту непростую тему скажу следующее: не нужно тянуться к коду и практике, пока не будет достаточно четкого понимания в теории, как все работает. Каждое видео, каждую статью нужно разбирать до слова, чтобы разжевать все, что не понятно. Что-то не ясно, гуглим, читаем, осознаем, возвращаемся к статье. Рекомендую начать с видео лекций на ютубе, там проще понять принципы работы слоев, не загружая себя математикой, так как от математики толку не будет, пока не понятны основы.

    Вот несколько ссылок:
    scs.ryerson.ca/~aharley/vis/conv - отличная интерактивная демонстрация работы сверточной сети для распознавания цифр, обученная на наборе MNIST
    https://www.youtube.com/watch?v=2aF_yhVtlH0 - вот это отличный ролик для начала
    https://www.youtube.com/watch?v=VhmE_UXDOGs
    https://youtu.be/CLSy5WlaWKc - немного скучно, но позновательно
    https://www.youtube.com/watch?v=ByjaPdWXKJ4&index=... - суперинтересно и познавательно, но после осознания основ
    Ответ написан
    5 комментариев