2017-03-02 3 views
0

Ich habe eine andere TensorFlow query:TensorFlow: Nicht alle meine Variablen wiederhergestellt werden - Python

Ich trainiere ein Regressionsmodell, die Gewichte und spannt das Speichern und Wiederherstellen sie dann das Modell auf einem anderen Daten erneut ausführen einstellen. Zumindest versuche ich das. Nicht alle meine Gewichte werden wiederhergestellt. Hier ist der Code verwendet meine Variablen zum Speichern:

# Add ops to save and restore all the variables. 
saver = tf.train.Saver({**weights, **biases}) 

# Save the variables to disk. 
save_path = saver.save(sess, "Saved_Vars.ckpt") 

Und hier ist meine gesamte Code für die Wiederherstellung und den Fahrbetrieb:

# Network Parameters 
n_hidden_1 = 9 
n_hidden_2 = 56 
n_hidden_3 = 8 
n_input = 9 
n_classes = 1 

# TensorFlow Graph Input 
x = tf.placeholder("float", [None, n_input]) 

# Create Multilayer Model 
def multilayer_perceptron(x, weights, biases): 
    # First hidden layer with RELU activation 
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1']) 
    layer_1 = tf.nn.relu(layer_1) 

    # Second hidden layer with RELU activation 
    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2']) 
    layer_2 = tf.nn.relu(layer_2) 

    # Second hidden layer with RELU activation 
    layer_3 = tf.add(tf.matmul(layer_2, weights['h3']), biases['b3']) 
    layer_3 = tf.nn.relu(layer_3) 

    # Last output layer with linear activation 
    out_layer = tf.matmul(layer_3, weights['out']) + biases['out'] 
    return out_layer 

# weights and biases 
weights = { 
     'h1': tf.Variable(tf.zeros([n_input, n_hidden_1])), 
     'h2': tf.Variable(tf.zeros([n_hidden_1, n_hidden_2])), 
     'h3': tf.Variable(tf.zeros([n_hidden_2, n_hidden_3])), 
     'out': tf.Variable(tf.zeros([n_hidden_3, n_classes])) 
} 

biases = { 
     'b1' : tf.Variable(tf.zeros([n_hidden_1])), 
     'b2': tf.Variable(tf.zeros([n_hidden_2])), 
     'b3': tf.Variable(tf.zeros([n_hidden_3])), 
     'out': tf.Variable(tf.zeros([n_classes])) 
} 

# Construct Model 
pred = multilayer_perceptron(x, weights, biases) 
pred = tf.transpose(pred) 

# Initialize variables 
init = tf.global_variables_initializer() 

# RUNNING THE SESSION 

# launch the session 
sess = tf.InteractiveSession() 


# Initialize all the variables 
sess.run(init) 

# Add ops to save and restore all the variables. 
saver = tf.train.Saver({**weights, **biases}) 

# Restore variables from disk. 
saver.restore(sess, "Saved_Vars.ckpt") 

# Use the restored model to predict the target values 
prediction = sess.run(pred, feed_dict={x:dataVar_scaled}) #pred.eval(feed_dict={x:X}) 

Nun, hier ist es, was mich hat verwirrt/frustriert/verärgert. Aus den Gewichten kann ich 'h1', 'h2' und 'h3' wiederherstellen, aber nicht 'out'. Warum nicht "raus"? Gibt es irgendetwas, was ich falsch mache? Bitte können Sie ein paar Minuten verbringen, um mir zu helfen?

Vielen Dank

Ich bin mit Python 3.5 und TensorFlow 0,12 direkt auf Windows 10 und ich bin mit Spyder IDE.

Antwort

0

Es sieht aus wie Sie das Überschreiben eines der 'out' Schlüssel mit diesem Wörterbuch Konstruktor:

{**weights, **biases} 

Zum Beispiel:

weights = {'h1':1, 'h2':2, 'out':3} 
biases = {'b1':4, 'b2':5, 'out':6} 
print({**weights, **biases}) 

{'h2': 2, 'out': 6, 'b2': 5, 'b1': 4, 'h1': 1} 
+0

Thank you so viel, die Variablennamen zu ändern gearbeitet eine Leckerei! :) Kannst du mir bitte genau erklären was '{** Gewichte, ** Verzerrungen}' tut, da ich eindeutig keinen guten Griff habe? Danke nochmal – jlt199

+0

Das [SO thread] (http://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-parameters) ist ziemlich gut. Außerdem möchte Saver wirklich eine Liste, kein Wörterbuch. Normalerweise übergebe ich keine Werte an Saver, dann speichert es standardmäßig alles, was speicherbar ist. –

Verwandte Themen