Palax 0 Report post Posted April 11, 2018 Всем привет.Предо мной стоит задача распознавать геометрические фигуры(пока что круг и квадрат).Обучил нейронную сеть на большом кол-ве данных,около 4.5тыс.При попытке распознать картинку,мне она выдает всегда одно и тоже,какую бы картинку я ему не подал.Прошу помочь и объяснить в чем проблема.Прикрепил все что нужно,для тех кто решится помочь. neuro1.rar Share this post Link to post Share on other sites
idrua 8 Report post Posted April 11, 2018 Нужно именно нейросетью? Дело в том, что простые геометрические фигуры можно и без нейросетей успешно детектировать. Share this post Link to post Share on other sites
iskees 32 Report post Posted 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 что бы не ждать "пол часа" Share this post Link to post Share on other sites
Palax 0 Report post Posted April 11, 2018 6 часов назад, idrua сказал: Нужно именно нейросетью? Дело в том, что простые геометрические фигуры можно и без нейросетей успешно детектировать. Да,просто я дурачек который затянул с выбором темы на курсовую работу.Вот и дали такую тему. Share this post Link to post Share on other sites
Palax 0 Report post Posted 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 что бы не ждать "пол часа" Большое спасибо вам Share this post Link to post Share on other sites