I am trying to export my local tensorflow model to use it on Google Cloud ML and run predictions on it.
I am following the tensorflow serving example with mnist data. There is quite a bit of difference in the way they have processed and used their input/output vectors and it is not what you find in typical examples online.
I am unsure how to set the parameters of my signatures :
model_exporter.init(
sess.graph.as_graph_def(),
init_op = init_op,
default_graph_signature = exporter.classification_signature(
input_tensor = "**UNSURE**" ,
scores_tensor = "**UNSURE**"),
named_graph_signatures = {
'inputs' : "**UNSURE**",
'outputs': "**UNSURE**"
}
)
model_exporter.export(export_path, "**UNSURE**", sess)
Here is the rest of my code:
import sys
import tensorflow as tf
from tensorflow.contrib.session_bundle import exporter
import numpy as np
from newpreprocess import create_feature_sets_and_labels
train_x,train_y,test_x,test_y = create_feature_sets_and_labels()
x = tf.placeholder('float', [None, 13])
y = tf.placeholder('float', [None, 1])
n_nodes_hl1 = 20
n_nodes_hl2 = 20
n_classes = 1
batch_size = 100
def neural_network_model(data):
hidden_1_layer = {'weights':tf.Variable(tf.random_normal([13, n_nodes_hl1])),
'biases':tf.Variable(tf.random_normal([n_nodes_hl1]))}
hidden_2_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])),
'biases':tf.Variable(tf.random_normal([n_nodes_hl2]))}
output_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl2, n_classes])),
'biases':tf.Variable(tf.random_normal([n_classes]))}
l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), hidden_1_layer['biases'])
l1 = tf.tanh(l1)
l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases'])
l2 = tf.tanh(l2)
output = tf.add(tf.matmul(l2, output_layer['weights']), output_layer['biases'])
return output
def train_neural_network(x):
output = neural_network_model(x)
cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(output, y))
optimizer = tf.train.AdamOptimizer(0.003).minimize(cost)
hm_epochs = 700
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
for epoch in range(hm_epochs):
epoch_loss = 0
i = 0
while i < len(train_x):
start = i
end = i + batch_size
batch_x = np.array(train_x[start:end])
batch_y = np.array(train_y[start:end])
_, c = sess.run([optimizer, cost], feed_dict={x: batch_x,
y: batch_y})
epoch_loss += c
i+=batch_size
print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss/(len(train_x)/batch_size))
prediction = tf.sigmoid(output)
predicted_class = tf.greater(prediction,0.5)
correct = tf.equal(predicted_class, tf.equal(y,1.0))
accuracy = tf.reduce_mean( tf.cast(correct, 'float') )
print('Accuracy:', accuracy.eval({x: test_x, y: test_y}))
export_path = "~/Documents/cloudcomputing/Project/RNN_timeseries/"
print ("Exporting trained model to %s", %export_path)
init_op = tf.group(tf.initialize_all_tables(), name="init_op")
saver = tf.train.Saver(sharded = True)
model_exporter = exporter.Exporter(saver)
model_exporter.init(
sess.graph.as_graph_def(),
init_op = init_op,
default_graph_signature = exporter.classification_signature(
input_tensor = ,
scores_tensor = ),
named_graph_signatures = {
'inputs' : ,
'outputs':
}
)
model_exporter.export(export_path, tf.constant(1), sess)
print("Done exporting!")
train_neural_network(x)
What exactly are the steps to upload and use this on Google Cloud ML? Their walkthroughs seem to be for models trained on the cloud itself and not on local machines.