Proč se rozměrovou chybu, když jsem použít 2-dim konvoluční vstupní vrstvu?

hlasů
0

Mám KERAS hluboké učení otázku:

Stavím mnist klasifikátor, ale vstupní vrstva mého neuronové sítě je druhý Dimensional Konvoluční vrstva. Tréninkový set má 60000 vzorků a testovací sada obsahuje 10000 vzorků. Rozměry každého snímku je 28 o 28 pixelů. Beru tenzorového plátky pixel a rozdrtit ho na dva parametry tensor, vydělte 255 a učinit z něj ‚float32‘.

dovoz:

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

Načítání dat:

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

Předzpracování:

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

Pak jsem jej spustit přes 2-Dim konvoluční vstupní vrstvy:

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

Full Model:

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'))

Mám chybu:

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

Tak jsem se snažil přidat rozměr kanálu (reprezentovat černá bílá):

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

I přesto se vyskytne chyba, když se snažím, aby se vešly data, ale tentokrát můj vzor sestavuje

ValueError: Error when checking input: expected conv2d_3_input to have 4 dimensions, but got array with shape (60000, 784)
Položena 08/11/2018 v 00:01
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Musíte se nejprve ujistit, že Conv2d má vstupní tvar, ( height , width , number of channels )také rozměr velikost dávky musí být přidány na začátku. Celá rozměr stává ( batch size , height , width , number of channels ).

  • Váš vstup Tvar je ( 60000 , 784 , 1 ) zde 60000 je vaše velikost šarže a počet kanálů je 1.

  • Pro Conv2d, zadáte tvar by měl být ( 28 , 28 ,1 ). Vy nemusíte se zmínit o velikost dávky pro Conv2d .

Odpovězeno 08/11/2018 v 01:43
zdroj uživatelem

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