Palax 0 Жалоба Опубликовано April 11, 2018 Всем привет.Предо мной стоит задача распознавать геометрические фигуры(пока что круг и квадрат).Обучил нейронную сеть на большом кол-ве данных,около 4.5тыс.При попытке распознать картинку,мне она выдает всегда одно и тоже,какую бы картинку я ему не подал.Прошу помочь и объяснить в чем проблема.Прикрепил все что нужно,для тех кто решится помочь. neuro1.rar Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
idrua 8 Жалоба Опубликовано April 11, 2018 Нужно именно нейросетью? Дело в том, что простые геометрические фигуры можно и без нейросетей успешно детектировать. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано April 11, 2018 Модель конечно странная, мало того что жутко избыточная так еще и цветная хотя примеры одноканальные. ошибки у вас при тестировании. В этом месте # Преобразуем изображением в массив numpy x = image.img_to_array(img) x = 255 - x #Нормализуем изображение x = np.expand_dims(x, axis=0) вместо x=255-x это же инвертирование у вас там нужно делить на 255 что бы привести в диапазон 0-1 x =x/255.0 x = np.expand_dims(x, axis=0) это не нормализация а просто добавление одного изменения в массив ну и loaded_model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"]) делать не нужно сеть же уже готовая import numpy as np from keras.preprocessing import image from keras.models import model_from_json json_file = open("D:\\neuro\\NS.json", "r") loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) loaded_model.load_weights("D:\\neuro\\NS.h5") img_path = 'D:\\neuro\\test\\circle\\2986.png' img = image.load_img(img_path, target_size=(150, 150), grayscale=False) x = image.img_to_array(img) x =x/255.0 x = np.expand_dims(x, axis=0) prediction = loaded_model.predict(x) if prediction<0.5: print('circle') else: print('square') img_path = 'D:\\neuro\\test\\square\\2976.png' img = image.load_img(img_path, target_size=(150, 150), grayscale=False) x = image.img_to_array(img) x =x/255.0 x = np.expand_dims(x, axis=0) prediction = loaded_model.predict(x) if prediction<0.5: print('circle') else: print('square') вывод: circle square Да и число эпох сделал 10 и батчсайз 128 что бы не ждать "пол часа" Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Palax 0 Жалоба Опубликовано April 11, 2018 6 часов назад, idrua сказал: Нужно именно нейросетью? Дело в том, что простые геометрические фигуры можно и без нейросетей успешно детектировать. Да,просто я дурачек который затянул с выбором темы на курсовую работу.Вот и дали такую тему. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Palax 0 Жалоба Опубликовано April 11, 2018 1 час назад, iskees сказал: Модель конечно странная, мало того что жутко избыточная так еще и цветная хотя примеры одноканальные. ошибки у вас при тестировании. В этом месте # Преобразуем изображением в массив numpy x = image.img_to_array(img) x = 255 - x #Нормализуем изображение x = np.expand_dims(x, axis=0) вместо x=255-x это же инвертирование у вас там нужно делить на 255 что бы привести в диапазон 0-1 x =x/255.0 x = np.expand_dims(x, axis=0) это не нормализация а просто добавление одного изменения в массив ну и loaded_model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"]) делать не нужно сеть же уже готовая import numpy as np from keras.preprocessing import image from keras.models import model_from_json json_file = open("D:\\neuro\\NS.json", "r") loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) loaded_model.load_weights("D:\\neuro\\NS.h5") img_path = 'D:\\neuro\\test\\circle\\2986.png' img = image.load_img(img_path, target_size=(150, 150), grayscale=False) x = image.img_to_array(img) x =x/255.0 x = np.expand_dims(x, axis=0) prediction = loaded_model.predict(x) if prediction<0.5: print('circle') else: print('square') img_path = 'D:\\neuro\\test\\square\\2976.png' img = image.load_img(img_path, target_size=(150, 150), grayscale=False) x = image.img_to_array(img) x =x/255.0 x = np.expand_dims(x, axis=0) prediction = loaded_model.predict(x) if prediction<0.5: print('circle') else: print('square') вывод: circle square Да и число эпох сделал 10 и батчсайз 128 что бы не ждать "пол часа" Большое спасибо вам Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах