2016-05-07 13 views
7

Mój wejściowy kształt ma wynosić 100x100. Reprezentuje zdanie. Każde słowo jest wektorem o 100 wymiarach, aw zdaniu jest maksymalnie 100 słów.Podczas budowania CNN, otrzymuję skargi od Keras, które nie mają dla mnie sensu.

Dostarczam osiem zdań do CNN. Nie jestem pewien, czy to oznacza, że ​​mój kształt wejściowy powinien mieć wartość 100x100x8.

Wtedy następujące linie

Convolution2D(10, 3, 3, border_mode='same', 
         input_shape=(100, 100)) 

narzeka:

Wejście 0 jest niezgodna z warstwy convolution2d_1: Oczekuje ndim = 4, uznał ndim = 3

To nie ma sensu do mnie mój wymiar wejściowy to 2. Potrafię przez to przejść zmieniając input_shape na (100,100,8). Ale "oczekiwany bit ndim = 4" po prostu nie ma dla mnie sensu.

Nie widzę też, dlaczego warstwa splotu 3x3 z 10 filtrami nie akceptuje wejścia o wartości 100x100.

Nawet ja otrzymuję skargę na temat "oczekiwanego ndim = 4". Występuje problem w mojej warstwie aktywacyjnej. Tam narzeka:

Nie można zastosować softmax do tensora, który nie jest 2D ani 3D. Tutaj ndim = 4

Czy ktoś może wyjaśnić, co się tutaj dzieje i jak to naprawić? Wielkie dzięki.

Odpowiedz

2

Brakującym wymiarem warstw splotów 2D jest wymiar "kanału".

Dla danych obrazu, wymiar kanału wynosi 1 dla obrazów w skali szarości i 3 dla obrazów kolorowych.

W twoim przypadku, aby upewnić się, że Keras nie będzie narzekać, możesz użyć splotu 2D z 1 kanałem lub splotu 1D z 100 kanałów.

Ref: http://keras.io/layers/convolutional/#convolution2d

2

miałem ten sam problem i rozwiązać go dodając jeden wymiar dla channel do input_shape argument.

Jakbym zrozumieć proponuję następujące rozwiązanie:

Convolution2D(10, 3, 3, border_mode='same', input_shape=(100, 100, 1)) 
Powiązane problemy