J'essaye d'implémenter le perceptron multicouche dans TensorFlow avec des données de tableau 4D-numpy J'ai eu ce problème sur la fonction MatMul. J'espère que quelqu'un peut m'aider ici et je vous remercie beaucoup.Problème MatMul dans TensorFlow
ValueError: Shape must be rank 2 but is rank 4 for 'MatMul' (op: 'MatMul') with input shapes: [1500,2,10000,5], [1500,1500].
Mon code est:
# Network Parameters
n_hidden_1 = 1500 # 1st layer number of neurons
n_hidden_2 = 1500 # 2nd layer number of neurons
n_input = 1500
n_classes = 1500
# tf Graph input
X = tf.placeholder("float", [1500,2,10000,5])
Y = tf.placeholder("float", [1500,1])
# Store layers weight & bias
weights = {
'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}
biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1])),
'b2': tf.Variable(tf.random_normal([n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_classes]))
}
# Create model
def multilayer_perceptron(x):
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
return out_layer
# Construct model
logits = multilayer_perceptron(X)
La deuxième erreur est:
ValueError: Dimension 1 in both shapes must be equal, but are 1500 and 1 for 'cost/SoftmaxCrossEntropyWithLogits' (op: 'SoftmaxCrossEntropyWithLogits') with input shapes: [1500,1500], [1500,1].
le code est:
p_keep_input = tf.placeholder("float", name="p_keep_input")
p_keep_hidden = tf.placeholder("float", name="p_keep_hidden")
py_x = model(X, w_h, w_h2, w_o, p_keep_input, p_keep_hidden)
with tf.name_scope("cost"):
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=py_x, labels=Y))
train_op = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost)
merci beaucoup! il a résolu le problème;) – user37353
J'ai eu une autre erreur. Je vais l'ajouter à ma question. – user37353
Je l'ai répondu. À l'avenir, s'il vous plaît poster de nouvelles questions arrising dans un autre poste, car ils sont des problèmes différents, de sorte que vous pouvez accepter la première réponse et obtenir plus d'attention sur la nouvelle erreur. Et vous ne devriez certainement pas utiliser des nombres égaux partout (votre 1500 pour n_samples, n_classes, n_hidden_1, n_hidden_2). Même si vous utilisez 1500, 1499, 1498, 1497, il aura presque exactement le même comportement, mais vous saurez beaucoup plus vite si vos formes sont ce qu'elles devraient être. – gdelab