Jump to content
Compvision.ru

Recommended Posts

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

 

neuro1.rar

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

# Преобразуем изображением в массив 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
6 часов назад, idrua сказал:

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

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

Share this post


Link to post
Share on other sites
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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×