2017-03-16 20 views
5

Tôi đã cố gắng để khôi phục lại một mô hình trong tensorflow, tuy nhiên tôi đã gặp phải một số vấn đề khi tôi cố gắng để nhập khẩu một metagraph:Tensorflow: Tiết kiệm/Phục hồi phiên, trạm kiểm soát, metagraph

Đây là mã của tôi cho nhập khẩu các metagraph:

#Create a clean graph and import MetaGraphDef nodes 
new_graph = tf.Graph() 
with tf.Session(graph=new_graph) as sess: 
    # Import the previously exported metagraph 
    saver = tf.train.import_meta_graph('/tmp/saver-model.meta') 
    saver.restore(sess, tf.train.latest_checkpoint('./')) 

Trong lớp mẫu của tôi, tôi đã xác định giữ chỗ và thu thập như sau:

"""Place Holders""" 
    self.input = tf.placeholder(tf.float32, [None, sl], name = 'input') 
    self.labels = tf.placeholder(tf.int64, [None], name = 'labels') 
    self.keep_prob = tf.placeholder("float", name= 'Drop_out_keep_prob') 
    tf.add_to_collection('vars', self.input) 
    tf.add_to_collection('vars', self.labels) 
    tf.add_to_collection('vars', self.keep_prob) 

tôi đào tạo mô hình của tôi như sau:

saver = tf.train.Saver(tf.global_variables()) 
# Session time 
sess = tf.Session() # without context manager, close the session later. 
writer = tf.summary.FileWriter("/tmp/model/log_tb", sess.graph) # Writer for tensorboard 
sess.run(model.init_op) 

self.init_op = tf.global_variables_initializer()

Và xuất khẩu sử dụng ba tùy chọn khác nhau, bao gồm cả không có giấy tờ export_scoped_meta_graph:

# Export the model to /tmp/my-model.meta. 
scoped_meta = meta_graph.export_scoped_meta_graph(filename='/tmp/scoped.meta') 
meta_graph_def = tf.train.export_meta_graph(filename='/tmp/my-model.meta') 
saver.save(sess, '/tmp/saver-model') 

Đây là lỗi tôi nhận được khi cố gắng chạy trong Windows 10:

E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "BestSplits" device_type: "CPU"') for unknown op: BestSplits 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "CountExtremelyRandomStats" device_type: "CPU"') for unknown op: CountExtremelyRandomStats 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "FinishedNodes" device_type: "CPU"') for unknown op: FinishedNodes 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "GrowTree" device_type: "CPU"') for unknown op: GrowTree 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "ReinterpretStringToFloat" device_type: "CPU"') for unknown op: ReinterpretStringToFloat 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "SampleInputs" device_type: "CPU"') for unknown op: SampleInputs 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "ScatterAddNdim" device_type: "CPU"') for unknown op: ScatterAddNdim 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TopNInsert" device_type: "CPU"') for unknown op: TopNInsert 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TopNRemove" device_type: "CPU"') for unknown op: TopNRemove 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TreePredictions" device_type: "CPU"') for unknown op: TreePredictions 
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "UpdateFertileSlots" device_type: "CPU"') for unknown op: UpdateFertileSlots 
TypeError: expected bytes, NoneType found 

During handling of the above exception, another exception occurred: 


--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
TypeError: expected bytes, NoneType found 

During handling of the above exception, another exception occurred: 

SystemError        Traceback (most recent call last) 
<ipython-input-37-60792895b01c> in <module>() 
     6  #saver = tf.train.import_meta_graph('/tmp/saver-model.meta') 
     7  saver = tf.train.import_meta_graph('/tmp/my-model.meta') 
----> 8  saver.restore(sess, tf.train.latest_checkpoint('./')) 

c:\users\carlos\anaconda3\lib\site-packages\tensorflow\python\training\saver.py in restore(self, sess, save_path) 
    1437  return 
    1438  sess.run(self.saver_def.restore_op_name, 
-> 1439    {self.saver_def.filename_tensor_name: save_path}) 
    1440 
    1441 @staticmethod 

c:\users\carlos\anaconda3\lib\site-packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata) 
    765  try: 
    766  result = self._run(None, fetches, feed_dict, options_ptr, 
--> 767       run_metadata_ptr) 
    768  if run_metadata: 
    769   proto_data = tf_session.TF_GetBuffer(run_metadata_ptr) 

