Лекция смотрится на одном дыхании! Конечно, не все понятно с первого раза, а по методам оптимизации и прочим настройкам придется и документацию дополнительно почитать... Но Вы вселили в меня уверенность в том, что я смогу *управлять* обучением сети с помощью Keras, а не блуждать, как в темном лесу. Вадим Леонардович, спасибо!
Полезная лекция, как по мне, большое спасибо. Но должен отметить, что безусловно компетентный лектор, по-моему, слишком часто прыгает с одного места на другое, причем совсем неожиданное. Это держит в постоянном напряжении. Спасает только то, что можно перемотать и повторить.
Спасибо за лекцию! У меня есть вопрос, могу ли я увидеть accuracy своей тестовой выборки с определенным пороговым значением (бинарный классификатор). Я хочу что бы я видел % точности тех прогнозов в которых система уверена в одном из классов на 60%. Спасибо!
Уважаемый Вадим Леонардович, вы забыли стандартизировать данные. У меня с такой же архитектурой, но со стандартизированными данными получилось околи 97% accuracy на тестовых данных. Вот как нужно стандартизировать: from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
Вы правы. Так лучше. Хотя отказ от стандартизации не ошибка, он часто ускоряет обучение, но обучать можно и без стандартизации. Ваш код правильный, но его недостаточно. Надо сохранить средние и стандартные отклонения, чтобы на тестовом множестве и в production при стандартизации использовать именно их.
Перед стандартизацией StandardScaler необходимо выполнить логарифмирование. Так как StandardScaler вычетает среднее и делит на стандартное отклонение , в таком случае если в данных были выбросы , мы получим искажённое среднее. И стандартизация не даст единого масштаба
а почему на первом слое в примере с винами, 13 характеристик а нейронов всего 9? мы не потеряем какие-нибудь важные моменты в характеристиках упростив первый слой?
IMHO даже 9 много. С 13 нейронами в первом слое очень велик риск переобучения. Мы надеемся отфильтровать шум в данных, сохранив закономерность (часто говорят сигнал).
Вадим Аббакумов спасибо за ответ! а есть какие-нибудь эмпирические приемы как выбрать количество нейронов в первом слое? Слышал, что для анализа изображений, допустим, фиксированного размера NxM, нейронов берут N*M штук? Или лучше не так? . А все понял, стоило лишь посмотреть следующую лекцию 😄
ух, мысль у лектора скачет от одной к другой и приэтом он использует несколько файлов примеров. очень тяжело следить затмыслью лектора. почему бы не сделать один ноутбук, где последовательно изложить материал и не следовать ему? в конце лекции вообще убил пример: лектор показал ноутбук, в котором сначала преобразовал значения из pandas df в numpy arrayа, потом пробует получить первые строки данных этого массива через метод pandas head(), у него не получается и он пишет: а почему не получилось? хочется спросить в ответ: зачем этот вопрос? ведь лекция не по pandas а по обучению нейронных сетей в keras!!
1. Включил, так как видел, что новички часто ошибаются в этом месте. 2. Это не лекция по обучению нейронных сетей в keras. Материал должен показать основные элементы обучения нейронных сетей, чтобы облегчить изучение TF. Более того, сейчас в лекциях я вместо TF использую PyTorch. Хотя IMHO после лекций слушатели без проблем обучают нейронные сети 3. Один ноутбук еще хуже. Приходится либо скакать по нему, либо повторять фрагменты скрипта несколько раз. Тут Вы не в теме. 4. Вам просто не зашел мой формат. Могу порекомендовать найти на youtub'e курс, в котором четко и нараспев пересказывается книга Шолле Глубокое обучение на Python. Похоже Вам такой формат подойдет больше. Кстати, книга очень неплохая.
Очень нравится лекция, спасибо! На 9 минуте в матрице сопряжения мы неправильно сказали мальчик на девочку в левом нижнем все таки… значит штраф самый большой должен туда, а в верхнем правом - это мальчики, которых мы называем девочками - с этими случаями мы согласны на ошибку - туда можно штраф 1 заложить
На 59:00 про ограничения, связанные с производной сигмоиды. Возник вопрос: а почему не компенсировать это дело различными лернинг рейтами для разных слоев? Если ошибка идет назад с таким затуханием, то можно было бы лернинг рейты делать соответственно больше на слоях дальше от выхода.
Почему бы и нет. Можно пробовать. Но если у нейронной сети больше 100 слоев, брать параметр скорости обучения у первого слоя 2**100? Лично мне проще использовать RELU и не думать о подборе скорости у каждого слоя...
Спасибо за ответ! (даже не ожидал, что тут в комментариях сам лектор может ответить) Действительно, для 100 слоев такой подход не годится. Я как-то думал о 3-5 слоях. Насчет РЕЛУ было бы здорово узнать, как для нее вообще обстоит дело с минусовыми данными на входе. Она ведь в таком случае выдает y=0. Получается, и значение 0, и производная 0. Такой нейрон "умер" навсегда, или это как-то обошли в алгоритме обратного распространения ошибки для РЕЛУ?
Может так умереть до 40% нейронов. Выход из положения - использовать Leaky ReLUs. Цена такого решения - добавляется много параметров. Но Вы учитывайте пожалуйста, что читается не курс по нейронным сетям, а про анализ данных. Хотя возможно и стоит в будущем прочесть курс по Deep Learning'у
@@Vadim_Abbakumov , для LeakyReLU нужно только подобрать коэффициент наклона, т. е. внешний параметр. Если, конечно, вы не имели в виду Parametric ReLU, параметры в котором требуется обучать.
"Раз молчите - значит боитесь, если боитесь - значит непонятно" - эх, если бы все преподаватели были такими идеальными
Лекция смотрится на одном дыхании! Конечно, не все понятно с первого раза, а по методам оптимизации и прочим настройкам придется и документацию дополнительно почитать... Но Вы вселили в меня уверенность в том, что я смогу *управлять* обучением сети с помощью Keras, а не блуждать, как в темном лесу. Вадим Леонардович, спасибо!
Огромное спасибо за лекцию!
Огромное спасибо за лекции!
Полезная лекция, как по мне, большое спасибо.
Но должен отметить, что безусловно компетентный лектор, по-моему, слишком часто прыгает с одного места на другое, причем совсем неожиданное. Это держит в постоянном напряжении. Спасает только то, что можно перемотать и повторить.
17:00 это метод градиентного спуска
Правильно я понял, что при подаче обучающего объекта последовательно пересчитываются все веса всех внутренних узлов?
В теории да. На практике коррекции весов производятся после подачи пакета наблюдений из обучающей выборки (batch).
Спасибо за лекцию! У меня есть вопрос, могу ли я увидеть accuracy своей тестовой выборки с определенным пороговым значением (бинарный классификатор). Я хочу что бы я видел % точности тех прогнозов в которых система уверена в одном из классов на 60%. Спасибо!
# Пусть пороговое значение 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)
Уважаемый Вадим Леонардович, вы забыли стандартизировать данные. У меня с такой же архитектурой, но со стандартизированными данными получилось околи 97% accuracy на тестовых данных. Вот как нужно стандартизировать:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
Вы правы. Так лучше.
Хотя отказ от стандартизации не ошибка,
он часто ускоряет обучение, но обучать можно и без стандартизации.
Ваш код правильный, но его недостаточно. Надо сохранить средние и стандартные отклонения, чтобы на тестовом множестве и в production
при стандартизации использовать именно их.
Что делает стандартизация данных?
Перед стандартизацией StandardScaler необходимо выполнить логарифмирование. Так как StandardScaler вычетает среднее и делит на стандартное отклонение , в таком случае если в данных были выбросы , мы получим искажённое среднее. И стандартизация не даст единого масштаба
@@drewya9186 Стандартизация не улучшает качество модели, но может на порядки ускорить обучение
а почему на первом слое в примере с винами, 13 характеристик а нейронов всего 9? мы не потеряем какие-нибудь важные моменты в характеристиках упростив первый слой?
IMHO даже 9 много. С 13 нейронами в первом слое очень велик риск переобучения. Мы надеемся отфильтровать шум в данных, сохранив закономерность (часто говорят сигнал).
Вадим Аббакумов спасибо за ответ! а есть какие-нибудь эмпирические приемы как выбрать количество нейронов в первом слое? Слышал, что для анализа изображений, допустим, фиксированного размера NxM, нейронов берут N*M штук? Или лучше не так? . А все понял, стоило лишь посмотреть следующую лекцию 😄
"Приложенные файлы" -- ССЫЛКА НЕ РАБОТАЕТ (This site can’t be reached)
ссылки заработали -- спасибо
ух, мысль у лектора скачет от одной к другой и приэтом он использует несколько файлов примеров. очень тяжело следить затмыслью лектора. почему бы не сделать один ноутбук, где последовательно изложить материал и не следовать ему? в конце лекции вообще убил пример: лектор показал ноутбук, в котором сначала преобразовал значения из pandas df в numpy arrayа, потом пробует получить первые строки данных этого массива через метод pandas head(), у него не получается и он пишет: а почему не получилось? хочется спросить в ответ: зачем этот вопрос? ведь лекция не по pandas а по обучению нейронных сетей в keras!!
1. Включил, так как видел, что новички часто ошибаются в этом месте.
2. Это не лекция по обучению нейронных сетей в keras. Материал должен показать основные элементы обучения нейронных сетей, чтобы облегчить изучение TF. Более того, сейчас в лекциях я вместо TF использую PyTorch. Хотя IMHO после лекций слушатели без проблем обучают нейронные сети
3. Один ноутбук еще хуже. Приходится либо скакать по нему, либо повторять фрагменты скрипта несколько раз. Тут Вы не в теме.
4. Вам просто не зашел мой формат. Могу порекомендовать найти на youtub'e курс, в котором четко и нараспев пересказывается книга Шолле Глубокое обучение на Python. Похоже Вам такой формат подойдет больше. Кстати, книга очень неплохая.
Очень нравится лекция, спасибо! На 9 минуте в матрице сопряжения мы неправильно сказали мальчик на девочку в левом нижнем все таки… значит штраф самый большой должен туда, а в верхнем правом - это мальчики, которых мы называем девочками - с этими случаями мы согласны на ошибку - туда можно штраф 1 заложить
1:15:53 Все так делают. LOL
интересно какого монстра обучали на добыче биткоина🤯
Прекрасный лектор, отличный курс. Узнал много полезного
На 59:00 про ограничения, связанные с производной сигмоиды. Возник вопрос: а почему не компенсировать это дело различными лернинг рейтами для разных слоев? Если ошибка идет назад с таким затуханием, то можно было бы лернинг рейты делать соответственно больше на слоях дальше от выхода.
Почему бы и нет. Можно пробовать. Но если у нейронной сети больше 100 слоев, брать параметр скорости обучения у первого слоя 2**100? Лично мне проще использовать RELU и не думать о подборе скорости у каждого слоя...
Спасибо за ответ! (даже не ожидал, что тут в комментариях сам лектор может ответить) Действительно, для 100 слоев такой подход не годится. Я как-то думал о 3-5 слоях.
Насчет РЕЛУ было бы здорово узнать, как для нее вообще обстоит дело с минусовыми данными на входе. Она ведь в таком случае выдает y=0. Получается, и значение 0, и производная 0. Такой нейрон "умер" навсегда, или это как-то обошли в алгоритме обратного распространения ошибки для РЕЛУ?
Может так умереть до 40% нейронов. Выход из положения - использовать Leaky ReLUs. Цена такого решения - добавляется много параметров.
Но Вы учитывайте пожалуйста, что читается не курс по нейронным сетям, а про анализ данных. Хотя возможно и стоит в будущем прочесть курс по Deep Learning'у
@@Vadim_Abbakumov , для LeakyReLU нужно только подобрать коэффициент наклона, т. е. внешний параметр. Если, конечно, вы не имели в виду Parametric ReLU, параметры в котором требуется обучать.
Поставил себе на первый слой 200 нейронов, на второй - 300 и аккураси уже 84,74% xD
Поменял релу на сигмоиду и уже 91,52%
Не могу принять нейронную сеть, в которой нейронов больше,
чем наблюдений в обучающей выборке... Буду держаться правила KISS.