2016-12-29 5 views
2

У меня много проблем с сохранением/восстановлением моделей тензорного потока, либо мои «Ядра, кажется, скончались», либо я получаю ошибки («Переменная ... уже выходит»).Tensorflow saver: Ядро, похоже, умерло

Когда мой Kernel умирает, я получаю этот журнал ошибок в моей консоли:

[I 21:13:41.505 NotebookApp] Saving file at /Nanodegree_MachineLearning/06_Capstone/capstone.ipynb 
terminate called after throwing an instance of 'std::bad_alloc' 
    what(): std::bad_alloc 
[I 21:17:05.416 NotebookApp] KernelRestarter: restarting kernel (1/5) 
WARNING:root:kernel 81679b46-ec9b-4ce6-b5be-ae2d9cf01210 restarted 
[I 21:17:41.778 NotebookApp] Saving file at /Nanodegree_MachineLearning/06_Capstone/capstone.ipynb 
[19324:20881:1229/212110:ERROR:object_proxy.cc(583)] Failed to call method: org.freedesktop.UPower.GetDisplayDevice: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.UnknownMethod: Method "GetDisplayDevice" with signature "" on interface "org.freedesktop.UPower" doesn't exist 

Мой код выглядит следующим образом:

if __name__ == '__main__': 
    if LEARN_MODUS: 
     with tf.Session() as sess: 
      sess.run(tf.global_variables_initializer()) 
      steps_per_epoch = len(X_train) // BATCH_SIZE 
      num_examples = steps_per_epoch * BATCH_SIZE 

      # Train model 
      for i in range(EPOCHS): 
       for step in range(steps_per_epoch): 
        #Calculate next Batch 
        batch_start = step * BATCH_SIZE 
        batch_end = (step + 1) * BATCH_SIZE 
        batch_x = X_train[batch_start:batch_end] 
        batch_y = y_train[batch_start:batch_end] 

        #Run Training 
        loss = sess.run(train_op, feed_dict={x: batch_x, y: batch_y, keep_prob: 0.5}) 

      try: 
       saver 
      except NameError: 
       saver = tf.train.Saver() 
      saver.save(sess, 'foo') 
      print("Model saved") 

Чтобы восстановить модель, я использую:

predicions = tf.argmax(fc2,1) 
predicted_classes = [] 

try: 
    saver 
except NameError: 
    saver = tf.train.Saver() 

with tf.Session() as sess: 
    saver = tf.train.import_meta_graph('foo.meta') 
    saver.restore(sess, tf.train.latest_checkpoint('./')) 

    predicted_classes = sess.run(predicions, feed_dict={x: X_test, keep_prob: 1.0}) 

Я пробовал много разных способов, иногда он работает (но не всегда !?), иногда он падает, и когда-то я получаю переменную ошибка. Должен ли я использовать сохранение/восстановление другим способом?

Я использую: Ubuntu 14.04 Анаконда 3 Python 3.5.2 Tensorflow 0,12

внутри jupyter ноутбука

Спасибо!

ответ

3

Это может произойти, когда у вас закончилась нехватка памяти, решение заключается в попытке уменьшить размер партии. Я вижу, что вы подаете свой тестовый набор в один звонок run, которому требуется достаточно памяти, чтобы делать все примеры сразу. Вы можете сделать что-то вроде eval_in_batches для суммирования точности по нескольким меньшим запросам на запуск

+0

Спасибо, что помогло! :-) – Weedjo