Γιατί λαμβάνω ένα τρισδιάστατο λάθους όταν χρησιμοποιείτε ένα 2-dim συνελικτικοί στρώμα εισόδου;

ψήφοι
0

Έχω μια ερώτηση Κεράς βαθιά μάθηση:

Είμαι οικοδόμηση ενός ταξινομητή mnist, αλλά το στρώμα εισόδου του νευρωνικού δικτύου μου είναι 2 διαστάσεων συνέλιξης στρώμα. Το σύνολο εκπαίδευσης έχει 60000 δείγματα, και το σύνολο δοκιμών έχει 10000 δείγματα. Οι διαστάσεις της κάθε εικόνας είναι 28 με 28 pixels. Παίρνω τις φέτες tensor pixel και σκουός προς τα κάτω σε δύο παραμέτρων τανυστής, διαιρέστε με 255, και να κάνουν ένα «float32».

εισαγωγές:

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

Φόρτωση των δεδομένων:

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

Προ-επεξεργασία:

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

Τότε θα τρέχει μέσα από μια 2-Δημ συνέλιξης Επίπεδο εισόδου:

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

Πλήρης Μοντέλο:

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

Παίρνω το σφάλμα:

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

Γι 'αυτό προσπάθησα να προσθέσω μια διάσταση κανάλι (να εκπροσωπεί το μαύρο άσπρο):

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

Εξακολουθώ να πάρετε ένα σφάλμα όταν προσπαθώ να χωρέσει τα δεδομένα, αλλά αυτή τη φορά το μοντέλο μου συντάσσει

ValueError: Error when checking input: expected conv2d_3_input to have 4 dimensions, but got array with shape (60000, 784)
Δημοσιεύθηκε 08/11/2018 στις 00:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Θα πρέπει πρώτα να βεβαιωθείτε ότι Conv2d παίρνει το σχήμα εισόδου, όπως ( height , width , number of channels )επίσης μια διάσταση μέγεθος της παρτίδας πρέπει να προστεθεί στην αρχή. Ολόκληρη η διάσταση γίνεται ( batch size , height , width , number of channels ).

  • Σχήμα εισόδου σας είναι ( 60000 , 784 , 1 ) εδώ 60000 είναι το μέγεθος της παρτίδας και ο αριθμός των καναλιών είναι 1.

  • Για την Conv2d, που το σχήμα εισόδου πρέπει να είναι ( 28 , 28 ,1 ). Μπορείτε Δεν χρειάζεται να αναφέρουμε το μέγεθος της παρτίδας για Conv2d .

Απαντήθηκε 08/11/2018 στις 01:43
πηγή χρήστη

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