Распознавание объектов на изображениях | Глубокие нейронные сети на Python

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

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

  • @Alikaros
    @Alikaros 5 лет назад +31

    потрясающая способность говорить по сути и без воды. Спасибо за полезную информацию

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

      Пожалуйста! Успехов.

  • @romanzakharov6344
    @romanzakharov6344 6 лет назад +41

    Здравствуйте, Андрей - с момента выхода лекций кое-что поменялось, пришлось залезсть в документацию Keras и немного поменять код,
    иначе выдает ошибки - это для тех кто смотрим курс,
    model=Sequential()
    # Обязательно в слоях обработки изображения указывайте параметр data_format="channels_last" или data_format="channels_first", чтобы согласовать между слоями
    #положение переменной количества каналов, т.к. MaxPooling2D может урезать вам не само изображение а количество каналов, что вызовет ошибку
    # Также следует обновить название для сверточных слоев Conv2D вместо Convolution2D, но это не обязательно
    model.add(Conv2D(filters=32, kernel_size=(3, 3), padding='valid', input_shape=(32,32,3),
    activation='relu',data_format="channels_last")) # (2)
    model.add(Conv2D(filters=32, kernel_size=(3, 3),
    activation='relu',data_format="channels_last")) # (3)
    model.add(MaxPooling2D(pool_size=(2,2), data_format='channels_last')) # (4)
    model.add(Dropout(0.25)) # Добавим слой регуляризации
    model.add(Conv2D(64, (3, 3), padding='valid', activation='relu',data_format="channels_last")) # (5)
    model.add(Conv2D(64, (3, 3), activation='relu',data_format="channels_last")) # (6)
    model.add(MaxPooling2D(pool_size=(2,2), data_format='channels_last')) # (7)
    model.add(Dropout(0.25)) # Добавим слой регуляризации
    model.add(Flatten())
    model.add(Dense(512, activation='relu')) # (8)
    model.add(Dropout(0.5)) # Добавим слой регуляризации
    model.add(Dense(10, activation='softmax')) # (9)

    • @AndreySozykin
      @AndreySozykin  6 лет назад +4

      Да, действительно, изменений много. В ближайшее время планирую перезаписать с работающими командами.

    • @romanzakharov6344
      @romanzakharov6344 6 лет назад +3

      Ну мне кажется это можно воспринять как лишний повод пошевелить мозгами самому) так что так лаже лучше.

    • @AndreySozykin
      @AndreySozykin  6 лет назад +17

      Курс для начинающих, обычно не очень удобно разбираться сразу с несколькими вещами: устройством нейронок и нерабоиающим кодом.

    • @Kpacu8o
      @Kpacu8o 6 лет назад +1

      Можете уточнить , почему значение старого параметра border_name(новый-padding) в старой версии , в новой превратилось в "valid" вместо "same" ? Тем-более если верить сайту TF то valid - дефолтное значение этого параметра

    • @Кап95
      @Кап95 4 года назад +2

      @@AndreySozykin Когда? Или Уже?)

  • @qwelice
    @qwelice 3 года назад +3

    Огромное спасибо за максимально понятное объяснение, благодаря вам я смог подружиться с keras :}

    • @AndreySozykin
      @AndreySozykin  3 года назад +2

      Отличный результат!

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

    Для тех кто хочет повторить: Пишите padding="same" вместо border_mode='same'
    Спасибо за видео

  • @sergeant_major_major
    @sergeant_major_major 6 лет назад +9

    Отличная подача материала, спасибо!

    • @AndreySozykin
      @AndreySozykin  6 лет назад +2

      Пожалуйста! Рад, что понравилось!

  • @sergafanasiev7956
    @sergafanasiev7956 5 лет назад +5

    Сегодня 16.06.2019 выполнял этот видеоурок на своей локальной машине на GPU. Вот эту строку "from tensorflow.keras.layers.convolutional import Convolution2D" пришлось заменить на "from tensorflow.keras.layers import Convolution2D, MaxPooling2D", иначе не работало. Также пришлось переделать вот здесь: "model.add(Convolution2D(32,3,2, padding='same', input_shape=(32,32,3), activation="relu"))
    model.add(Convolution2D(32,3,2, padding='same',activation="relu"))
    model.add(MaxPooling2D(pool_size=(2,2), padding='same'))". А иначе говорил про какую то проблему, что-то типа "у вас отрицательная размер размерности при вычитании 2 на 1"

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

    Также для тех кто просто скачал архив данных - они там не структурированы, поэтому когда будете их компоновать, то делайте это в соответствие с переменной data_format
    # Обрати внимание на входные параметры,
    # filters=количество карт - видов ядер свертки, которые используются
    # kernel_size=(x1,x2) - размер окна ядра свертки
    # input_shape=(,y1,y2) - yi-размер изображения, !заранее согласуй с параметром
    # data_format-характеризует положение переменной количества каналов в кортеже, мб как channels_first - тогда сначала
    # ставим количество каналов или channels_last - тогда ставим количество каналов в конец кортежа.
    # !! В соответствии с этой переменной также нужно строить иерархию данных channels_first - сначала разделение по каналам,
    # а потом уже по строкам и столбцам
    Предлагаю свой вариант для data_format='channels_first':
    x_train - набор данных
    x_train1=[[i[:32*32],i[32*32:2*32*32],i[2*32*32:]] for i in x_train]
    x_train2=[[[j[k*32:(k+1)*32] for k in range(32)] for j in i] for i in x_train1]
    x_train2 имеет иерархию размеров (3,32,32)

  • @avvdacha
    @avvdacha 5 месяцев назад

    Здравствуйте! Насколько близкие изображения можно так классифицировать? Подход классификации, например, подходит для отличия больного человека от здорового, для определения возраста дерева и пр.?

  • @ruslanabduramanov678
    @ruslanabduramanov678 7 лет назад +1

    Андрей, добрый день!
    В примере CIFAR-10, в модели, в первом сверточном слое вы вводите параметр - "border_mode=''same'" (в keras 2. - padding). Этого параметра нет в примере MNIST. Объясните пожалуйста его смысловую нагрузку для модели?

  • @АлександрКаптуров-с8и
    @АлександрКаптуров-с8и 6 месяцев назад

    Андрей, чем обусловленна выбранная Вами архитектура модели для данного урока?

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

    Подскажите пожалуйста, когда мы комбинируем слои свёртки, как они налагаются друг на друга?
    сначала например 10 ядер, то есть получили карту из 10 признаков, потом на следующем слое 13 ядер, вот эти 13 ядер как наложатся на те 10, которые получились на предыдущем слое?

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

    Андрей, здравствуйте. Получается, что надо найти или выбрать набор данных или базу данных при тестировании своей, например CIFAR-100 или Сосо-128? Есть ли базы данных по продукции в супермаркетах? Заранее спасибо

  • @sergeimikhailov2643
    @sergeimikhailov2643 7 лет назад +2

    при ошибке "The specified size contains a dimension with value"
    надо поменять флаг в keras.json
    "image_data_format": "channels_first"
    www.itdadao.com/articles/c15a1247458p0.html

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

    подскажите а как обычно решается задача установления факта наличия или отсутствия какого то одного класса на фото

  • @ПавелЗуев-ж1б
    @ПавелЗуев-ж1б 4 месяца назад

    Дружище! скажи с чего вообще начать нужно? у меня есть картинки и есть команды макроссов (которые пишу сам) . в какую программу это вставить нужно? какую программу установить нужно? я 90% текста из видео не понимаю, потому что не знаю с чего вообще начали эти тексты, после включения компьютера и запуска виндовса. где вот этот промежуток?

  • @e_butcher
    @e_butcher 6 лет назад +1

    Андрей, добрый день.
    В этом видео Вы говорите, что первый сверточный слой состоит из "32 карт признаков 3 на 3. Каждая с собственным ядром". Однако в предыдущем видео Вы рассказываете, что в сверточном слое все нейроны имеют одинаковое ядро и что картой признаков называется набор слоев с разными ядрами? Если это так, то как в указанном примере может быть 32 карты признаков и какой размер каждого слоя?..
    Спасибо.

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

    Здравствуйте, пробую перейти на практическую работу, но перебрасывает на сайт Tilda, как открыть ноутбук с практической работой к этому видео?

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

      Актуальная версия курса с упражнениями на платформе OpenEdu - openedu.ru/course/urfu/PYDNN/
      Можно бесплатно все делать.

  • @evgeniyevgeniy8352
    @evgeniyevgeniy8352 6 лет назад +3

    Здравствуйте! Подскажите, пожалуйста, разве validation set нужна не для поиска гиперпараметров?
    Просто в данном примере, где нет поиска гиперпараметров, совсем непонятно, зачем она вообще нужна. Почему нельзя обучить сеть на train set, а проверить качество на test set? Или Вы предварительно с её помощью находили лучшие гиперпараметры?

    • @AndreySozykin
      @AndreySozykin  6 лет назад +3

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

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

    Привет, Андрей. Спасибо за этот курс по НС, очень помогает первому знакомству с темой.
    Есть пара вопросов по CNN:
    1. В чем смысл 2х последовательных сверточных слоев без макспулинга между ними?
    2. По количеству карт признаков: Если мы к 3м цветовым каналам применяем 32 свертки, то получаем 32*3 = 96 карты? Дальнейшие 32 свертки применяются опять ко всем картам независимо и получается 96*3 или как-то иначе?
    А дальше еще идут 2 слоя по 64 свертки. Получается какое-то слишком большое число картинок.

  • @nikitakorolev8391
    @nikitakorolev8391 6 лет назад +3

    Получил точность 0.1 на тренировочных данных, скопировал код с репозитория - то же самое. В чем может быть проблема?

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

      Возможно, проблемы с установкой библиотек.

  • @АлексейГоршков-ц6т
    @АлексейГоршков-ц6т 5 лет назад +1

    Подскажите пожалуйста. Не до конца понимаю, мы передаем же 3-х мерный массив, учитывая RGB. Тогда как наш слой (2D) принимает 3D?

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

      Каждый канал ядром свертки обрабатывается отдельно.

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

    Кто-либо может подсказать, по какому принципу указываются значения в каждой из функций ?

  • @NukDokPlex
    @NukDokPlex 5 лет назад +1

    Я ускорил процесс обчуения в 17 раз, мне удалось к этому делу подключить свою видеокарту RX 480 8GB с помощью библиотеки PlaidML и одна эпоха проходит всего за 21 секунду (!)

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

      1 эпоха за 5 секунд. нвидэ 1050

  • @antonvol
    @antonvol 6 лет назад +2

    Привет! А как адаптировать подобную конструцию под другие изображения? Если я, например, хочу научить сеть распознавать конкретный обьект - отвёртку на фотографиях. Как заменить данные cifar10.load_data() на свой вариант?

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

      Вот видео на эту тему - ruclips.net/video/_bH2oh75Kdo/видео.html

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

      Андрей, большое спасибо!

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

    Скажите пожалуйста можно ли с помощью "python face recognition" создать похожи сервис каким был Findface?? насколько это сложная задача для программистов?

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

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

  • @dank6799
    @dank6799 7 лет назад +3

    Добрый день, большое спасибо за ваш курс, очень интересно и доступно,
    не планируете в своем курсе разобрать модель "неокогнитрон"?

    • @AndreySozykin
      @AndreySozykin  7 лет назад +2

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

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

    Я правильно понимаю, что если исходные данные черно-белые, в input_shape вместо 3 будет 1?

  • @НикитаЛазарев-п2п
    @НикитаЛазарев-п2п 7 лет назад +2

    Здравствуйте, Андрей! Во время обучения модели возникает ошибка(" AbstractConv2d Theano optimization failed"). На англоязычных форумах писали, что нужно в конфигах к theano нужно указать следующее: theano.config.optimizer="None".
    Однако это все равно не решает проблему, подскажите, пожалуйста, в чем может быть дело.

    • @AndreySozykin
      @AndreySozykin  7 лет назад

      Не знаю. Я сейчас уже не использую theano и перевожу курс на TensorFlow. Можно попробовать установить TensorFLow вместо Theano. Вот инструкция, как эт осделать - www.asozykin.ru/deep_learning/2017/09/07/Keras-Installation-TensorFlow.html

  • @736939
    @736939 6 лет назад +2

    7:19 здесь вы сказали, что слой будет иметь 32 карты признаков, но какие именно карты признаков - разве не в зависимости от поставленной цели мы должны выбирать какие именно карты признаков должны быть использованы в Convolutional Layer ? Заранее Спасибо

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

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

    • @736939
      @736939 6 лет назад +1

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

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

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

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

      Спасибо.

    • @СашкаБелый-ч6м
      @СашкаБелый-ч6м 4 года назад

      @@AndreySozykin вы написали - «Нейронная сеть меняет коэффициенты в сверточных слоях». Может подразумевается изменение коэфицентов конкретно в Ядрах свёрточных слоёв или всё же речь о полносвязных (скрытых) слоях которые находятся на выходе за свёрточной сетью, ведь именно их веса регулируются методом обратного распростронения ошибки?

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

    Андрей, огромное спасибо за материал! Вы делаете очень ценный труд!
    У меня есть вопрос:
    Я проделала работу по данной лекции, используя GPU NVIDIA GeForce 940MX. Сборка библиотек: python 3.7.0 + CUDA Toolkit 10.0 + cuDNN 7.6.0 + Tensorflow-gpu 2.0.0.
    У меня с Вашими гиперпараметрами скорость обучения намного выше (порядка 10сек/эпоху), но точность модели порядка 20%.
    Добиться 40% точности получилось только с такими значениями: число нейронов 800, оптимизатор adam, размер мини-выборки 256, количество эпох 150. При этом налицо переобучение.
    Правда, в коде я добавила padding='same' для 4го свёрточного и 2го слоя подвыборки (иначе была ошибка размерностей).
    О чём говорит такой результат? В какую сторону нужно копать, чтобы я могла эффективно заниматься машинным обучением на данной машине? Как вообще быть уверенным в качестве своей работы, если ошибок программа не выдаёт, а результат настолько отличается от работы аналогичной сети в других условиях?

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

      В Tensorflow 2 много поменялось, поэтому результаты могут отличаться существенно.

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

      @@AndreySozykin спасибо

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

      Victoria,
      Была аналогичная беда.
      Можно в шапке поменять на следующее:
      import numpy
      from tensorflow.keras.datasets import cifar10
      from tensorflow.keras.models import Sequential
      from tensorflow.keras.layers import Dense, Flatten, Activation
      from tensorflow.keras.layers import Dropout
      from tensorflow.keras.layers import Conv2D, MaxPooling2D
      from tensorflow.keras import utils
      from tensorflow.keras.optimizers import SGD
      Как в моём ноутбуке github.com/vasiliyeskin/MachineLearningExperiences/blob/master/cifar10/CIFAR10_for_Colaboratory.ipynb

  • @ЕвгенийФролов-ф3е
    @ЕвгенийФролов-ф3е 8 лет назад +2

    Здравствуйте, Андрей. Меня интересует вопрос: насколько мощными должны быть вычислительные возможности ПК , на котором запускаются приложения, использующие алгоритмы нейронных сетей? Например, ПК офисного класса смогут их потянуть или нужны получше?

    • @AndreySozykin
      @AndreySozykin  8 лет назад +3

      На офисном ПК можно запускать. Примеры из курса точно будут работать.
      Кроме того, в нейронных сетях много времени занимает обучение. После обучения сеть работает достаточно быстро. Поэтому можно взять уже обученную сеть и использовать ее, даже на слабом компьютере или мобильном устройстве.
      Уже обученные модели есть, например, в библиотеке Caffe - caffe.berkeleyvision.org/model_zoo.html

    • @zogxray
      @zogxray 7 лет назад

      В офисный пк можно воткнуть видяху с CUDA.

  • @runningbathattendantprogra9582
    @runningbathattendantprogra9582 7 лет назад +2

    Здравствуйте, Андрей.
    Для чего нужно задавать seed? В чем суть этой операции?

    • @AndreySozykin
      @AndreySozykin  7 лет назад +3

      Это значение инициализации генератора случайных чисел. Если задаем одинаковый seed, то генератор случайных чисел будет выдавать одну и ту же последовательность таких чисел. Так как для тренировки нейронных сетей используются стохастические методы, то результат обучения будет зависеть от того, какие случайные числе были сгенерированы. Чтобы этого избежать задаем seed.
      Можно попробовать не задавать seed, запустить обучение несколько раз и посмотреть, какие будут результаты.

  • @albigr5004
    @albigr5004 6 лет назад +2

    Добрый день! Нужна программа для распознавания объектов и подсчет их на изображении, могли бы вы это сделать как с вами связаться?

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

      Добрый день. Мои контакты здесь - www.asozykin.ru/contacts

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

    Tesor+Keras, пример с github не работает. Во время запуска обучения прекращается работа программы python. Не зеаю что делать и в чём косяк. Помогите пожалуйста

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

      еррортрейс дайте пожалуйста

  • @user-xl2tf4gq1g
    @user-xl2tf4gq1g 5 лет назад +2

    а как сделать, чтобы с большим разррешением можно было распознавать? да и вообще с произвольным

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

      Нужно сеть делать с большим разрешением на входе. Популярная сеть ResNet использует разрешение 224×224, а сеть Inception - 299×299.
      Размер входных данных в сеть фиксирован. Если хотим обрабатывать изображения разного размера, то их нужно преобразовывать к входному разрешению нейронной сети.

    • @user-xl2tf4gq1g
      @user-xl2tf4gq1g 5 лет назад

      @@AndreySozykin спасибо огромное!

  • @iambricksman
    @iambricksman 7 лет назад

    Получил 77% на тренировочном наборе, 72% на тестовом.
    Возникли следующие проблемы:
    1) Изменение двух строчек с макспулингом на model.add(MaxPooling2D(pool_size=(2,2), dim_ordering="th")).
    2) Четвертый слой свертки потребовалось дополнить "border_mode='same'", как и в третьем.
    3) В первом слое свертки потребовалось заменить input_shape=(3,32,32) на input_shape=(32,32,3).
    С чем может быть связано такое различие или я что-то делаю неверно?

    • @AndreySozykin
      @AndreySozykin  7 лет назад

      +Konstantin Isaenkov наверняка вы используете tensorflow в качестве вычислительного бекенда. Примеры рассчитаны на theano. У них разный порядок хранения тензоров.

  • @kotishakot9582
    @kotishakot9582 5 лет назад +1

    Данная реализация будет работать при распознавании с картинок рукописных букв???

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

      Нужно будет подготовить обучающий набор для распознавания букв. Сеть сможет распознавать по одной букве.
      Если нужно распознавать текст, то лучше использовать готовые библиотеки, например - github.com/tesseract-ocr/tesseract

  • @ЖанайдарКеттебеков

    У меня не работала model.add(MaxPooling2D(pool_size=(2, 2),)), изменил на model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th")) и перестала выдавать ошибку, не знаю точно правильно ли так делать

    • @ЖанайдарКеттебеков
      @ЖанайдарКеттебеков 6 лет назад +1

      ошибку выдавало потому что "первый сверточный слой" должен иметь input_shape = (32, 32, 3), а не 3, 32, 32. Теперь не нужно использовать dim_ordering="th"

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

      Да, это значит, что в качестве бекенда используется TensorFlow. Я сейчас весь курс перевел с Theano на TensorFlow, переделаю и первые видео, чтобы не было проблем у начинающих.

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

    Здравствуйте!
    А как можно посмотреть сколько часов осталось работы в Coloboratory?

  • @IgorOrlov
    @IgorOrlov 7 лет назад

    1.почему в seed передаётся именно 42 ?
    2. как самостоятельно создавать данные для обучения в формате cifar ?

    • @AndreySozykin
      @AndreySozykin  7 лет назад +1

      +Igor Orlov,
      1. В seed можно передавать любое число.
      2. Для обучения в формате cifar10 нужно взять картинку, уменьшить размер до 32x32, прочитать значения цветов RGB и перевести их в массивы numpy.

    • @IgorOrlov
      @IgorOrlov 7 лет назад

      ясно, спасибо

  • @ВалентинаДворжак-ф6к

    Здравствуйте, спасибо за полезный курс!!! В следующей за этой лекцией практической работе висит ссылка на рекламу , вместо работы ((( и по всему блоку курса распознавания тоже такие ссылки есть .

  • @dondublon1
    @dondublon1 7 лет назад +1

    Поясните пожалуйста, что такое "карта признаков" и почему в первых свёрточных слоях их именно 32.

    • @AndreySozykin
      @AndreySozykin  7 лет назад +2

      +Leonid Rumatov, карта признаков (feature map по-английски) - это набор слоев, которые используют разные ядра свертки. Сколько должно быть карт признаков на каждрм слое заранее сказать нельзя. Поэтому пробуют несколько вариантов и выбирают лучший.

    • @dondublon1
      @dondublon1 7 лет назад +1

      Спасибо. До конца неясно, но уже понятно, куда копать.

  • @Андр-ч8о
    @Андр-ч8о 5 лет назад

    Подскажите как мне заставить ее считывать цифры с фотки.

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

    Здравствуйте, Андрей. По поводу "задаём seed - numpy.ramdom.seed()" - это статический параметр класса для рандомайзера? Т.е. керас использует под капотом нампаевский рандомайзер? Таким образом задавая сид мы определяем однозначно для всего текущего модуля предопределяемость значений рандомайзера, так что при любом вызове рандомайзера будем всегда иметь одну и ту же последовательность чисел, независимо от способа вызова?

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

      Сейчас, когда Keras в составе TenserFlow 2.0, установка seed усложнилась, вот ссылка - www.tensorflow.org/api_docs/python/tf/random/set_seed
      Видео переделаю.

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

      @@AndreySozykin Спасибо!

  • @ruslanruslanov6528
    @ruslanruslanov6528 7 лет назад +1

    Здравствуйте Андрей, подскажите, можно ли вместо cifar10 использовать свою базу изображений? Как можно это реализовать?

    • @AndreySozykin
      @AndreySozykin  7 лет назад

      +Ruslan Ruslanov, да, можно. Следующее видео будет как раз на эту тему. Я уже его записал, осталось смонтировать.

    • @ИпатовАртём
      @ИпатовАртём 7 лет назад

      Здравствуйте, никак не пойму, что необходимо дописать, чтобы заработала модель сверточной сети cifar. Код брал отсюда github.com/sozykin/dlpython_course/blob/master/cifar10/cifar10.py, полностью скопировал. Однако выбивает ошибку ValueError: Error when checking target: expected dense_2 to have 2 dimensions, but got array with shape (50000, 1, 10). Ругается на лишнюю размерность... Ничего не понимаю. Вроде размерность под тензор флоу переписывали. Не понимаю откуда она берется. Можете подсказать?

    • @ruslanruslanov6528
      @ruslanruslanov6528 7 лет назад +1

      Andrey Sozykin жду с нетерпением :)

    • @ИпатовАртём
      @ИпатовАртём 7 лет назад +1

      Кому интересно, то решил пересбором тренировочных меток y. У меня в исходном тренировочном наборе откуда то было лишнее измерение:
      (50000, 32, 32, 3)
      (50000, 1)
      (50000, 32, 32, 3)
      (50000, 1, 10)
      Прописал так y_train = y_train.reshape(50000,). Заработало...
      (50000, 32, 32, 3)
      (50000,)
      (50000, 32, 32, 3)
      (50000, 10)

    • @AndreySozykin
      @AndreySozykin  7 лет назад

      +Ruslan Ruslanov, к сожалению, у меня сломался ноутбук, на котором было несмонтированное видео. Придется пепезаписывать :-(

  • @dondublon1
    @dondublon1 7 лет назад +1

    Раз уж зашла речь про скорость работы - возник вопрос. У меня 8-ядерный процессор, но я вижу, что у меня обучение занимает только четыре ядра. (Поставил параллельно два обучения - загрузились 8, всё по честному.) Где можно сконфигурить, чтобы загрузились все 8? Копать в Theano?

    • @AndreySozykin
      @AndreySozykin  7 лет назад +1

      Какая модель процессора? Часто бывает, что операционная система показывает 8 ядер, но у процессора 4 физических ядра и каждое ядро может выполнять два потока (например, Intel Hyper Threading). Это полезно, когда небольшая вычислительная нагрузка, например, при работе с базами данных и сетевыми приложениями. Но если обучаем нейронные сети, то нагрузка на процессор большая и два потока на одном физическом ядре не ускоряют работу. Возможно, поэтому используется только 4 ядра.

    • @dondublon1
      @dondublon1 7 лет назад +1

      Процессор intel core i7-6700. да, у него действитиельно 4 "честных" ядра, спасибо. Правда, неясно, почему тогда 2 процесса занимают все, но это уже другой вопрос, в основном ясно.

    • @AndreySozykin
      @AndreySozykin  7 лет назад

      +Leonid Rumatov, один процесс определяет, сколько физических ядер и запускает на таком количестве. Но между собой процессы никак не координируются. Для этого нужен внешний менеджер ресурсов, например, SLURM.

    • @dondublon1
      @dondublon1 7 лет назад

      Да, я не в смысле "процесс ОС". Процесс обучения.

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

    а можно, пожалуйста, ссылку на урок по распознаванию рукописных цифр

    • @MERGAB-z1o
      @MERGAB-z1o 3 года назад

      Он в плейлистах на этом канале

  • @yuriihalychanskyi8764
    @yuriihalychanskyi8764 6 лет назад +2

    Здравствуйте, а почему в предпоследнем слое именно 512 нейронов ?

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

      Нет особенной причины. Можно попробовать 256 или 1024 и посмотреть, что получится.

  • @ИванИванович-ы6щ6й
    @ИванИванович-ы6щ6й 5 лет назад +1

    Вот мне интересно, программисты когда-нибудь разовьются как вид способный объяснять свои проблемы на понятийном уровне. Это как объяснять уравнение y=x^2. Вместо того, чтобы сказать что это парабола, он начинает скурпулёзно вычислять массив координат. Ничего же не понятно. Ну не может он объяснить эту математическую модель. Я не все понял, но эта модель похожа на усложненную модель перцептрона Розенблатта. Перцептрон проверяет образ по принципу совпадения детали и штампа с допустимыми отклонениями. Дырочки должны совпадать с дырочками. Черные клеточки должны совпадать с черными клеточками. Этот метод распознавания работает только на неизменяемых образах таких как символьные переменные одного стиля. Лошадь так невозможно распознать - она спереди и сзади разную форму имеет. Лошадь - это изменяемый образ, его на совпадение штампу не проверить. Перцептрон Розенблатта - добавил еще несколько слоев нейрончиков и принципиально ничего не изменилось - идея та же.

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

      Тут два фактора:
      1. если вы рассмотрите разные образы лошадей как точки на графике некоторой "лошадиной" функции, то полносвязная сеть занимается тем, что своими весами аппроксимирует эту функцию (это и есть основное доказанное свойство сети). Т.е., она способна определить, лежит ли предъявленный образ между двумя ранее изученными образцами, или он где-то в стороне от них. Если же у вас фотки "спереди" и "сзади", то, скорее всего, это будет функция из двух кривых, с разрывом - одна для морды, другая для ... :)
      2. свёрточный слой занимается фактически тем, что сильно понижает вариативность изображения, трансформируя его в подобие "алфавита". А нейросетка затем вычленяет те буквы этого алфавита, которые дают ей существенные признаки.
      Этот курс хорош (великолепен!) тем, что он практический, дан простым ясным языком. Есть статьи и видео, где очень хорошо рассказывают теорию, но они до практики либо не доходят, либо уходят в дикие дебри. А тут можно получить реально работающий механизм и дальше улучшать его для себя, читая и применяя.

    • @ИванИванович-ы6щ6й
      @ИванИванович-ы6щ6й 5 лет назад

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

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

      @@ИванИванович-ы6щ6й да, так бывает, что образного мышления нет.
      В соответствии с теоремой Цыбенко, отклик обученной нейросети есть вычисление значения аппроксимирующей функции от множества аргументов предъявленного образца. Никакой магии.

    • @ИванИванович-ы6щ6й
      @ИванИванович-ы6щ6й 5 лет назад

      да вы не поняли о чем эта теорема. Он примитивную вещь объясняет для аналога перцептрона замысловатыми математическими терминами. И она ничего не говорит про то, как распознать лошадь.
      Потолкуйте с математиками - они вам ее разжуют.

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

      Так это ведь и есть обычный перцептрон - два полносвязных слоя. Просто перед ним поставили несколько слоёв параллельных фотофильтров, которые подстраиваются через back propagation.
      А теорема как раз говорит - что ей без разницы, голова там или задница, потому что при достаточной мощности слоя, *всегда* существует набор апроксимирующих коэффициентов для *любого* набора данных с заданной точностью. Нейросеть не оперирует никакими смыслами - это просто сложная непрерывная функция.
      Роль свёрточных слоёв лишь в том, что после их преобразования требования к мощности перцептрона снижаются.
      Теоретическая часть свёрточной сети идеально описана прямо в вики.

  • @kotishakot9582
    @kotishakot9582 5 лет назад +1

    Здравствуйте, почему на первом слое карта признаков 32?

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

      Особых причин нет. Можно попробовать использовать разные значения.

  • @imintegralmusic5501
    @imintegralmusic5501 5 лет назад +8

    автомобиль управляемый нейросетью с точностью 77%, это как бухим ездить))

    • @AndreySozykin
      @AndreySozykin  5 лет назад +1

      Это же курс начального уровня, чтобы понять основы. Вряд ли можно ожидать, что написав две страницы кода можно получить высококачественное решение.

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

      @@AndreySozykin я понимаю) просто прозвучало стебно)

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

      @@AndreySozykin , возникло несколько вопросов:
      сколько нейронов в каждой карте признаков на первом сверточном слое ? имеет ли это значение? это как-то автоматически определяется?
      на что влияет количество карт признаков в слое? должно ли оно чему-то соответствовать?

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

      IM Integral Music
      Ну это же нейронные сети, пару аварий, и прога научится водить лучше трезвого тебя))

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

    Ничего не работает (Python 3.7; Numpy 1.18.3; Keras 2.3.1). Ошибки после
    # Создаём модель
    model = Sequential()
    Для новичка - пустое дело =(

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

      Да, в ближайшее время переделаю все видео на Keras в TensorFlow 2.

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

      @@AndreySozykin Очень жду =) Коснитесь пожалуйста тему создания нейросети по своим картинкам с выделением координат найденных объектов. Практически ничего по этой теме нет. Также есть интересный фреймворк ImageAi. По нему тоже ничего нет в сети, кроме пару примеров.

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

    Хочу создать нечто подобное и продать на производство. Но не програмист, хотя и понимаю алгоритм, пологаю можно заработать, нужен компаньон

    • @СашкаБелый-ч6м
      @СашкаБелый-ч6м 4 года назад +1

      Я согласен быть команьоном. Ты в каком классе учешься?

    • @ХомякХомяков-т7п
      @ХомякХомяков-т7п 3 года назад

      а я буду вашим руководителем)
      А что за производство то? что мы будем производить из этого набора? самолеты грузовики или может ... лягушек?
      з.ы. таких "специалистов" коля как ты больше чем ты думаешь)

  • @ХомякХомяков-т7п
    @ХомякХомяков-т7п 3 года назад +1

    Кто будет повторять используйте GPU. Сэкономите уйму времени. 4сек против 370с на эпоху.

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

      Да, GPU нужно использовать.

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

    Новое исследование команды NickWare представлено на конференции ruclips.net/video/CcgQK3EoxZY/видео.html

  • @vladimirsemargl9128
    @vladimirsemargl9128 3 года назад +2

    Ну и где тут распознавание объектов? Что вы тут распознали? Вы просто берёте зарубежные статьи и озвучиваете их как делают все остальные. Где свой набор данных? Как сверточной сетью пометить и вырезать несколько объектов на фото? Вы создаете больше вопросов, чем на них отвечаете. Я полностью канал посмотрел и не увидел именно вашего личного.

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

    нууу этооо так заатянуута. Зачем картинки читатать ты ж людям показываеш а не своей програми... Очень затянута