Лекция 2. Нейронные сети. Теория и первый пример (Анализ данных на Python в примерах и задачах. Ч2)

Поделиться
HTML-код
  • Опубликовано: 27 сен 2024

Комментарии • 34

  • @S_-ld2no
    @S_-ld2no 5 месяцев назад

    "Раз молчите - значит боитесь, если боитесь - значит непонятно" - эх, если бы все преподаватели были такими идеальными

  • @megabyte_ga
    @megabyte_ga 4 года назад +1

    Лекция смотрится на одном дыхании! Конечно, не все понятно с первого раза, а по методам оптимизации и прочим настройкам придется и документацию дополнительно почитать... Но Вы вселили в меня уверенность в том, что я смогу *управлять* обучением сети с помощью Keras, а не блуждать, как в темном лесу. Вадим Леонардович, спасибо!

  • @МаксимБ-з3ю
    @МаксимБ-з3ю 5 лет назад +11

    Огромное спасибо за лекцию!

  • @mgsupgs
    @mgsupgs 3 года назад +1

    Огромное спасибо за лекции!

  • @jewgenijmoldawski3306
    @jewgenijmoldawski3306 9 месяцев назад

    Полезная лекция, как по мне, большое спасибо.
    Но должен отметить, что безусловно компетентный лектор, по-моему, слишком часто прыгает с одного места на другое, причем совсем неожиданное. Это держит в постоянном напряжении. Спасает только то, что можно перемотать и повторить.

  • @ill4374
    @ill4374 2 года назад

    17:00 это метод градиентного спуска

  • @АлександрК-х6щ
    @АлександрК-х6щ 2 года назад

    Правильно я понял, что при подаче обучающего объекта последовательно пересчитываются все веса всех внутренних узлов?

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 2 года назад

      В теории да. На практике коррекции весов производятся после подачи пакета наблюдений из обучающей выборки (batch).

  • @МишаСаулин
    @МишаСаулин 3 года назад +2

    Спасибо за лекцию! У меня есть вопрос, могу ли я увидеть accuracy своей тестовой выборки с определенным пороговым значением (бинарный классификатор). Я хочу что бы я видел % точности тех прогнозов в которых система уверена в одном из классов на 60%. Спасибо!

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 3 года назад

      # Пусть пороговое значение w будет равно 0.6
      w = 0.6
      # Вычисляю accuracy
      np.mean((model.predict_proba(X_test)[:, 1] > w).astype(int) == y_test)
      # Повторяю предыдущее шаг за шагом
      # zzz_1 numpy array, содержит вероятности
      # принадлежать классам "0" и "1"
      zzz_1 = model.predict_proba(X_test)
      # Сравниваю вероятность принадлежать классу "1" и порог
      zzz_2 = zzz_1[:, 1] > w
      # Перекодирую результат в "0" и "1"
      zzz_3 = zzz_2.astype(int)
      # Считаю accuracy
      np.mean(zzz_3 == y_test)

  • @ДмитрийЛаричев-н7д
    @ДмитрийЛаричев-н7д 5 лет назад +1

    Уважаемый Вадим Леонардович, вы забыли стандартизировать данные. У меня с такой же архитектурой, но со стандартизированными данными получилось околи 97% accuracy на тестовых данных. Вот как нужно стандартизировать:
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 5 лет назад +4

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

    • @drewya9186
      @drewya9186 4 года назад

      Что делает стандартизация данных?

    • @itkot7390
      @itkot7390 4 года назад

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

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 4 года назад

      @@drewya9186 Стандартизация не улучшает качество модели, но может на порядки ускорить обучение

  • @shandi1241
    @shandi1241 4 года назад

    а почему на первом слое в примере с винами, 13 характеристик а нейронов всего 9? мы не потеряем какие-нибудь важные моменты в характеристиках упростив первый слой?

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 4 года назад +1

      IMHO даже 9 много. С 13 нейронами в первом слое очень велик риск переобучения. Мы надеемся отфильтровать шум в данных, сохранив закономерность (часто говорят сигнал).

    • @shandi1241
      @shandi1241 4 года назад

      Вадим Аббакумов спасибо за ответ! а есть какие-нибудь эмпирические приемы как выбрать количество нейронов в первом слое? Слышал, что для анализа изображений, допустим, фиксированного размера NxM, нейронов берут N*M штук? Или лучше не так? . А все понял, стоило лишь посмотреть следующую лекцию 😄

  • @ywbc1217
    @ywbc1217 4 года назад

    "Приложенные файлы" -- ССЫЛКА НЕ РАБОТАЕТ (This site can’t be reached)

    • @ywbc1217
      @ywbc1217 4 года назад

      ссылки заработали -- спасибо

  • @deni5n
    @deni5n 4 года назад +2

    ух, мысль у лектора скачет от одной к другой и приэтом он использует несколько файлов примеров. очень тяжело следить затмыслью лектора. почему бы не сделать один ноутбук, где последовательно изложить материал и не следовать ему? в конце лекции вообще убил пример: лектор показал ноутбук, в котором сначала преобразовал значения из pandas df в numpy arrayа, потом пробует получить первые строки данных этого массива через метод pandas head(), у него не получается и он пишет: а почему не получилось? хочется спросить в ответ: зачем этот вопрос? ведь лекция не по pandas а по обучению нейронных сетей в keras!!

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 4 года назад +6

      1. Включил, так как видел, что новички часто ошибаются в этом месте.
      2. Это не лекция по обучению нейронных сетей в keras. Материал должен показать основные элементы обучения нейронных сетей, чтобы облегчить изучение TF. Более того, сейчас в лекциях я вместо TF использую PyTorch. Хотя IMHO после лекций слушатели без проблем обучают нейронные сети
      3. Один ноутбук еще хуже. Приходится либо скакать по нему, либо повторять фрагменты скрипта несколько раз. Тут Вы не в теме.
      4. Вам просто не зашел мой формат. Могу порекомендовать найти на youtub'e курс, в котором четко и нараспев пересказывается книга Шолле Глубокое обучение на Python. Похоже Вам такой формат подойдет больше. Кстати, книга очень неплохая.

  • @lenastrokov4532
    @lenastrokov4532 2 года назад +1

    Очень нравится лекция, спасибо! На 9 минуте в матрице сопряжения мы неправильно сказали мальчик на девочку в левом нижнем все таки… значит штраф самый большой должен туда, а в верхнем правом - это мальчики, которых мы называем девочками - с этими случаями мы согласны на ошибку - туда можно штраф 1 заложить

  • @MinisterDorado
    @MinisterDorado Год назад

    1:15:53 Все так делают. LOL

  • @stroeved
    @stroeved Год назад

    интересно какого монстра обучали на добыче биткоина🤯

  • @PafosnijManul
    @PafosnijManul 4 года назад +5

    Прекрасный лектор, отличный курс. Узнал много полезного

  • @RenescoRocketman
    @RenescoRocketman 6 лет назад

    На 59:00 про ограничения, связанные с производной сигмоиды. Возник вопрос: а почему не компенсировать это дело различными лернинг рейтами для разных слоев? Если ошибка идет назад с таким затуханием, то можно было бы лернинг рейты делать соответственно больше на слоях дальше от выхода.

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 6 лет назад

      Почему бы и нет. Можно пробовать. Но если у нейронной сети больше 100 слоев, брать параметр скорости обучения у первого слоя 2**100? Лично мне проще использовать RELU и не думать о подборе скорости у каждого слоя...

    • @RenescoRocketman
      @RenescoRocketman 6 лет назад

      Спасибо за ответ! (даже не ожидал, что тут в комментариях сам лектор может ответить) Действительно, для 100 слоев такой подход не годится. Я как-то думал о 3-5 слоях.
      Насчет РЕЛУ было бы здорово узнать, как для нее вообще обстоит дело с минусовыми данными на входе. Она ведь в таком случае выдает y=0. Получается, и значение 0, и производная 0. Такой нейрон "умер" навсегда, или это как-то обошли в алгоритме обратного распространения ошибки для РЕЛУ?

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 6 лет назад +7

      Может так умереть до 40% нейронов. Выход из положения - использовать Leaky ReLUs. Цена такого решения - добавляется много параметров.
      Но Вы учитывайте пожалуйста, что читается не курс по нейронным сетям, а про анализ данных. Хотя возможно и стоит в будущем прочесть курс по Deep Learning'у

    • @ОлегСотов-ю9с
      @ОлегСотов-ю9с 5 лет назад

      @@Vadim_Abbakumov , для LeakyReLU нужно только подобрать коэффициент наклона, т. е. внешний параметр. Если, конечно, вы не имели в виду Parametric ReLU, параметры в котором требуется обучать.

  • @olehberehovskyi6082
    @olehberehovskyi6082 5 лет назад

    Поставил себе на первый слой 200 нейронов, на второй - 300 и аккураси уже 84,74% xD

    • @olehberehovskyi6082
      @olehberehovskyi6082 5 лет назад

      Поменял релу на сигмоиду и уже 91,52%

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 5 лет назад +2

      Не могу принять нейронную сеть, в которой нейронов больше,
      чем наблюдений в обучающей выборке... Буду держаться правила KISS.