2017-01-10 40 views
11

Chcę trenować głęboki sieć począwszy od następnej warstwy:Błąd podczas sprawdzania wejściowy model: Oczekuje convolution2d_input_1 mieć 4 wymiary, ale mam tablicę z kształtem (32, 32, 3)

model = Sequential() 
model.add(Conv2D(32, 3, 3, input_shape=(32, 32, 3))) 

wykorzystaniem

history = model.fit_generator(get_training_data(), 
       samples_per_epoch=1, nb_epoch=1,nb_val_samples=5, 
       verbose=1,validation_data=get_validation_data() 

z poniższej generatora:

def get_training_data(self): 
    while 1: 
     for i in range(1,5): 
      image = self.X_train[i] 
      label = self.Y_train[i] 
      yield (image,label) 

(generator walidacja wygląda podobnie).

Podczas treningu, pojawia się błąd:

Error when checking model input: expected convolution2d_input_1 to have 4 
dimensions, but got array with shape (32, 32, 3) 

Jak to możliwe, z pierwszą warstwą

model.add(Conv2D(32, 3, 3, input_shape=(32, 32, 3))) 

?

+2

Jak to naprawić? –

Odpowiedz

15

Zdefiniowany kształt wejściowy jest kształtem pojedynczej próbki. Sam model oczekuje pewnej tablicy próbek jako danych wejściowych (nawet jeśli jest to tablica o długości 1).

Twoje dane wyjściowe powinny wynosić 4-d, a pierwszy wymiar służy do wyliczenia próbek. tj. dla pojedynczego obrazu powinieneś zwrócić kształt (1, 32, 32, 3).

można znaleźć więcej informacji here pod „Convolution2D”/„kształtu Input”

+0

co zmienić? Wystąpił podobny błąd - https: //paste.ubuntu.com/24188374/ –

+0

@AbhishekBhatia Powinieneś zmienić x_ip_shape w ten sam sposób. – ginge

+9

zmiana rozmiaru wejściowego powoduje, że błąd zmienia się na "Wejście 0 jest niezgodne z warstwą conv2d_1: oczekiwane ndim = 4, znalezione ndim = 5". Ktoś ma jakąś pomoc? – Stormsson