2016-06-06 20 views
6

Podążam za Keras CIFAR10 tutorial here. Jedyne zmiany I, przygotowano:Keras/Tensorflow przewidują: błąd w kształcie tablicy

[a] dodaje się do końca pliku poradnik

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

[b] zmieniła ~/Keras/keras.json do

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

i. może pomyślnie uruchomić model.

Następnie chcę przetestować pojedyncze zdjęcie przed wyszkolonym modelem. Mój kod:

[... 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) 

otrzymuję ten błąd:

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

Co jest poprawny sposób przekształcania danych wejściowych do jednego obrazu do testowania?

Mam nie dodano "image_dim_ordering": "tf" w ./keras/keras.json.

+0

Czy objaśnić głosowanie w dół? to pomogłoby w przyszłych publikacjach. – pepe

Odpowiedz

5

Należy zmienić kształt obrazu wejściowego, aby uzyskać kształt [?, 3, 32, 32], gdzie rozmiar wsadu to ?. W twoim przypadku, ponieważ masz 1 zdjęcie wielkość partii wynosi 1, więc można zrobić:

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

pracuję nad danymi cifar10 teraz odkryłem, że to prosta Reshape nie zadziała, należy użyć numpy. zamiast tego dokonaj transpozycji.