2017-04-04 4 views
2

Ich kann nicht scheinen global_step von meinem gespeicherten Prüfpunkt abzurufen. Mein Code:Tensorflow kann global_step nicht vom Prüfpunkt wiederherstellen

//(...) 
checkpoint_file = tf.train.latest_checkpoint(checkpoint_dir) 
saver = tf.train.import_meta_graph("{}.meta".format(checkpoint_file), clear_devices=True) 
saver.restore(sess, checkpoint_file) 
for v in tf.global_variables(): 
    print(v) 
test = tf.get_variable("global_step") 
print(test) 

Ergebnis:

//(...) 
Tensor("global_step/read:0", shape=(), dtype=int32) 
//(...) 
Traceback (most recent call last): 
    File "train.py", line XXX, in <module> 
    test = tf.get_variable("global_step") 
    File "(...)/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 988, in get_variable 
    custom_getter=custom_getter) 
    File "(...)/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 890, in get_variable 
    custom_getter=custom_getter) 
    File "(...)/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 348, in get_variable 
    validate_shape=validate_shape) 
    File "(...)/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 333, in _true_getter 
    caching_device=caching_device, validate_shape=validate_shape) 
    File "(...)/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 660, in _get_single_variable 
    "but instead was +1ms." % (name, shape)) 
ValueError: Shape of a new variable (global_step) must be fully defined, but instead was <unknown>. 

Ich habe auch versucht global_step:0 und global_step/read:0 aber mit dem gleichen Ergebnis. Irgendwelche Tipps? Oder ich sollte tf.get_variable nicht verwenden?

Danke

Antwort

1

Sie nur tf.get_variable verwenden können eine vorhandene Variable abrufen, wenn diese Variable mit tf.get_variable in erster Linie erstellt wurde. Außerdem muss der Variablenbereich entsprechend festgelegt werden. Es scheint, dass hier versucht wird, eine neue Variable namens 'global_step' zu erstellen, die anzeigt, dass sie noch nicht existiert. Here enthält weitere Informationen zur Verwendung von tf.get_variable.

ich in der Regel die globale Schritt wie folgt behandeln:

# to create 
global_step = tf.Variable(tf.constant(0), trainable=False, name='global_step') 
tf.add_to_collection('global_step', global_step) 

# to load 
global_step = tf.get_collection_ref('global_step')[0] 
# get the current value 
gs = sess.run(global_step) 

Edit: Wenn Sie nicht die Art und Weise Sie die globale Schritt speichern ändern können, sollten folgende Arbeiten:

global_step = tf.get_default_graph().get_tensor_by_name('global_step:0') 
0

können Sie tun Sie das:

with tf.Session() as sess: 
    predict_top_5 = tf.nn.top_k(scores, k=5) 
    label_top_5 = tf.nn.top_k(input_y, k=5) 
    ckpt = tf.train.get_checkpoint_state('models') 
    if ckpt and ckpt.model_checkpoint_path: 
     saver.restore(sess,ckpt.model_checkpoint_path) 
     global_step = int(ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]) 
Verwandte Themen