1

Je connais le modèle keras image_ocr. Il utilise le générateur d'images pour générer des images, cependant, je suis confronté à des difficultés depuis que je suis en train de donner mon propre jeu de données au modèle pour training.viComment donner son propre jeu de données à keras image_ocr

Le lien repo est: https://github.com/fchollet/keras/blob/master/examples/image_ocr.py

J'ai créé des tableaux: x et y. Mes chemins d'image et leurs gt correspondants sont dans un fichier csv.

x est donnée la dimension des images en: [nb_samples, w, h, c]

y reçoit les étiquettes, qui est une chaîne, le gt.

Voici le code que je utilise pour prétraiter:

for i in range(0,len(read_file)): 
    path = read_file['path'][i] 
    label = read_file['gt'][i] 
    path = path.strip('\n') 
    img = cv2.imread(path,0) 
    #Re-sizing the images 
    #height = 64, width = 128 
    #res_img = cv2.resize(img, (128,64)) 
    #cv2.imwrite(i,res_img) 
    h,w = img.shape 
    x.append(img) 
    y.append(label) 
    size = img.size 
    """ 
    print "Height: ", h #Height 
    print "Width: ", w #Width 
    print "Channel: ", C#Channel 
    print "Size: ", size 
    print "\n" 
    """ 
print "H: ", h 
print "W: ", w 
print "S: ", size 

x = np.array(x).astype(np.float32) 
y = np.array(y) 

x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.3,random_state=42) 

x_train = np.array(x_train).astype(np.float32) 
y_train = np.array(y_train) 
x_train = np.array(x_train) 
x_test = np.array(x_test) 
y_test = np.array(y_test) 

print "Printing the shapes. \n" 
print "X_train shape: ", x_train.shape 
print "Y_train shape: ", y_train.shape 
print "X_test shape: ", x_test.shape 
print "Y_test shape: ", y_test.shape 
print "\n" 

Il est suivi par le code de keras image_ocr. Le code total est ici: https://gist.github.com/kjanjua26/b46388bbde9ded5cf1f077a9f0dedc4f

L'erreur quand je lance c'est:

`Traceback (most recent call last): 
File "preprocess.py", line 323, in <module> 
train(run_name, 0, 20, w) 
File "preprocess.py", line 314, in train 
model.fit(next_train(x_train), y_train, batch_size=7, epochs=20,  verbose=1, validation_split=0.1, shuffle=True, initial_epoch=0) 
File "/home/kamranjanjua/anaconda2/lib/python2.7/site- packages/keras/engine/training.py", line 1358, in fit 
batch_size=batch_size) 
File "/home/kamranjanjua/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 1234, in _standardize_user_data 
exception_prefix='input') 
File "/home/kamranjanjua/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 100, in _standardize_input_data 
'Found: ' + str(data)[:200] + '...') 
TypeError: Error when checking model input: data should be a Numpy array, or list/dict of Numpy arrays. Found: <generator object next_train at 0x7f8752671640>...` 

Toute aide serait appréciée.

Répondre

1

Si vous voyez le code attentivement, vous pourrez voir que le modèle attend un dictionnaire en entrée.

inputs = {'the_input': X_data,'the_labels': labels, 'input_length': input_length,'label_length': label_length,'source_str': source_str} 

outputs = {'ctc': np.zeros([size])} # dummy data for dummy loss function 

Pour les entrées: 1) X_data est des exemples de formation 2) Les étiquettes sont l'étiquette de l'exemple de formation correspondant 3) label_length est la longueur de l'étiquette 4) Input_Length est la longueur de votre entrée 5) chaîne source est il est pas obligatoire, il est juste utilisé pour décoder

la sortie est une donnée factice pour fonction de perte CTC

maintenant dans votre code, vous avez généré seulement X_train, y_train, mais OTH Les entrées er sont manquantes. Vous devez préparer votre jeu de données en fonction de l'entrée et de la sortie attendues du modèle.