2017-07-06 29 views
2

私はtensorflowを初めて使用しており、 sentdexによるチュートリアル。私はエラーを取得し続ける -ValueError:寸法は同じでなければなりませんが、入力形状が[MatMul_1](op: 'MatMul')の場合は784と500です。[?、784]、[500,500]

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

私は問題がある原因になっていると信じていスニペット -

l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), 
hidden_1_layer['biases']) 
l1 = tf.nn.relu(l1) 

l2 = tf.add(tf.matmul(data, hidden_2_layer['weights']), 
hidden_2_layer['biases']) 
l2 = tf.nn.relu(l2) 

l3 = tf.add(tf.matmul(data, hidden_3_layer['weights']), 
hidden_3_layer['biases']) 
l3 = tf.nn.relu(l3) 

output = tf.add(tf.matmul(l3, output_layer['weights']), 
output_layer['biases']) 

return output 

私はnoobのだと間違っているかもしれないが。私のコード全体は -

mnist = input_data.read_data_sets("/tmp/ data/", one_hot=True) 

n_nodes_hl1 = 500 
n_nodes_hl2 = 500 
n_nodes_hl3 = 500 

n_classes = 10 
batch_size = 100 

x = tf.placeholder('float', [None, 784]) 
y = tf.placeholder('float') 


def neural_network_model(data): 
hidden_1_layer = {'weights': tf.Variable(tf.random_normal([784, 
n_nodes_hl1])), 
        'biases': 
tf.Variable(tf.random_normal([n_nodes_hl1]))} 

hidden_2_layer = {'weights': 
tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])), 
        'biases': 
tf.Variable(tf.random_normal([n_nodes_hl2]))} 

hidden_3_layer = {'weights': 
tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])), 
        'biases': 
tf.Variable(tf.random_normal([n_nodes_hl3]))} 

output_layer = {'weights': tf.Variable(tf.random_normal([n_nodes_hl3, 
n_classes])), 
       'biases': tf.Variable(tf.random_normal([n_classes]))} 

l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), 
hidden_1_layer['biases']) 
l1 = tf.nn.relu(l1) 

l2 = tf.add(tf.matmul(data, hidden_2_layer['weights']), 
hidden_2_layer['biases']) 
l2 = tf.nn.relu(l2) 

l3 = tf.add(tf.matmul(data, hidden_3_layer['weights']), 
hidden_3_layer['biases']) 
l3 = tf.nn.relu(l3) 

output = tf.add(tf.matmul(l3, output_layer['weights']), 
output_layer['biases']) 

return output 


def train_neural_network(x): 
prediction = neural_network_model(x) 
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits 
(logits=prediction, labels=y)) 
optimizer = tf.train.AdamOptimizer().minimize(cost) 

hm_epochs = 10 

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 

    for epoch in range(hm_epochs): 
     epoch_loss = 0 
     for _ in range(int(mnist.train.num_examples/batch_size)): 
      epoch_x, epoch_y = mnist.train.next_batch(batch_size) 
      _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, 
y: epoch_y}) 
      epoch_loss += c 
     print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', 
epoch_loss) 

    correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) 
    accuracy = tf.reduce_mean(tf.cast(correct, 'float')) 
    print('Accuracy:', accuracy.eval({x: mnist.test.images, y: 
mnist.test.labels})) 


train_neural_network(x) 

です。ちなみに、Python 3.6.1とTensorflow 1.2の仮想環境でMacを実行しています。私はIDE Pycharm CEを使用しています。その情報のいずれかが有用な場合。

+0

そのまま、私も実行することができません、あなたのインデントを修正してください –

+0

'neural_network_model'の各行の間に' print(l1.get_shape()。as_list()) 'を追加して問題の原因を調べます。 – finbarr

答えて

3

l1の代わりにdataを参照しているという問題があります。代わりに

l2 = tf.add(tf.matmul(data, hidden_2_layer['weights']), 
         hidden_2_layer['biases']) 

のあなたのコードはl3ため

l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), 
         hidden_2_layer['biases']) 

と同上をお読みください。

l3 = tf.add(tf.matmul(data, hidden_3_layer['weights']), 
         hidden_3_layer['biases']) 

あなたは

l3 = tf.add(tf.matmul(l2, hidden_3_layer['weights']), 
         hidden_3_layer['biases']) 

を持つべきである代わりに、次のコードは私のために、エラーなしで走った:

import tensorflow as tf 
from tensorflow.examples.tutorials.mnist import input_data 

mnist = input_data.read_data_sets("/tmp/data/", one_hot=True) 

n_nodes_hl1 = 500 
n_nodes_hl2 = 500 
n_nodes_hl3 = 500 

n_classes = 10 
batch_size = 100 

x = tf.placeholder('float', [None, 784]) 
y = tf.placeholder('float') 

def print_shape(obj): 
    print(obj.get_shape().as_list()) 

def neural_network_model(data): 
    hidden_1_layer = {'weights': tf.Variable(tf.random_normal([784, 
                   n_nodes_hl1])), 
         'biases': 
         tf.Variable(tf.random_normal([n_nodes_hl1]))} 

    hidden_2_layer = {'weights': 
         tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])), 
         'biases': 
         tf.Variable(tf.random_normal([n_nodes_hl2]))} 

    hidden_3_layer = {'weights': 
         tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])), 
         'biases': 
         tf.Variable(tf.random_normal([n_nodes_hl3]))} 

    output_layer = {'weights': tf.Variable(tf.random_normal([n_nodes_hl3, 
                  n_classes])), 
        'biases': tf.Variable(tf.random_normal([n_classes]))} 
    print_shape(data) 
    l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), 
       hidden_1_layer['biases']) 
    print_shape(l1) 
    l1 = tf.nn.relu(l1) 
    print_shape(l1) 
    l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), 
       hidden_2_layer['biases']) 
    l2 = tf.nn.relu(l2) 

    l3 = tf.add(tf.matmul(l2, hidden_3_layer['weights']), 
       hidden_3_layer['biases']) 
    l3 = tf.nn.relu(l3) 

    output = tf.add(tf.matmul(l3, output_layer['weights']), 
        output_layer['biases']) 

    return output 


def train_neural_network(x): 
    prediction = neural_network_model(x) 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits 
          (logits=prediction, labels=y)) 
    optimizer = tf.train.AdamOptimizer().minimize(cost) 

    hm_epochs = 10 

    with tf.Session() as sess: 
     sess.run(tf.global_variables_initializer()) 

     for epoch in range(hm_epochs): 
      epoch_loss = 0 
      for _ in range(int(mnist.train.num_examples/batch_size)): 
       epoch_x, epoch_y = mnist.train.next_batch(batch_size) 
       _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, 
                   y: epoch_y}) 
       epoch_loss += c 
      print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', 
        epoch_loss) 

     correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) 
     accuracy = tf.reduce_mean(tf.cast(correct, 'float')) 
     print('Accuracy:', accuracy.eval({x: mnist.test.images, y: 
              mnist.test.labels})) 


train_neural_network(x) 
+1

それは完璧に動作します、ありがとう。 –

+0

心配しない:)私の答えが好きなら、それを受け入れることができますか? – finbarr

+1

申し訳ありません、忘れました。 :) –

関連する問題