2017-04-12 5 views
0

Ich möchte mein Modell in derselben TensorFlow-Sitzung trainieren und testen. Ich verwende zwei verschiedene tf.FIFOQueue s, um die Trainings- und Testdaten mit mehreren Threads zu laden (da feed_dict zu schlechter Leistung führt). Ich habe zwei Dinge ausprobiert:TensorFlow: Training und Tests in derselben Sitzung

  1. Ich habe versucht, mein Modell zweimal (für Training und Tests) mit gemeinsamen Parametern zu erstellen. Aber ich benutzte tf.contrib.layers.batch_norm und es erlaubt nicht, die Parameter der Batch-Normalisierung zu teilen.

  2. Ich versuchte, den Eingang tf.FIFOQueue meines Netzwerks auf is_training boolean Platzhalter tf.cond aber anscheinend tf.cond führt beide dequeue Funktion s tf.FIFOQueue mit aufzubereiten, egal, was is_training hält.

Ich frage mich, was die konventionelle Einrichtung ohne Verwendung feed_dict in der gleichen Sitzung zu trainieren und zu testen ist.

Antwort

1

Offenbar tf.contrib.layers.batch_normnicht erlauben Parameter Batch-Normalisierung zu teilen, wenn in einem globalen tf.variable_scope definiert.

Beispielcode: Entnommen von here.

def model(data, is_training=False, reuse=None, scope='my_model'): 
    # Define a variable scope to contain all the variables of your model 
    with tf.variable_scope(scope, 'model', data, reuse=reuse): 
    .... 
    net = tf.contrib.layers.batch_norm(net, is_training) 
    return net 

train_outputs = model(train_data, is_training=True) 
eval_outputs = model(eval_data, is_training=False, reuse=True) 
Verwandte Themen