Перейти к содержимому
Compvision.ru

Recommended Posts

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

 

neuro1.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Модель конечно странная, мало того что жутко избыточная так еще и цветная хотя примеры одноканальные.

ошибки у вас при тестировании. В этом месте 

# Преобразуем изображением в массив 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 что бы не ждать "пол часа"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, idrua сказал:

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

Да,просто я дурачек который затянул с выбором темы на курсовую работу.Вот и дали такую тему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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 что бы не ждать "пол часа"

Большое спасибо вам

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

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

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×