c:\users\carlos\anaconda3\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata) 
    963  if final_fetches or final_targets: 
    964  results = self._do_run(handle, final_targets, final_fetches, 
--> 965        feed_dict_string, options, run_metadata) 
    966  else: 
    967  results = [] 

c:\users\carlos\anaconda3\lib\site-packages\tensorflow\python\client\session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata) 
    1013  if handle is None: 
    1014  return self._do_call(_run_fn, self._session, feed_dict, fetch_list, 
-> 1015       target_list, options, run_metadata) 
    1016  else: 
    1017  return self._do_call(_prun_fn, self._session, handle, feed_dict, 

c:\users\carlos\anaconda3\lib\site-packages\tensorflow\python\client\session.py in _do_call(self, fn, *args) 
    1020 def _do_call(self, fn, *args): 
    1021  try: 
-> 1022  return fn(*args) 
    1023  except errors.OpError as e: 
    1024  message = compat.as_text(e.message) 

c:\users\carlos\anaconda3\lib\site-packages\tensorflow\python\client\session.py in _run_fn(session, feed_dict, fetch_list, target_list, options, run_metadata) 
    1002   return tf_session.TF_Run(session, options, 
    1003         feed_dict, fetch_list, target_list, 
-> 1004         status, run_metadata) 
    1005 
    1006  def _prun_fn(session, handle, feed_dict, fetch_list): 

SystemError: <built-in function TF_Run> returned a result with an error set 

Khi cố gắng để chạy dưới debian:

I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 1 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0: Y Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 1: Y Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN X, pci bus id: 0000:01:00.0) 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:1) -> (device: 1, name: GeForce GTX TITAN X, pci bus id: 0000:02:00.0) 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1022, in _do_call 
    return fn(*args) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1004, in _run_fn 
    status, run_metadata) 
    File "/usr/lib/python3.4/contextlib.py", line 66, in __exit__ 
    next(self.gen) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/errors_impl.py", line 469, in raise_exception_on_not_ok_status 
    pywrap_tensorflow.TF_GetCode(status)) 
tensorflow.python.framework.errors_impl.InternalError: Unable to get element from the feed as bytes. 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/training/saver.py", line 1439, in restore 
    {self.saver_def.filename_tensor_name: save_path}) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 767, in run 
    run_metadata_ptr) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 965, in _run 
    feed_dict_string, options, run_metadata) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1015, in _do_run 
    target_list, options, run_metadata) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1035, in _do_call 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors_impl.InternalError: Unable to get element from the feed as bytes. 
+0

Bạn không cần phải gọi 'export_scoped_meta_graph' và' export_meta_graph'. 'Saver' lưu số liệu theo mặc định cùng với điểm kiểm tra. – Temak

+0

Để làm rõ, tôi đã thử ba cách độc lập với nhau và tôi nhận được lỗi mà tôi đã đăng. Tôi tin rằng đó là tiết kiệm các trạm kiểm soát sai – SerialDev

Trả lời

3

tôi quản lý để giải quyết nó và quyết định chia sẻ trong trường hợp có người đi kèm accross này trong tương lai:

Thêm tất cả các giữ chỗ để bộ sưu tập:

tf.add_to_collection('vars', input) 
tf.add_to_collection('vars', labels) 
tf.add_to_collection('vars', keep_prob) 

hợp nhất và khởi tạo các biến độc lập (tránh sử dụng tf.global_variables_initializer()):

012.
merged = tf.summary.merge([loss_summ, cost_summ, tloss_summ, acc_summ]) 

tiết kiệm mô hình trong đào tạo:

if i%100 == 0: 
    saver.save(sess, save_dir + 'model.ckpt', global_step=i+100) 

Khởi tạo một metagraph mới, bao gồm các trình bảo vệ trước khi nhập khẩu các metagraph vào phiên làm việc mới:

này sẽ ngăn saver.saver_def.filename_tensor_name lỗi

Tên 'lưu/Const: 0' là một Tensor không tồn tại

Điều này là do:

* The default name scope for a tf.train.Saver is "save/" and the placeholder 
is actually a tf.constant() whose name defaults to "Const:0", which explains 
why the flag defaults to "save/Const:0". 



saver = tf.train.Saver() 
sess = tf.Session() 
sess.run(init_op) 

Lấy trạm kiểm soát sử dụng tf.train.get_checkpoint_state():

sess =tf.Session() 
ckpt = tf.train.get_checkpoint_state(save_dir) 
saver.restore(sess, ckpt.model_checkpoint_path) 
Các vấn đề liên quan