2017-04-22 3 views
0

J'essaie d'ajouter plus de couches à mon réseau neuronal dans le flux tensoriel, mais ici, je reçois cette erreur.Ajout de plusieurs couches avec TensorFlow Erreur

ValueError: Dimensions must be equal, but are 256 and 784 for 'MatMul_1' (op: 'MatMul') with input shapes: [?,256], [784,256]. 

Voici comment je crée les poids et le biais.

# Store layers weight & bias 
weights = { 
    'hidden_layer': tf.Variable(tf.random_normal([n_input, n_hidden_layer])), 
    'out': tf.Variable(tf.random_normal([n_hidden_layer, n_classes])) 
} 
biases = { 
    'hidden_layer': tf.Variable(tf.random_normal([n_hidden_layer])), 
    'out': tf.Variable(tf.random_normal([n_classes])) 
} 

Voici où je fais mon modèle

# Hidden layer with RELU activation 
layer_1 = tf.add(tf.matmul(x_flat, weights['hidden_layer']), biases['hidden_layer']) 
layer_1 = tf.nn.relu(layer_1) 
layer_1 = tf.nn.dropout(layer_1, keep_prob) 

layer_2 = tf.add(tf.matmul(layer_1, weights['hidden_layer']), biases['hidden_layer']) 
layer_2 = tf.nn.relu(layer_2) 
layer_2 = tf.nn.dropout(layer_2, keep_prob) 
# Output layer with linear activation 
logits = tf.matmul(layer_2, weights['out']) + biases['out'] 

Et l'erreur est très probablement en layer_2. J'utilise le jeu de données MNIST. Et aussi le xy, un xPlat sont remodelés à

x shape is (?, 28, 28, 1) 
y shape is (?, 10) 
x flat shape is (?, 784) 

Répondre

1

Vous devriez probablement utiliser des poids et des biais différents pour la couche 1 et la couche 2.

Le problème est que les deux couches 1 et 2 sont pour des contributions de taille 784. Mais la couche 1 a des sorties de taille 256, donc la couche 2 ne peut pas fonctionner avec ça.

Plus précisément, les matrices layer_1 et weights['hidden_layer'] que vous essayez de se multiplier dans cette ligne ont des tailles incompatibles:

layer_2 = tf.add(tf.matmul(layer_1, weights['hidden_layer']), biases['hidden_layer']) 

Cela pourrait fonctionner à la place:

# Store layers weight & bias 
weights = { 
    'layer_1': tf.Variable(tf.random_normal([n_input, n_hidden_layer])), 
    'layer_2': tf.Variable(tf.random_normal([n_hidden_layer, n_hidden_layer])), 
    'out': tf.Variable(tf.random_normal([n_hidden_layer, n_classes])) 
} 
biases = { 
    'layer_1': tf.Variable(tf.random_normal([n_hidden_layer])), 
    'layer_2': tf.Variable(tf.random_normal([n_hidden_layer])), 
    'out': tf.Variable(tf.random_normal([n_classes])) 
} 

et

# Hidden layer with RELU activation 
layer_1 = tf.add(tf.matmul(x_flat, weights['layer_1']), biases['layer_1']) 
layer_1 = tf.nn.relu(layer_1) 
layer_1 = tf.nn.dropout(layer_1, keep_prob) 

layer_2 = tf.add(tf.matmul(layer_1, weights['layer_2']), biases['layer_2']) 
layer_2 = tf.nn.relu(layer_2) 
layer_2 = tf.nn.dropout(layer_2, keep_prob) 
# Output layer with linear activation 
logits = tf.matmul(layer_2, weights['out']) + biases['out'] 
+0

Oui ofcourse , c'était une chose si simple, j'ai complètement oublié que je s utilisant les mêmes poids et biais. Merci beaucoup, je stressais pendant une heure et totalement ignoré cela. Merci. –