Добрый день. Спасибо за отличные уроки по нейронным сетям! Если можно я задам пару вопросов. (я новичек в этом деле) 1) Когда мы сохраняем, а затем восстанавливаем НС мы выполняем три действия. Сохранение структуру, сохраняем весы, и компилируем. Должны ли мы всегда при компиляции указывать одинаковые параметры, те которые были при обучении? Если это так важно почему нет механизма запоминать эти параметры в json структуре сети, ведь она получается бесполезна без них? Можно ли менять эти параметры, в каких случаях это делают? 2) Можно ли ДОУЧИВАТЬ сеть, промежуточно сохраняя сеть? и нужно ли использовать одинаковые параметры компиляции? 3) Можно ли сеть обучать "отдельными частями", а затем комбинировать эти кусочки? Существуют ли отдельные рекомендации методики по этому вопросу? К примеру я учу пару слоев узнавать треугольники, круги и затем этот фрагмент куда-то вставляю в большую сеть для более сложных задач, но запрещаю переучивать этот фрагмент. Или НС больше похожа на монолит который не допускает разбивки на части и переиспользования этих частей в большей сети? Можно ли фрагментировать уже обученную сеть? 4) Было бы интересно в одном из видео поверхностно пробежаться по справке keras и указать что наиболее полезно для новичков в начале пути. Что важно в начале пути.. более чем уверен что там полно экзотических функций и методов которые могут запутать начинающего, а что главное не совсем ясно)) Возможно вопросы глупые.. но все же :) Еще раз спасибо за канал!
Задержался с ответом, надеюсь еще не поздно. 1. При компиляции можно использовать другие параметры. 2. Доучивать сеть можно, но для этого ее нужно сохранять по другому. Нужно использовать метод model.save(filepath), подробности по ссылке - keras.io/getting-started/faq/. При этом сохраняется не только архитектура и веса, но и оптимизатор и его состояние. К сожалению, я сам так никогда не делал и работающих примеров не видел. 3. Да, сеть можно обучать отдельными частями. Сейчас это популярный подход - взять заранее обученную сеть, изменить в ней небольшой кусок по своей задаче и обучить на своих данных. Пример можно посмотреть по ссылке - blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html, в разделе 'Using the bottleneck features of a pre-trained network: 90% accuracy in a minute'. 4. Самое главное я как раз стараюсь показать в видео. Но идея интересная, подумаю, можно ли сделать.
Большое спасибо за ответы. Пункт 4) если сделаете урок, будет очень полезен тем кто в начале пути. Когда человек знает многое он легко ориентируется где копать, но с другой стороны когда это совсем новое ты можешь утонуть даже в документации. А тема очень специфична. Ваше руководство по офф. справке keras сделало бы точку входа в эту тему проще для тех кто делает первые шаги. Просто пробежаться и парами фраз сказать по каждому пункту что читать, что уже для профи. что важно что нет. Какие методы стандартны, какие экзотика и для особых спец задач. Дальше мы сами ;-) Ваши видео замечательные, но вот эта справка для меня монолитный поток информации, тяжело и очень объемно и сухо. Я просто любитель, для меня даже английский маленькая проблем. Если бы не Ваши видео я бы и не попробовал НС, все так доступно!
Кто столкнулся с проблемой "AttributeError: module 'keras.utils.np_utils' has no attribute 'categorical probas_to_classes', замените строку : prediction = np_utils.categorical_probas_to_classes(prediction) на prediction = np.argmax(prediction, axis = 1) В новом керасе нет метода categorical_probas_to_classes
Доброго времени суток! Можно ли все это использовать для 3д реконструкции? К примеру, есть два изображения детали с двух ракурсов. Нужно найти как-то ключевые точки их и сопоставить и соединить в 3д координаты. Как это можно сделать?
Андрей, здравствуйте, у Вас на cifar 10 он выдает просто, что это лошадь, а это самолет, а как написать так чтобы он еще показывал вероятность того, что это лошадь, а это самолет? например, 98% что это самолет
Здравствуйте! А, скажите, пожалуйста, в коллабе это работает? Потому что, на код prediction = np_utils.categorical_probas_to_classes(prediction) выходит ошибка: AttributeError: module 'keras.utils.np_utils' has no attribute 'categorical_probas_to_classes'
Как сделать чтобы нейронка распознавала нужные изображения в браузере, например листаешь вкладку с фотографиями, и она как то распознает нужное, по датасетам
Андрей, в лекции проводится распознавание одиночных объектов на картинках. А что если в файле будет несколько объектов класса MNIST (для простоты будем считать, что они не пересекаются) ?! Как тогда поступать, чтобы сеть их все нашла и распознала?
Это задача обнаружения объектов. Есть несколько подходов к решению. Самый простой - пробежаться по картинке прямоугольником и посмотреть, какие там есть отдельные цифры. Более сложны подход - использование Fully Convolutional Networks.
привет, Андрей. Возможно ли распознать шрифты (отсканированная картинка - лист А4 с текстом) без использования нейросетей? Например по шаблонам эталонов, где идет построчное сравнение пикселей захваченного символа из картинки, разбитой на строки и эталона?
Доброго времени суток! Подскажите, как можно из своей кастомной библиотеки, сделанной по Вашему примеру, сделать классификацию изображений по категориям?Как перевести значение классов в категории? Спасибо.
Нужно знать категорию для каждого номера класса и сделать список с названиями категорий в нужном порядке. Затем номер класса использовать как индекс в этом списке.
извините,а где можно найти исходники данных программ,ибо в курсе их нет(для первой части видео где используется mnist) а так очень интересно спасибо за курс
Добрый вечер. Спасибо за отличное изложение темы распознавания нейронных сетей. Я уже запускал распознавание изображений месяц назад и все работало. Сейчас пытаюсь повторить тоже самое, и в обоих бэкендах, что в theano, что в tensorflow ругается: "ImportError: Could not import PIL.Image. The use of `array_to_img` requires PIL." Не может картинку загрузить. Использую: -Keras 2.0.8; -Tensorflow 1.2.1; -Python 3.6; - Windows 8.1. Надстройки CUDA и cuDNN не использую. Результаты обучения сети есть. Сеть обучена. Я пробовал исправить эту ошибку путем установки пакета Pillow. Но даже после этого ошибка осталась. Я новичок в этом деле, может я что то делаю не так?
С этой ошибкой разобрался обновив пакеты. Далее он высветил: ValueError Traceback (most recent call last) in () 26 loaded_model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy']) 27 #Запускаем распознавание объекта: ---> 28 prediction = loaded_model.predict(x) 29 30 #Для удобства вывода задаем список с названиями классов объектов C:\ProgramData\Anaconda3\lib\site-packages\keras\models.py in predict(self, x, batch_size, verbose) 911 if not self.built: 912 self.build() --> 913 return self.model.predict(x, batch_size=batch_size, verbose=verbose) 914 915 def predict_on_batch(self, x): C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in predict(self, x, batch_size, verbose, steps) 1693 x = _standardize_input_data(x, self._feed_input_names, 1694 self._feed_input_shapes, -> 1695 check_batch_axis=False) 1696 if self.stateful: 1697 if x[0].shape[0] > batch_size and x[0].shape[0] % batch_size != 0: C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 130 ' to have ' + str(len(shapes[i])) + 131 ' dimensions, but got array with shape ' + --> 132 str(array.shape)) 133 for j, (dim, ref_dim) in enumerate(zip(array.shape, shapes[i])): 134 if not j and not check_batch_axis: ValueError: Error when checking : expected conv2d_1_input to have 4 dimensions, but got array with shape (1, 1) Ошибка в prediction = loaded_model.predict(x).
Не получилось запустить распознавание. ValueError: Error when checking : expected dense_38_input to have 2 dimensions, but got array with shape (1, 28, 28, 1) Какую размерность у вас имеет массив х?
у меня примерно такая же проблема ValueError: Error when checking : expected dense_1_input to have 2 dimensions, but got array with shape (1, 28, 28, 1) на loaded_model.predict(x)
Нет однозначных рекомендаций, как подбирать структуру сети. Точно должно быть несколько каскадов свертки и подвыборки. В каждом каскаде можно использовать один сверточный слой и один слой подвыборки, или два сверточных слоя и один слой подвыборки. Нужно пробовать разные варианты и выбрать тот, который лучше подходит под задачу.
Программу с обучением сверточной сети для MNIST выложил на github. Вот описание на сайте: www.asozykin.ru/deep_learning/2017/05/08/CNN-for-MNIST.html Также скоро выложу ноутбуки с распознаванием цифр и объектов из mnist.
Добровольцы времени суток Андрей, можно ли обучить нейронную сеть используя 3д модели, а не картинки? И можно ли обучить нейронную сеть распознаваться только автомобили и удалять задний фон, благодарю за вашу работу.
Обучить нейронную сеть распознавать только автомобили можно. Вот соревнования на Kaggle на эту тему - www.kaggle.com/c/carvana-image-masking-challenge. Удалять задний фон тоже можно, вот пример сервиса, который это делает - www.remove.bg. Обучить нейронную сеть на 3д моделях можно, но для этого нужно готовить обучающий набор данных. Я сам с такой задачей никогда не сталкивался.
Здравствуйте, подскажите пожалуйста как избавиться от этой ошибки ValueError: Error when checking input: expected dense_input to have 2 dimensions, but got array with shape (1, 28, 28, 1)?
Попробовал сделать со своими картинками. Если сохранять в пэинте с размерностью 28x28 (или 32x32), то сжимается относительно неплохо, распознаёт хорошо. Но если на вход подавать картинку большого размера, то класс image.load_img() работает довольно плохо, у тонких цифр может просто все пиксели затереть белым цветом, ибо сжимается как-то странно, как-будто не суммирует цвета для сжатия изображения, а просто отбрасывает часть пикселей.
Вдохновившись Вашими уроками, воспроизвел обучение по cifar10 у себя на компьютере. Но с проверкой пока застопорился... prediction = np_utils.categorical_probas_to_classes(prediction) ... AttributeError: module 'keras.utils.np_utils' has no attribute 'categorical_probas_to_classes' Я так понимаю речь о каком-то методе не освещенном ни в видео, ни в имеющихся по ссылкам файлах? С уважением и благодарностью...
Странно, у меня все работает. Вот примеры использования: - www.asozykin.ru/deep_learning/2017/02/23/How-to-use-nn-to-classify-images.html - www.kaggle.com/sozykin/digit-recognizer/mnist-simple-nn-keras Метод categorical_probas_to_classes преобразует данные из представлений по категориям в формате one hot encoding в метки класса. Какая версия Keras используется?
Цифры в mnist расположены строго в центре изображения и нормализованы по контрастности. Еще проблема может быть с масштабированием. Когда сжимаете картинку до размера 28×28, линии, которые были слишком тонкие, пропадают.
Добрый день, у меня выдает такую ошибку когда хочу предсказать для своей картинки:Error when checking input: expected dense_31_input to have 2 dimensions, but got array with shape (1, 28, 28, 1).
C cifar10 -- очень круто! У меня только кошек, птиц и собак не распознаёт, остальное распознаёт. А как можно дообучить сетку, добавив свои картинки, например?
+Андрей Исаков, можно взять уже обученную сеть, например, VGG16 из Keras Applications - keras.io/applications/#vgg16. Пример дообучения сети VGG16 - blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html Планирую записать несколько видео на эту тему. Но получится не раньше начала лета.
+Андрей Исаков, вот еще примеры с использованием предварительно обученных нейронных сетей - keras.io/applications/#usage-examples-for-image-classification-models
@@AndreySozykin Еще вопрос. К примеру мы обучили нейронку распознавать цифры. И она с этим отлично справляется. Но если подавать цифры под наклоном или вообще перевернутые то нейронка в замешательстве. Это получается надо каждую цифру показывать в любой форме?
@@AndreySozykin Сделал сверточную нейронку по одним из выших примеров. Распознает цифры только на черном фоне. Саму цифру можно писать любым цветом. Не подскажите решение? model = Sequential() model.add(Conv2D(32,(5,5),activation='relu',input_shape=(28,28,1))) model.add(Conv2D(64,(5,5),activation='relu')) model.add(MaxPooling2D(pool_size=(3,3))) model.add(Flatten()) model.add(Dense(128,activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10,activation='softmax')) model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
Изображения с семёркой нет, поэтому нарисовал сам. Линию сделал толстую, 2 пикселя вместо одного. Распознал как восьмерку. Интересно, почему? Нарисовал обычной линией, 1px - распознал нормально.
Traceback (most recent call last): File "D:/Projects/Python/AI/venv/Include/Third/AI.py", line 17, in prediction = np_utils.categorical_probas_to_predict(prediction) AttributeError: module 'tensorflow.python.keras.utils.np_utils' has no attribute 'categorical_probas_to_predict'
Там же рассказывается начиная с 4 минуты. Для обучения нейронной сети на CIFAR-10 используется такой код - github.com/sozykin/dlpython_course/blob/master/cifar10/cifar10.py
Очень интересная тема и сложная, поэтому продолжайте писать уроки, спасибо
Спасибо, рад, что нравится.
Обязательно буду продолжать.
Anderson Silva не очень сложно, т.к есть уже готовая либа
Добрый день. Спасибо за отличные уроки по нейронным сетям!
Если можно я задам пару вопросов. (я новичек в этом деле)
1) Когда мы сохраняем, а затем восстанавливаем НС мы выполняем три действия. Сохранение структуру, сохраняем весы, и компилируем. Должны ли мы всегда при компиляции указывать одинаковые параметры, те которые были при обучении? Если это так важно почему нет механизма запоминать эти параметры в json структуре сети, ведь она получается бесполезна без них? Можно ли менять эти параметры, в каких случаях это делают?
2) Можно ли ДОУЧИВАТЬ сеть, промежуточно сохраняя сеть? и нужно ли использовать одинаковые параметры компиляции?
3) Можно ли сеть обучать "отдельными частями", а затем комбинировать эти кусочки? Существуют ли отдельные рекомендации методики по этому вопросу? К примеру я учу пару слоев узнавать треугольники, круги и затем этот фрагмент куда-то вставляю в большую сеть для более сложных задач, но запрещаю переучивать этот фрагмент. Или НС больше похожа на монолит который не допускает разбивки на части и переиспользования этих частей в большей сети? Можно ли фрагментировать уже обученную сеть?
4) Было бы интересно в одном из видео поверхностно пробежаться по справке keras и указать что наиболее полезно для новичков в начале пути. Что важно в начале пути.. более чем уверен что там полно экзотических функций и методов которые могут запутать начинающего, а что главное не совсем ясно))
Возможно вопросы глупые.. но все же :) Еще раз спасибо за канал!
Задержался с ответом, надеюсь еще не поздно.
1. При компиляции можно использовать другие параметры.
2. Доучивать сеть можно, но для этого ее нужно сохранять по другому. Нужно использовать метод model.save(filepath), подробности по ссылке - keras.io/getting-started/faq/. При этом сохраняется не только архитектура и веса, но и оптимизатор и его состояние. К сожалению, я сам так никогда не делал и работающих примеров не видел.
3. Да, сеть можно обучать отдельными частями. Сейчас это популярный подход - взять заранее обученную сеть, изменить в ней небольшой кусок по своей задаче и обучить на своих данных. Пример можно посмотреть по ссылке - blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html, в разделе 'Using the bottleneck features of a pre-trained network: 90% accuracy in a minute'.
4. Самое главное я как раз стараюсь показать в видео. Но идея интересная, подумаю, можно ли сделать.
Большое спасибо за ответы. Пункт 4) если сделаете урок, будет очень полезен тем кто в начале пути. Когда человек знает многое он легко ориентируется где копать, но с другой стороны когда это совсем новое ты можешь утонуть даже в документации. А тема очень специфична. Ваше руководство по офф. справке keras сделало бы точку входа в эту тему проще для тех кто делает первые шаги. Просто пробежаться и парами фраз сказать по каждому пункту что читать, что уже для профи. что важно что нет. Какие методы стандартны, какие экзотика и для особых спец задач. Дальше мы сами ;-)
Ваши видео замечательные, но вот эта справка для меня монолитный поток информации, тяжело и очень объемно и сухо. Я просто любитель, для меня даже английский маленькая проблем. Если бы не Ваши видео я бы и не попробовал НС, все так доступно!
Кто столкнулся с проблемой "AttributeError: module 'keras.utils.np_utils' has no attribute 'categorical probas_to_classes', замените строку :
prediction = np_utils.categorical_probas_to_classes(prediction)
на
prediction = np.argmax(prediction, axis = 1)
В новом керасе нет метода categorical_probas_to_classes
Доброго времени суток!
Можно ли все это использовать для 3д реконструкции?
К примеру, есть два изображения детали с двух ракурсов. Нужно найти как-то ключевые точки их и сопоставить и соединить в 3д координаты. Как это можно сделать?
Андрей, здравствуйте, у Вас на cifar 10 он выдает просто, что это лошадь, а это самолет, а как написать так чтобы он еще показывал вероятность того, что это лошадь, а это самолет? например, 98% что это самолет
Здравствуйте!
А, скажите, пожалуйста, в коллабе это работает?
Потому что, на код
prediction = np_utils.categorical_probas_to_classes(prediction)
выходит ошибка:
AttributeError: module 'keras.utils.np_utils' has no attribute 'categorical_probas_to_classes'
Как сделать чтобы нейронка распознавала нужные изображения в браузере, например листаешь вкладку с фотографиями, и она как то распознает нужное, по датасетам
Добрый день. Андрей хотелось бы спросить а как сгенерировать свой dataset(аналог cifar10) на основе своих изображений?
Планирую сделать такую лекцию в ближайшие 2-3 недели.
Андрей, в лекции проводится распознавание одиночных объектов на картинках. А что если в файле будет несколько объектов класса MNIST (для простоты будем считать, что они не пересекаются) ?! Как тогда поступать, чтобы сеть их все нашла и распознала?
Это задача обнаружения объектов. Есть несколько подходов к решению. Самый простой - пробежаться по картинке прямоугольником и посмотреть, какие там есть отдельные цифры. Более сложны подход - использование Fully Convolutional Networks.
привет, Андрей. Возможно ли распознать шрифты (отсканированная картинка -
лист А4 с текстом) без использования нейросетей? Например по шаблонам эталонов, где идет построчное сравнение пикселей захваченного символа из картинки, разбитой на строки и эталона?
Да, можно без нейронных сетей. Например, методом главных компонент - vzaguskin.github.io/mnistpcaknn1_ru/.
Доброго времени суток! Подскажите, как можно из своей кастомной библиотеки, сделанной по Вашему примеру, сделать классификацию изображений по категориям?Как перевести значение классов в категории? Спасибо.
Нужно знать категорию для каждого номера класса и сделать список с названиями категорий в нужном порядке. Затем номер класса использовать как индекс в этом списке.
извините,а где можно найти исходники данных программ,ибо в курсе их нет(для первой части видео где используется mnist)
а так очень интересно спасибо за курс
Исходники программ - github.com/sozykin/dlpython_course
Данные для MNIST - yann.lecun.com/exdb/mnist/
Суперская тема! Спасибо! Продолжай!
Добрый вечер.
Спасибо за отличное изложение темы распознавания нейронных сетей.
Я уже запускал распознавание изображений месяц назад и все работало.
Сейчас пытаюсь повторить тоже самое, и в обоих бэкендах, что в theano, что в tensorflow ругается:
"ImportError: Could not import PIL.Image. The use of `array_to_img` requires PIL."
Не может картинку загрузить.
Использую:
-Keras 2.0.8;
-Tensorflow 1.2.1;
-Python 3.6;
- Windows 8.1.
Надстройки CUDA и cuDNN не использую.
Результаты обучения сети есть. Сеть обучена.
Я пробовал исправить эту ошибку путем установки пакета Pillow. Но даже после этого ошибка осталась.
Я новичок в этом деле, может я что то делаю не так?
+Михаил Моховиков, возможно, еще нужно установить scipy.
С этой ошибкой разобрался обновив пакеты. Далее он высветил:
ValueError Traceback (most recent call last)
in ()
26 loaded_model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
27 #Запускаем распознавание объекта:
---> 28 prediction = loaded_model.predict(x)
29
30 #Для удобства вывода задаем список с названиями классов объектов
C:\ProgramData\Anaconda3\lib\site-packages\keras\models.py in predict(self, x, batch_size, verbose)
911 if not self.built:
912 self.build()
--> 913 return self.model.predict(x, batch_size=batch_size, verbose=verbose)
914
915 def predict_on_batch(self, x):
C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in predict(self, x, batch_size, verbose, steps)
1693 x = _standardize_input_data(x, self._feed_input_names,
1694 self._feed_input_shapes,
-> 1695 check_batch_axis=False)
1696 if self.stateful:
1697 if x[0].shape[0] > batch_size and x[0].shape[0] % batch_size != 0:
C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
130 ' to have ' + str(len(shapes[i])) +
131 ' dimensions, but got array with shape ' +
--> 132 str(array.shape))
133 for j, (dim, ref_dim) in enumerate(zip(array.shape, shapes[i])):
134 if not j and not check_batch_axis:
ValueError: Error when checking : expected conv2d_1_input to have 4 dimensions, but got array with shape (1, 1)
Ошибка в prediction = loaded_model.predict(x).
Здравствуйте , вы смогли решить вашу проблему с ошибкой , если да не могли бы мне помочь т.к. у меня аналогичная .
зачем инвертировать цвета если потом была 6ка белая на черном фоне, но ее мы тоже инвертировали ?
Очень круто, нет слов.
+Ruslan Terlikbayev, спасибо!
Не получилось запустить распознавание. ValueError: Error when checking : expected dense_38_input to have 2 dimensions, but got array with shape (1, 28, 28, 1)
Какую размерность у вас имеет массив х?
у меня примерно такая же проблема ValueError: Error when checking : expected dense_1_input to have 2 dimensions, but got array with shape (1, 28, 28, 1) на loaded_model.predict(x)
Решили эту проблему ?
Кто-то решил эту проблему?
@@АртемСкачков-ч8л Ты решил? Мне кажется, что надо не добавлять измерение и написать reshape(1,784). Но хз, или так распознавать будет верно
@@yuriihalychanskyi8764 да решил, там другая функция. Завтра отпишусь
На 1:18 model.add(Activation(...))) это не тоже самое, как если в предыдущем слое в параметр слоя добавить activation в виде параметра ?
Да, то же самое.
А как структуру сверточной сети подбирать? Почему там именно 2 сверточных слоев, 1 пуллинг?
Нет однозначных рекомендаций, как подбирать структуру сети. Точно должно быть несколько каскадов свертки и подвыборки. В каждом каскаде можно использовать один сверточный слой и один слой подвыборки, или два сверточных слоя и один слой подвыборки. Нужно пробовать разные варианты и выбрать тот, который лучше подходит под задачу.
А выложите пожалуйста на Гитхаб файлик где MNIST обучается? На видео его первую часть не видно поэтому воспроизвести эксперимент не получается:(
Программу с обучением сверточной сети для MNIST выложил на github. Вот описание на сайте: www.asozykin.ru/deep_learning/2017/05/08/CNN-for-MNIST.html
Также скоро выложу ноутбуки с распознаванием цифр и объектов из mnist.
Круто! Спасибо!:)
Добровольцы времени суток Андрей, можно ли обучить нейронную сеть используя 3д модели, а не картинки? И можно ли обучить нейронную сеть распознаваться только автомобили и удалять задний фон, благодарю за вашу работу.
Обучить нейронную сеть распознавать только автомобили можно. Вот соревнования на Kaggle на эту тему - www.kaggle.com/c/carvana-image-masking-challenge. Удалять задний фон тоже можно, вот пример сервиса, который это делает - www.remove.bg.
Обучить нейронную сеть на 3д моделях можно, но для этого нужно готовить обучающий набор данных. Я сам с такой задачей никогда не сталкивался.
Здравствуйте, подскажите пожалуйста как избавиться от этой ошибки ValueError: Error when checking input: expected dense_input to have 2 dimensions, but got array with shape (1, 28, 28, 1)?
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1).astype('float32')
Попробовал сделать со своими картинками. Если сохранять в пэинте с размерностью 28x28 (или 32x32), то сжимается относительно неплохо, распознаёт хорошо.
Но если на вход подавать картинку большого размера, то класс image.load_img() работает довольно плохо, у тонких цифр может просто все пиксели затереть белым цветом, ибо сжимается как-то странно, как-будто не суммирует цвета для сжатия изображения, а просто отбрасывает часть пикселей.
Вдохновившись Вашими уроками, воспроизвел обучение по cifar10 у себя на компьютере. Но с проверкой пока застопорился...
prediction = np_utils.categorical_probas_to_classes(prediction)
...
AttributeError: module 'keras.utils.np_utils' has no attribute 'categorical_probas_to_classes'
Я так понимаю речь о каком-то методе не освещенном ни в видео, ни в имеющихся по ссылкам файлах?
С уважением и благодарностью...
Странно, у меня все работает. Вот примеры использования:
- www.asozykin.ru/deep_learning/2017/02/23/How-to-use-nn-to-classify-images.html
- www.kaggle.com/sozykin/digit-recognizer/mnist-simple-nn-keras
Метод categorical_probas_to_classes преобразует данные из представлений по категориям в формате one hot encoding в метки класса.
Какая версия Keras используется?
joxi.ru/LmGywO1UqKlJAl
Нет np_utils.categorical_probas_to_classes . Видимо, остался в старом keras-e.
+Leonid Rumatov, да, из второй версии keras эту функцию урбали. Можно использовать argmax из numpy.
почему то свои цифры нарисованные в paint не хочет распознавать, есть идеи?
Цифры в mnist расположены строго в центре изображения и нормализованы по контрастности.
Еще проблема может быть с масштабированием. Когда сжимаете картинку до размера 28×28, линии, которые были слишком тонкие, пропадают.
@@AndreySozykin хм, спасибо)
картинки из мниста распознавало, даже просто по скриншотам из запроса в гугле
Добрый день, где лежит конкретный пример с цифрами в гитхабе ? Я там такого не нашел
Решили проблему?
Добрый день, у меня выдает такую ошибку когда хочу предсказать для своей картинки:Error when checking input: expected dense_31_input to have 2 dimensions, but got array with shape (1, 28, 28, 1).
Я так понимаю тут дело в размерности, пытался делать shape(28,28), не помогло
код такой же как и у вас
C cifar10 -- очень круто! У меня только кошек, птиц и собак не распознаёт, остальное распознаёт.
А как можно дообучить сетку, добавив свои картинки, например?
+Андрей Исаков, можно взять уже обученную сеть, например, VGG16 из Keras Applications - keras.io/applications/#vgg16.
Пример дообучения сети VGG16 - blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html
Планирую записать несколько видео на эту тему. Но получится не раньше начала лета.
+Андрей Исаков, вот еще примеры с использованием предварительно обученных нейронных сетей - keras.io/applications/#usage-examples-for-image-classification-models
Обязательно использовать такие маленькие изображения? На таких маленьких теряются детали которые могут быть ключевыми
Нет, не обязательно. Сети Resnet или Inception работают с большими изображениями.
@@AndreySozykin Еще вопрос. К примеру мы обучили нейронку распознавать цифры. И она с этим отлично справляется. Но если подавать цифры под наклоном или вообще перевернутые то нейронка в замешательстве. Это получается надо каждую цифру показывать в любой форме?
Да, нужно так делать. В Keras для этой цели есть генераторы с расширением данных.
@@AndreySozykin спасибо большое!
@@AndreySozykin Сделал сверточную нейронку по одним из выших примеров. Распознает цифры только на черном фоне. Саму цифру можно писать любым цветом. Не подскажите решение?
model = Sequential()
model.add(Conv2D(32,(5,5),activation='relu',input_shape=(28,28,1)))
model.add(Conv2D(64,(5,5),activation='relu'))
model.add(MaxPooling2D(pool_size=(3,3)))
model.add(Flatten())
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
Изображения с семёркой нет, поэтому нарисовал сам. Линию сделал толстую, 2 пикселя вместо одного. Распознал как восьмерку. Интересно, почему? Нарисовал обычной линией, 1px - распознал нормально.
Traceback (most recent call last):
File "D:/Projects/Python/AI/venv/Include/Third/AI.py", line 17, in
prediction = np_utils.categorical_probas_to_predict(prediction)
AttributeError: module 'tensorflow.python.keras.utils.np_utils' has no attribute 'categorical_probas_to_predict'
А откуда брать изображения? "2.png" и т. д.
+Leonid Rumatov, можно нарисовать в графическом редакторе или написать на бумаге и отсканировать.
Ошибка - (ValueError: Error when checking : expected dense_1_input to have 2 dimensions, but got array with shape (1, 28, 28, 1)) в чем причина ?
попробуй так
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1).astype('float32')
@@СашаСобчук-ю9б Спасибо, лучше поздно чем никогда )))
А как прикрутить cifar10?
Там же рассказывается начиная с 4 минуты.
Для обучения нейронной сети на CIFAR-10 используется такой код - github.com/sozykin/dlpython_course/blob/master/cifar10/cifar10.py
Спасибо.
Можно ли обучить её так чтобы допустим, отличать помидоры с гнильцом от нормальных помидоров?
Да, но нужно будет по нескольку тысяч фотографий каждого класса: нормальные и с гнильцой.
Нейронная сеть она умная- подсмотрела имя файла просто))))
Хороший вариант, но нет :)
попробовал теперь с изображениями объектов, нарисованную лошадь распознает как автомобиль (точность обученной сети 76% где то)