2016-06-06 33 views
6

Sto seguendo lo Keras CIFAR10 tutorial here. Le uniche modifiche che ho fatto sono state:Keras/Tensorflow predicono: errore nella forma dell'array

[a] aggiunto alla fine del file di esercitazione

model.save_weights('./weights.h5', overwrite=True) 

[b] cambiato ~/keras/keras.json a

{"floatx": "float32", "backend": "tensorflow", "epsilon": 1e-07} 

io. può eseguire il modello con successo.

Quindi voglio testare una singola immagine sul modello addestrato. Il mio codice:

[... similar to tutorial file with model being created and compiled...] 
... 
model = Sequential() 
... 
model.compile() 

model.load_weights('./ddx_weights.h5') 

img = cv2.imread('car.jpeg', -1) # this is is a 32x32 RGB image 
img = np.array(img) 
y_pred = model.predict_classes(img, 1) 
print(y_pred) 

ottengo questo errore:

ValueError: Cannot feed value of shape (1, 32, 3) for Tensor 'convolution2d_input_1:0', which has shape '(?, 3, 32, 32)' 

Qual è il modo corretto di rimodellare i dati di input per una singola immagine da testare?

Ho non aggiunto "image_dim_ordering": "tf" in ./keras/keras.json.

+0

cura di spiegare il voto negativo? ciò aiuterebbe per la pubblicazione futura. – pepe

risposta

5

È necessario ridisegnare l'immagine di input per avere una forma di [?, 3, 32, 32] dove ? è la dimensione del batch. Nel tuo caso, dal momento che si dispone di 1 immagine la dimensione del lotto è di 1, in modo da poter fare:

img = np.array(img) 
img = img.reshape((1, 3, 32, 32)) 
0

sto lavorando sui dati cifar10 ora, ho scoperto che un semplice ridisegno non funziona, dovrebbe usare NumPy. trasporre invece.