1

我收到以下錯誤更大的 - 顯然,在節省我的模型Tensorflow保存模型:GraphDef不能超過2GB

Step = 1799 | Tensorflow Accuracy = 1.0 
Step = 1799 | My Accuracy = 0.0363355780022 
Step = 1800 | Tensorflow Accuracy = 1.0 
Step = 1800 | My Accuracy = 0.0364694929089 
Traceback (most recent call last): 
    File "CNN-LSTM-seg-reg-sigmoid.py", line 290, in <module> 
    saver.save(sess, save_path) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 1085, in save 
    self.export_meta_graph(meta_graph_filename) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 1103, in export_meta_graph 
    add_shapes=True), 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2175, in as_graph_def 
    result, _ = self._as_graph_def(from_version, add_shapes) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2138, in _as_graph_def 
    raise ValueError("GraphDef cannot be larger than 2GB.") 
ValueError: GraphDef cannot be larger than 2GB. 

Here建議看出來tf.constant S的時間,但我已經爲零常量在我的程序中。但是,我的weightsbiases如下所示:tf.Variable(tf.random_normal([32]),name="bc1")。這可能是一個問題嗎?

如果不是這樣,那麼比this告訴我,我在每次循環迭代後都會添加到圖中,但我不確定它發生的位置。

我的第一個猜測是我做出預測的時候。我提出通過 預測下面的代碼...

# Make prediction 
im = Image.open('/home/volcart/Documents/Data/input_crops/temp data0001.tif') 
batch_x = np.array(im) 
batch_x = batch_x.reshape((1, n_input_x, n_input_y)) 
batch_x = batch_x.astype(float) 
prediction = sess.run(pred, feed_dict={x: batch_x}) 
prediction = tf.sigmoid(prediction.reshape((n_input_x * n_input_y, n_classes))) 
prediction = prediction.eval().reshape((n_input_x, n_input_y, n_classes)) 

我的第二個猜測是,當我通過以下計算lossaccuracyloss, acc = sess.run([cost, accuracy], feed_dict={x: batch_x, y: batch_y})

我的整個會話代碼如下所示:

# Initializing the variables 
init = tf.initialize_all_variables() 
saver = tf.train.Saver() 

gpu_options = tf.GPUOptions() 
config = tf.ConfigProto(gpu_options=gpu_options) 
config.gpu_options.allow_growth = True 

# Launch the graph 
with tf.Session(config=config) as sess: 
    sess.run(init) 
    summary = tf.train.SummaryWriter('/tmp/logdir/', sess.graph) #initialize graph for tensorboard 
    step = 1 
    # Import data 
    data = scroll_data.read_data('/home/volcart/Documents/Data/') 
    # Keep training until reach max iterations 
    while step * batch_size < training_iters: 
     batch_x, batch_y = data.train.next_batch(batch_size) 
     # Run optimization op (backprop) 
     batch_x = batch_x.reshape((batch_size, n_input_x, n_input_y)) 
     batch_y = batch_y.reshape((batch_size, n_input_x, n_input_y)) 
     batch_y = convert_to_2_channel(batch_y, batch_size) 
     sess.run(optimizer, feed_dict={x: batch_x, y: batch_y}) 
     step = step + 1 

     loss, acc = sess.run([cost, accuracy], feed_dict={x: batch_x, 
                  y: batch_y}) 


     # Make prediction 
     im = Image.open('/home/volcart/Documents/Data/input_crops/temp data0001.tif') 
     batch_x = np.array(im) 
     batch_x = batch_x.reshape((1, n_input_x, n_input_y)) 
     batch_x = batch_x.astype(float) 
     prediction = sess.run(pred, feed_dict={x: batch_x}) 
     prediction = tf.sigmoid(prediction.reshape((n_input_x * n_input_y, n_classes))) 
     prediction = prediction.eval().reshape((n_input_x, n_input_y, n_classes)) 

     # Temp arrays are to splice the prediction n_input_x x n_input_y x 2 
      # into 2 matrices n_input_x x n_input_y 
     temp_arr1 = np.empty((n_input_x, n_input_y)) 
     for i in xrange(n_input_x): 
      for j in xrange(n_input_x): 
       for k in xrange(n_classes): 
        if k == 0: 
         temp_arr1[i][j] = 1 - prediction[i][j][k] 

     my_acc = accuracy_custom(temp_arr1,batch_y[0,:,:,0]) 

     print "Step = " + str(step) + " | Tensorflow Accuracy = " + str(acc) 
     print "Step = " + str(step) + " | My Accuracy = " + str(my_acc) 

     if step % 100 == 0: 
      save_path = "/home/volcart/Documents/CNN-LSTM-reg-model/CNN-LSTM-seg-step-" + str(step) + "-model.ckpt" 
      saver.save(sess, save_path) 
      csv_file = "/home/volcart/Documents/CNN-LSTM-reg/CNNLSTMreg-step-" + str(step) + "-accuracy-" + str(my_acc) + ".csv" 
      np.savetxt(csv_file, temp_arr1, delimiter=",") 
+0

不會立即崩潰之前加入tf.get_default_graph().finalize()趕上這樣的問題呢?儘量保存在每一步。如果它在幾步之後崩潰,那麼模型會出現問題。 – fabrizioM

回答

2

您正在發展該產品:

prediction = tf.sigmoid(prediction.reshape((n_input_x * n_input_y, n_classes))) 

這會將您的prediction numpy數組轉換爲TensorFlow常量節點,並將其內聯到Graph中,並在其上添加Sigmoid節點。

你可以開始你的訓練循環

+0

如果我使用'tf.get_default_graph()。finalize()',那麼我無法添加新節點,例如導致問題的行。我需要在'Session'之前創建節點並執行'sess.run()'嗎?用那個特定的節點? –

+0

所有的Tensorflow節點都可以(也應該)在開始會話之前進行定義,以避免類似你的錯誤 –

相關問題