Mon réseau de neurone se trompe à chaque prédiction

Keras

a marqué ce sujet comme résolu.

Bonjour, J’essaye de reconnaitre des pièces d’échecs à l’aide d’un réseau de neurone. J’ai pris pour label de chaque pièce un numéro compris entre 0 et 11, malheureusement mon réseau me prédit à chaque fois 1.0, alors que je devrais avoir une prédiction du type 0,0,0…,1,1,1…,2,2,2…etc Je ne sais pas si le problème vient du design de mon réseau ou si il vient simplement d’une erreur dans mon code comme par exemple des dimensions de mes arrays. Voici ce que j’ai fait:

import cv2
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.utils import to_categorical

def model(x_train):
    model = Sequential()
    model.add(Flatten(input_shape=x_train.shape[1:]))
    model.add(Dense(256, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1, activation='sigmoid'))
    return model

def preprocessing(x_train,rep_img,label,path):  #Passe les images en noir et blanc puis les ajoute a la liste train avec leur label
    for i in rep_img:
        img=cv2.imread(path+"//"+i)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        img=np.array(img)
        img=img.astype('float32')
        img/=255
        x_train.append([label,cv2.resize(img,(taille_image,taille_image))])
    return x_train

taille_image=150
x_train=[]
x_test=[]
rep_liste=[]
rep_test=[]

#Dossier des images
.....
#Chargement des fichiers
#fin des chargements des fichiers

#Ajout des images traités dans le dossier de train
for rep in rep_liste:
    x_train=preprocessing(x_train,rep[1],rep[0],rep[2])
for rep in rep_test:
    x_test=preprocessing(x_test,rep[1],rep[0],rep[2])
X_train=[]
Y_train=[]
X_test=[]
Y_test=[]
for i in range(len(x_train)):
    X_train.append(x_train[i][1])#Creation de liste avec images pour train
    Y_train.append(x_train[i][0])#Creation de liste avec labels pour train
for i in range(len(x_test)):
    X_test.append(x_test[i][1])#Creation de liste avec images pour test
    Y_test.append(x_test[i][0])#Creation de liste avec labels pour test
#cv2.imshow('img', X_train[0])
X_train=np.array(X_train)
Y_train=np.array(Y_train)
model=model(X_train)
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model.fit(X_train, Y_train, epochs=50, batch_size=256)
print(model.predict(np.array(X_test)))

Auriez vous une idée de comment résoudre mon problème ?

Merci d’avance pour votre aide :)

+0 -0

Le code n’est pas extrèmement long, peut-être que tu auras des réponses sur le code lui-même.

Quoi qu’il en soit, voici une suggestion qui peut t’aider à avancer.

En principe, tu as fait une première phase, pour alimenter la base de connaissance de ton programme. Tu lui as dit que telle série d’images, c’était des cavaliers (code 1), telle autre série, c’était des fous (code 2) , etc etc

Refait complètement cette phase d’apprentissage, en permutant les pièces. Les cavaliers ne correspondent plus au code 1 mais au code 2.

Et tu refais tes tests. Si maintenant, ton programme te répond systématiquement 2, tu as une piste, et s’il te répond toujours systématiquement 1, tu as une autre piste.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte