2017-08-18 21 views
1

ニューラルネットワークを作成して訓練しましたが、テストポイントを入力してその結果を見ることができます(評価関数を使用するのではなく)。訓練されたTensorflowモデルを使用して予測する方法

モデルは正常に実行され、コストはすべてのエポックで減少しますが、最後に入力座標を渡して予測変換座標を伝えるだけの行を追加したいだけです。

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 

答えて

2

まあ「predが」opはあなたの実際の結果(損失を計算するときにyとの比較に使われているもの)であるので、以下のようなものは、トリックを行う必要があります。

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

_INPUT_GOES_HERE_は実際の入力に置き換える必要があります。

+0

ありがとうございます!これはまさに私が探していたものです。 –

1

また、tensorflow.python.saved_modelライブラリを使用して、TensorFlow Servingが提供できる形式でモデルを保存することもできます。最近サービング

TensorFlowは全体の多くのインストールが簡単とセットアップになりました:

以下

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

は、いくつかのサンプルコードです(あなたのユースケースのための飼料/入力とフェッチ/出力を調整する必要があります)。

モデルのためのSignatureDefを作成します。

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) 

上で定義されたSignatureDef資産を使用してモデルを保存するSaveModelBuilderの使用:ここで参照さgithubのとドッキングウィンドウのレポで

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) 

詳細:http://pipeline.ai

関連する問題