2017-08-18 15 views
1

Ich habe ein neuronales Netzwerk erstellt und trainiert, aber ich möchte in der Lage sein, Testpunkte einzugeben und seine Ergebnisse zu sehen (anstatt eine Eval-Funktion zu verwenden).Wie mit trainierten Tensorflow Modell

Das Modell läuft gut und die Kosten reduzieren jede Epoche, aber ich möchte nur eine Zeile am Ende hinzufügen, um einige Eingabekoordinaten zu übergeben und mir die vorhergesagten transformierten Koordinaten mitzuteilen.

import tensorflow as tf 
import numpy as np 

def coordinate_transform(size, angle): 
    input = np.random.rand(size, 2) 
    output = np.zeros((size, 2)) 
    noise = 0.05*(np.add(np.random.rand(size) * 2, -1)) 
    theta = np.add(np.add(np.arctan(input[:,1]/input[:,0]) , angle) , noise) 
    radii = np.sqrt(np.square(input[:,0]) + np.square(input[:,1])) 
    output[:,0] = np.multiply(radii, np.cos(theta)) 
    output[:,1] = np.multiply(radii, np.sin(theta)) 
    return input, output 

#Data 
input, output = coordinate_transform(2000, np.pi/2) 
train_in = input[:1000] 
train_out = output[:1000] 
test_in = input[1000:] 
test_out = output[1000:] 

# Parameters 
learning_rate = 0.001 
training_epochs = 15 
batch_size = 1 
display_step = 1 

# Network Parameters 
n_hidden_1 = 100 # 1st layer number of features 
n_input = 2 # [x,y] 
n_classes = 2 # output x,y coords 

# tf Graph input 
x = tf.placeholder("float", [1,n_input]) 
y = tf.placeholder("float", [1, n_input]) 

# Create model 
def multilayer_perceptron(x, weights, biases): 
    # Hidden layer with RELU activation 
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1']) 
    layer_1 = tf.nn.relu(layer_1) 
    # Output layer with linear activation 
    out_layer = tf.matmul(layer_1, weights['out']) + biases['out'] 
    return out_layer 

# Store layers weight & bias 
weights = { 
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 
    'out': tf.Variable(tf.random_normal([n_hidden_1, n_classes])) 
} 
biases = { 
    'b1': tf.Variable(tf.random_normal([n_hidden_1])), 
    'out': tf.Variable(tf.random_normal([n_classes])) 
} 

# Construct model 
pred = multilayer_perceptron(x, weights, biases) 

# Define loss and optimizer 
#cost = tf.losses.mean_squared_error(0, (tf.slice(pred, 0, 1) - x)**2 + (tf.slice(pred, 1, 1) - y)**2) 
cost = tf.losses.mean_squared_error(y, pred) 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate) 
optimizer = optimizer.minimize(cost) 

# Initializing the variables 
#init = tf.global_variables_initializer() 
init = tf.initialize_all_variables() 

# Launch the graph 
with tf.Session() as sess: 
    sess.run(init) 

    # Training cycle 
    for epoch in range(training_epochs): 
     avg_cost = 0. 
     total_batch = 1000#int(len(train_in)/batch_size) 
     # Loop over all batches 
     for i in range(total_batch): 
      batch_x = train_in[i].reshape((1,2)) 
      batch_y = train_out[i].reshape((1,2)) 

      #print(batch_x.shape) 
      #print(batch_y.shape) 
      #print(batch_y, batch_x) 
      # Run optimization op (backprop) and cost op (to get loss value) 
      _, c = sess.run([optimizer, cost], feed_dict={x: batch_x, 
                  y: batch_y}) 
      # Compute average loss 
      avg_cost += c/total_batch 
     # Display logs per epoch step 
     if epoch % display_step == 0: 
      print ("Epoch:", '%04d' % (epoch+1), "cost=", \ 
       "{:.9f}".format(avg_cost)) 
    print("Optimization Finished!") 

    # Test model 
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) 
    # Calculate accuracy 
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 

    #Make predictions 

Antwort

2

Nun, die ‚pred‘ op ist Ihr tatsächliches Ergebnis, so etwas wie die folgenden sollte den Trick tun (wie es mit y zu vergleichen, wenn der Berechnung des Verlustes verwendet wird):

print(sess.run([pred], feed_dict={x: _INPUT_GOES_HERE_ }) 

Offensichtlich _INPUT_GOES_HERE_ muss durch die tatsächliche Eingabe ersetzt werden.

+0

Danke! Genau das habe ich gesucht. –

1

Sie können auch die Tensorflow.python.saved_model-Bibliotheken verwenden, um Ihr Modell in einem Format zu speichern, das von TensorFlow Serving bereitgestellt werden kann.

TensorFlow Serving vor kurzem wurde eine ganze Reihe einfacher zu installieren und Setup:

https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/setup.md#installing-using-apt-get

Im Folgenden finden Sie einige Beispiel-Code (Sie werden die Feeds/Eingänge anpassen müssen und holt/Ausgänge für Ihren Anwendungsfall).

erstellen SignatureDef für Ihr Modell:

from tensorflow.python.saved_model import utils 
from tensorflow.python.saved_model import signature_constants 
from tensorflow.python.saved_model import signature_def_utils 

graph = tf.get_default_graph() 

x_observed = graph.get_tensor_by_name('x_observed:0') 
y_pred = graph.get_tensor_by_name('add:0') 

tensor_info_x_observed = utils.build_tensor_info(x_observed) 
print(tensor_info_x_observed) 

tensor_info_y_pred = utils.build_tensor_info(y_pred) 
print(tensor_info_y_pred) 

prediction_signature = signature_def_utils.build_signature_def(inputs = 
       {'x_observed': tensor_info_x_observed}, 
       outputs = {'y_pred': tensor_info_y_pred}, 
       method_name = signature_constants.PREDICT_METHOD_NAME) 

SaveModelBuilder Arbeiten mit dem Modell mit den SignatureDef Vermögen oben definiert speichern:

from tensorflow.python.saved_model import builder as saved_model_builder 
from tensorflow.python.saved_model import tag_constants 

unoptimized_saved_model_path = '/root/models/linear_unoptimized/cpu/%s' % version 
print(unoptimized_saved_model_path) 

builder = saved_model_builder.SavedModelBuilder(unoptimized_saved_model_path) 
builder.add_meta_graph_and_variables(sess, 
            [tag_constants.SERVING], 
            signature_def_map={'predict':prediction_signature,          
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:prediction_signature}, 
            clear_devices=True, 
) 

builder.save(as_text=False) 

Mehr Details in der Github und Docker repos hier verwiesen: http://pipeline.ai

Verwandte Themen