Nano Hash - криптовалюты, майнинг, программирование

Обучающий набор данных MNIST с функцией активации сигмоида

Согласно этому руководству, с Python и Numpy я хотите обучить MNIST набор данных нейронной сети, которая может распознавать рукописные цифры. Я понимаю логику, но у меня есть проблема прямо сейчас.

В этом учебном примере тестовым случаем был AND логический вентиль, и из-за небольшого объема данных он работает нормально. Но я использую базу данных MNIST, и каждое изображение имеет размерность 28*28, и когда я конвертирую каждое из них в вектор, у меня есть матрица N*784. И если у меня есть матрица 784*1 как weight matrix, когда я умножаю ее на входную матрицу, результирующие числа будут очень маленькими или очень большими числами (отрицательными или положительными), и поскольку я использую функцию активации Sigmoid, все мои данные разделены в два раздела, 1 и 0 в первом цикле обучения, но мне нужны небольшие числа, которые медленно сходятся.

например, я получаю эти числа после умножения: -569.87541502 , 218.62477264 и первое из них равно 0 в функции активации Sigmoid, а второе равно 1, и нет места для обучения и сходимости. Все это из-за большого количества данных, суммирование которых приводит к большим или очень маленьким числам.

Я использую этот трюк для создания очень малых весов, чем в оригинальном уроке, но я получаю те же результаты (я думал, что это небольшие числа, их сумма не может быть очень большой, но я получаю те же результаты):

syn0 = (2*np.random.random((784,10))-1)*(0.00000005-0.00000001) + 0.00000001

Я не знаю, как я могу преодолеть это.


Ответы:


1

Решения:

Обязательно предварительно обработайте ввод.

Если ваши входные пиксели находятся в диапазоне [0, 255], лучше масштабировать их до [0,0, 1,0]. Этого достаточно в большинстве ситуаций.

Более продвинутый способ — использовать пакетную нормализацию.

Убедитесь, что вы инициализируете матрицы весов нормализованным способом.

Под нормализованным я подразумеваю, что каждый из 784-мерных векторов-столбцов весовой матрицы должен иметь фиксированную L2-норму. Для простой настройки вы можете просто нормализовать их до 1.

Инициализация матрицы весов является предметом исследования, например, с использованием инициализации glorot чтобы показать лучшие результаты для глубоких сетей.

26.11.2016
  • Нет никакой реализации Python для инициализации glorot? 26.11.2016
  • @Fcoder Это просто, просто умножьте вектор-столбец на sqrt(6./(in_dims+out_dims)) 26.11.2016
  • Спасибо, что вы имеете в виду in_dims и out_dims? прямо сейчас я создаю матрицу веса случайным образом. Каково ваше решение, я не могу понять. Я новичок в этой теме, извините за много вопросов. 26.11.2016
  • @Fcoder Входные и выходные размеры определенного слоя, в данном конкретном случае только размеры столбца / строки весовой матрицы. Цель состоит в том, чтобы инициализировать стандартное нормальное расстояние, а затем изменить масштаб. 26.11.2016
  • Спасибо, я делаю так: syn0 = np.dot(syn0, np.sqrt(6./(7840+59580))) . но опять же, когда я умножаю входные данные с весами, я получаю большие числа, что все они в сигмовидной функции равны 1 или 0, и сети не могут ничего узнать. такие числа: 77998.9275072, -81295.10915719, -78033.05164159 26.11.2016
  • @Fcoder Просто попробуйте syn0 /= 28., простейшую нормализацию. 26.11.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..