Ответы пользователя по тегу Нейронные сети
  • Существуют ли актуальные ресурсы, которые сравнивают различные нейросети в плане "качества"?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Гуглить "sota" (state-of-the-art)
    Можно найти, например, такое: https://github.com/RedditSota/state-of-the-art-res...
    Ответ написан
    Комментировать
  • Обучение нейронной сети - как интерпретировать результат?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Раз есть оверфиттинг - попробуйте дропаут на побольше выкрутить. Между стандартными Dense-слоями 0.5 - традиционное значение. Видел статьи, где дропаут делали аж 0.8-0.9 как раз потому что данных мало было.
    Еще попробуйте в качестве оптимизатора Adam.

    Сети, которые обучают неделями, - это всякие монструозные конструкции, где штук 20 слоев по 500 нейронов в каждом. И десятки миллионов примеров для обучения.
    Ответ написан
    2 комментария
  • Как правильно спроектировать нейронную сеть?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    1. Классификация и регрессия - это разные задачи. В принципе, можно организовать так, как вы описали, но в этом случае результаты регрессии будут эдаким бутылочным горлышком для классификации. Зачем ограничивать объем доступной информации для классификатора?
    2. Топология сети обычно сильно сложнее, чем один скрытый слой, как изображено у вас на картинке и зависит от характера входных данных. Являются ли данные последовательностью или разовым "снимком" состояния среды? Однородны ли они или приходят из разных источников? И так далее. Проще просто по постановке задачи подсказать.
    3. Python проще использовать для машинного обучения. CatBoost - это библиотека для градиентного бустинга (совсем другой алгоритм и другая архитектура, нежели нейронные сети). На Python одна из самых удобных и простых библиотек для обучения нейронных сетей - это keras. Есть еще sklearn, где реализовано несколько других, более "простых" алгоритмов.
    Ответ написан
    2 комментария
  • Как тренировать нейросети с LSTM в keras?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    https://keras.io/layers/recurrent/

    Input shape
    3D tensor with shape (batch_size, timesteps, input_dim).

    <количество примеров в одном батче, длина последовательности, размерность одного элемента>

    LSTM предполагает, что каждый элемент последовательности - это вектор. В случае, когда в базовом варианте они - какие-то числа (например, id слова в словаре), то его перегоняют в one-hot encoding или через embedding слой.
    Если длина последовательности разная от примера к примеру, то её обычно добивают нулями так, чтобы для всех в батче была одинаковая.
    Ответ написан
  • Возможно ли по снимку определить расстояние до объекта?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Восстановление 3D данных из 2D снимка\видео - это открытый вопрос сейчас. Например вот https://www.youtube.com/watch?v=x7xNBs_aIgQ или вот https://www.youtube.com/watch?v=keIirXrRb1k
    Кто-то концентрируется на отдельных типах объектов - например, оценка положения ладони https://www.youtube.com/watch?v=aE7kW4b6CjA (опять же, 3D координаты из 2D видео)
    Ответ написан
    Комментировать
  • Нейросети. Почему Python?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Потому что нейронные сети - это, как правило, программы не очень большие по объему, но которые приходится часто изменять, чтобы подобрать оптимальную архитектуру, предобработку данных и прочее. Поэтому проблем с легаси кодом почти нет, а есть требования к быстрой разработке. Python этому удовлетворяет лучше, чем C++ или Java.

    Фреймворки для машинного обучения - это часто фронтенд на Python или Torch и бэкендом на C++.
    Ответ написан
  • Выбор архитектуры и средств реализации сверточной нейронной сети?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    https://github.com/RedditSota/state-of-the-art-res...
    Вот тут есть ссылки на SOTA (state-of-the-art) архитектуры для различных задач + их реализации на различных языках. Можно взять какое-нибудь решение с результатами на более-менее нормальном датасете (не на MNIST), разобраться как засунуть туда данные и прокрутить.
    Ответ написан
    Комментировать
  • Кто поможет разобраться с терминологией TensorFlow?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    1. Именно архитектуру. Когда вы писали нейронки руками, то последовательность выполнения операций определялась лично вами и тем порядком команд, который вы написали. Но при этом очень вероятно, что расходование ресурсов было далеко от оптимального. Тем более это может быть важно в случае обучения на GPU, когда программе надо еще управлять памятью GPU - какие данные там держать, а какие уже можно удалить и вернуть в обычную память. Для решения этой проблемы порядок выполнения вычислений в Tensorflow определяется компилятором - программист сначала описывает граф, по которому будут происходить вычисления (та самая модель, у которой может быть несколько входов, несколько выходов, несколько путей прохожения вычислений); потом компилирует его; потом создает сессию Tensorflow и запускает прогон этого графа с какими-то входными данными. Реальные веса нейронной сети существуют лишь в рамках сессии Tensorflow.

    2. Keras - это фреймворк, который ставил целью сделать разработку нейронных сетей проще, подняться на один уровень абстракций выше от математических вычислений к зоопарку слоев нейронных сетей. Плюс абстрагироваться от конкретного фреймворка тензорных вычислений, таких как Theano, CNTK, Tensorflow. В итоге этот фреймворк официально врос в Tensorflow.

    3. Исходный язык для Tensorflow - это Python, примеры надо на нем смотреть: https://www.tensorflow.org/tutorials/keras/basic_c...

    Tensorflow - это вообще пример того, что в последнее время стали называть "differentiable programming" - еще одна новая парадигма программирования. Так что после императивного подхода надо чутка мозгами поскрипеть.
    Ответ написан
    Комментировать
  • Как сделать нейронную сеть, что бы она обучалась игре?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    "как передать картинку с игры в программу" - как правило, для обучения используются не сама исходная игра, а её эмулятор.
    Есть такой портал https://gym.openai.com/ который как раз предназначен для подобных вещей, там реализована куча эмуляторов различных простых игр
    Ответ написан
    Комментировать
  • Каким должен быть ответ нейронной сети (выходные данные)?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    1. Диапазон выходного значения зависит от функции активации на выходе. Если нам нужно бинарное значение 0/1 - используют sigm. Если надо неотрицательное (когда кодируем цвет, например) - используют relu. Если надо просто вещественное - то никакой функции активации не надо. Если нужно вещественное в каком-то диапазоне (например, -50/+50) - можно попробовать tanh и просто дополнительно домножать его на 50.

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

    3. Для работы с последовательностью данных (t-3, t-2, ...) обычно используют конкретную архитектуру нейронных сетей - рекуррентные нейронные сети, которые для каждого нового t перевычисляют у себя какое-то внутреннее состояние и выдают новое значение исходя из этого состояния и входного значения. Самое простое, что можно сделать, чтобы такая сеть выдавала несколько предсказаний t+1,t+2,t+3 - это попробовать подать ей на вход пустые t,t+1,t+2. Хотя не факт, что получится. Обычно, чтобы из последовательности данных сгенерить другую последовательность, используют архитектуру sequence-to-sequence, seq2seq.

    4. Чем больше вариативность выходных данных; чем сложнее функция, которую надо обучиться нейронной сети - тем, разумеется, сложнее\дольше\менее точно будет происходить само обучение.
    Ответ написан
    Комментировать
  • Какие рекурентные сети можно применить для групп связанных данных?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Из описания задачи не следует, что эти группы представляют собой последовательность данных.

    Если группы - это просто неупорядоченные множества, то можно попробовать просуммировать в цикле их фичи через attention
    Ответ написан
    Комментировать
  • Как правильно приготовить данные для обучения сети?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    1. Дело ведь еще не только в объеме датасета, но и в его полноте. При ошибочном построении сети обычно вообще ничего не обучается. Недостаточный размер слоев легко заметить просто увеличив его и прогнав обучение еще раз. По объемам - про классификацию текста где-то видел, что SVM дает лучший результат при объеме выборки где-то от 2000 до 50000, нейронные сети - от 50000.
    3. Это назвается интерпретируемостью нейронной сети \ алгоритма. В этом направлении есть какие-то исследования (как добиться того, чтобы глядя на активацию нейронов понимать, что и почему делает НС), но серьезных решений вроде нету. Лучший способ - это хороший тестовый набор, на котором будет видны кластеры ошибок.
    4. Всё сильно зависит от сложности каждой конкретной задачи. Готовой формулы нет.
    Ответ написан
    Комментировать
  • Какие есть библиотеки для построения ANN в Python?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Tensorflow от гугла. Там есть много мелких полезностей; seq2seq с attention и beam search на нем, например, довольно просто запилить.
    Keras - ранее был слоем абстракции над Theano и Tensorflow, но Theano приказал долго жить, и Keras влился в TF. Позволяет быстрее делать простые вещи.
    Еще есть MXNet от Apache.
    Ответ написан
    Комментировать
  • Как определить количество нейронов в нейросети?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Какой-то формулы для определения размера скрытых слоев нет. Часто его определяют путем перебора или исходя из здравого смысла.
    Ответ написан
    Комментировать
  • Существует ли в открытом доступе нейронная сеть для чатбота (ChatBot)?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Если хочется простой seq2seq - то, например, https://www.tensorflow.org/tutorials/seq2seq
    Но обучение модели - это обычно от силы 20% всей работы, а то и меньше. Остальное - это найти данные для обучения, очистить их, сделать удобный api над моделью,...
    Ответ написан
    Комментировать
  • Как написать Hello world для нейронной сети?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Можно попробовать взять рекурентную сеть, которая на вход будет получать два числа в виде последовательностей их цифр, а на выходе выдавать последовательность-сумму чисел. Она должна достаточно легко выучить правила сложения и переноса в следующий разряд.
    Ответ написан
  • Tensor Tensor("activation_5/Softmax:0", shape=(?, 2), dtype=float32) is not an element of this graph?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Модель должна загружаться в ту же сессию Tensorflow, что будет использоваться дальше для предсказаний.
    Ответ написан
    6 комментариев
  • Нейронная сеть, какой должен быть диапазон весов?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Тип входных и выходных значений зависит от того, какой смысл вы в них вкладываете и от архитектуры сети (в частности, функций активации на выходах нейронов).

    При обработке текста, например, часто на вход подается последовательность id'шников слов в предложении - соответственно, это целые числа от 0 до <количество слов в словаре>.
    При обработке изображений часто используют функцию активации ReLU, выход которой - неотрицательные числа.

    Нормализация на входе бывает полезна, когда изначально диапазон фич сильно отличается друг от друга, но по смыслу они примерно равны, а сами фичи - это вещественные числа (например, если входные данные - это длина сосульки на крыше в миллиметрах и температура на улице в градусах; первая фича имеет порядок сотен-тысяч, вторая - десятки-единицы).

    Способ инициализации весов в слоях имеет большое значение для того, насколько хорошо будет отрабатывать backprop. Но эта область уже достаточно хорошо изучена, и везде по умолчанию используется стандартные решения вроде инициализации по Глороту или ортогональной инициализации. Так что тут беспокоиться не надо.

    "сколько должно пройти итераций что бы веса с 0.1.. спустились до 0.0001.." можно перефразировать как "почему backprop работает медленно и как его ускорить". Это вообще одна из фундаментальных задач в DL. Инициализация весов - один из способов частичного решения. Различные функции активации - другой. Новые архитектуры слоев - третий. Модификация обучающих данных - четвертый. И так далее.
    Ответ написан
    Комментировать
  • Почему при последовательном создании моделей в Keras они каким-то образом между собой зависят, хотя, наверное, не должны?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Возможно, глобальный инкремент в номерах слоев может быть связан с тем, что сессия Tensorflow хранится в Keras глобально в tensorflow_backend.py и названия переменных по умолчанию должны быть уникальны в рамках сессий. Это если бэкенд - TF.
    Ответ написан
    5 комментариев