2017-01-30 4 views
2

J'essaie de visualiser la sortie de chaque couche convolutionnelle dans keras, en suivant ce lien: MNIST Visualisation. J'ai modifié certaines couches pour supprimer les erreurs, mais maintenant je suis coincé avec l'erreur Dense Layer.Keras Dense Layer Erreur: TypeError: l'objet 'int' n'est pas appelable

np.set_printoptions(precision=5, suppress=True) 
np.random.seed(1337) # for reproducibility 

nb_classes = 10 

# the data, shuffled and split between tran and test sets 
(X_train, y_train), (X_test, y_test) = mnist.load_data("mnist.pkl") 

X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) 
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) 
X_train = X_train.astype("float32") 
X_test = X_test.astype("float32") 
X_train /= 255 
X_test /= 255 
print('X_train shape:', X_train.shape) 
print(X_train.shape[0], 'train samples') 
print(X_test.shape[0], 'test samples') 

# convert class vectors to binary class matrices 
Y_train = np_utils.to_categorical(y_train, nb_classes) 
Y_test = np_utils.to_categorical(y_test, nb_classes) 

i = 4600 
pl.imshow(X_train[i, 0], interpolation='nearest', cmap=cm.binary) 
print("label : ", Y_train[i,:]) 

model = Sequential() 

model.add(Convolution2D(32, 3, 3, border_mode='same',input_shape = (1,28,28))) #changed border_mode from full -> valid 
convout1 = Activation('relu') 
model.add(convout1) 
model.add(Convolution2D(32, 32, 3)) 

convout2 = Activation('relu') 
model.add(convout2) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 

model.add(Flatten()) 

model.add(Dense(32*196, 128)) #ERROR HERE 

Un commentaire ou une suggestion très apprécié. Je vous remercie.

Répondre

2

Si vous vérifiez la documentation d'une couche Dense, vous remarquerez que le premier argument qu'elle accepte est la forme de la sortie et la seconde est init qui décrit la façon dont les poids de la couche sont lancés. Dans votre cas, vous avez fourni le int en tant que second argument positionnel, ce qui a provoqué une erreur. Vous devez modifier le code (en supposant que vous voulez une sortie sous forme de vecteur 128 dimensions):

model.add(Dense(128)) 
+0

Merci pour votre commentaire Marcin, je l'ai changé model.add (Dense (128)), mais j'ai reçu l'erreur "OverflowError: Range dépasse les limites valides". Savez-vous peut-être pourquoi? – matchifang

+0

De quelle ligne de code? –

+0

la ligne qui a l'erreur. Je l'ai changé de model.add (Dense (32 * 196, 128)) à model.add (Dense (128)) – matchifang