1

Я побежал модель нейронной сети для классификации MNIST и получил error-MNIST классификация tensorflow, RecursionError: максимальная глубина рекурсии превысила

RecursionError: maximum recursion depth exceeded 

Я проверил некоторые из вопросов, на StackOverflow и пытался увеличить предел рекурсии 1500, но не работает. Как увеличить лимит? Как узнать, какой предел приведет к переполнению стека?

Я последовал за учебник от here

У меня есть Anaconda 3.5 распределение на моих окнах 10 машин.

Полный код здесь-

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 

#height x weight 
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_hl1, n_nodes_hl2])), 
        '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])) 
       } 

#our model= (input_data x weights) + biases 

    l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), hidden_1_layer['biases']) 
    l1 = tf.nn.relu(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.matmul(l3, output_layer['weights']) + output_layer['biases'] 

    return output 


def train_neural_network(x): 
    prediction = train_neural_network(x) 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction,y)) 
    optimizer= tf.train.AdamOptimizer().minimize(cost) #default learning rate for adamoptimizer= 0.001 

    hm_epochs = 5 
    with tf.Session() as sess: 
     sess.run(tf.initialize_all_variables()) 
     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) 
+0

Я рекомендую вам следовать учебному пособию по методу tensorflow. Это действительно хорошо: https://www.tensorflow.org/versions/r0.10/tutorials/mnist/beginners/ – Roman

ответ

2

Похоже, вы используете код из PythonProgramming.net's deep learning course

В вашем коде, вы делаете:

def train_neural_network(x): 
    prediction = train_neural_network(x) 

Вы вызова функции внутри функции для запуска, которая является то, что никогда не -ending.

Рассмотрите ваши цели здесь. Должна ли быть предсказанием возвращение train_neural_network или возврат из neural_network_model?

def train_neural_network(x): 
    prediction = neural_network_model(x) 
+0

Большое спасибо за разъяснение. Я думаю, что, возможно, я слишком быстро вскочил в глубокие сети, я снова вернулся к лекциям python для основ сейчас :) – zerogravty

6

Я не знаю, что точный код должен быть, но я совершенно уверен, что следующие строки неверны:

def train_neural_network(x): 
    prediction = train_neural_network(x) 

Это приведет к бесконечной рекурсии, и увеличение предела рекурсии не решит проблему.