Warum erhalte ich einen Maßfehler, wenn ich eine 2-dim Faltungseingangsschicht verwenden?

stimmen
0

Ich habe eine Keras tief Lern ​​Frage:

Ich baue eine mnist Klassifikator, aber die Eingangsschicht meines neuronales Netz ist ein 2. Dimensional Faltungs Schicht. Der Trainingssatz beträgt 60000 Proben und der Testsatz hat 10000 Proben. Die Abmessungen jedes Bildes ist 28 um 28 Pixel. Ich nehme die Tensor Scheiben Pixel und es zerquetschen von 255, zu einem zwei Parameter Tensor, teilen nach unten und machen es zu einem ‚float32‘.

Importe:

from keras.models import Sequential
from keras.layers import Dense, MaxPooling2D, Conv2D, Dropout, Flatten
from keras.datasets import mnist

Laden der Daten:

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

Vorverarbeitung:

train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') /255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') /255

Dann laufe ich es durch eine 2-Dim Faltungseingangsschicht:

network = Sequential()
network.add(Conv2D(64, kernel_size = (3, 3), padding='valid', data_format=channels_last, input_shape = (60000, 784)))

Vollständiges Modell:

network = Sequential()
network.add(Conv2D(64, kernel_size = (3, 3), padding='valid', data_format=channels_last, input_shape = (60000, 784)))
network.add(MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=channels_last))
network.add(Conv2D(64, (2,2), strides=(1, 1), padding='valid',  data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, 
kernel_initializer='glorot_uniform', bias_initializer='zeros', 
kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, 
kernel_constraint=None, bias_constraint=None))
network.add(MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None))
network.add(Flatten())
network.add(Dense(128, activation= 'relu'))
network.add(Dropout(0.2, noise_shape=None, seed=7))
network.add(Dense(10, activation='softmax'))

Ich erhalte die Fehlermeldung:

ValueError: Input 0 is incompatible with layer conv2d_7: expected ndim=4, found ndim=3

Also habe ich versucht, einen Kanal Dimension hinzuzufügen (schwarz weiß darzustellen):

network = Sequential()
network.add(Conv2D(64, kernel_size = (3, 3), padding='valid', 
data_format=channels_last, input_shape = (60000, 784, 1)))

Ich bekomme immer noch einen Fehler, wenn ich versuche, um die Daten zu passen, aber dieses Mal mein Modell kompiliert

ValueError: Error when checking input: expected conv2d_3_input to have 4 dimensions, but got array with shape (60000, 784)
Veröffentlicht am 08/11/2018 um 00:01
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Sie müssen zuerst sicherstellen , dass Conv2d die Eingabeform , wie nimmt ( height , width , number of channels )auch eine Losgröße Dimension zu Beginn hinzugefügt werden muss. Die ganze Dimension wird ( batch size , height , width , number of channels ).

  • Ihre Eingabe Form ist ( 60000 , 784 , 1 ) hier 60000 ist Ihre Chargengröße und die Anzahl der Kanäle ist 1.

  • Für die Conv2d, sollten Sie Eingabeform sein ( 28 , 28 ,1 ). Sie brauchen nicht auf die Losgröße für Conv2d zu erwähnen .

Beantwortet am 08/11/2018 um 01:43
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more