Tensorflow

After the "Hello World", you can try some more complex secure service. TEEX supports Tensorlow library in the TestNet. To show how to use it, we provide a "linear regression" demo written with Tensorflow library of Python in our container. After starting the container, it can be found by:

 $ cd ~/Demo/linear_regression 

The directory looks like:

 \linear_regression -- client.opt.conf -- deploy.opt.conf -- linear_regression.py -- input.txt -- README.md 

The client.opt.conf and deploy.opt.conf are configuration files, which are used to invoke and deploy the service respectively. linear_regression.py is the service code and input.txt contains the input string. README.md briefly introduces the services.

Service Code

Let's first see the linear_regression.py:

import json import numpy import tensorflow as tf from teex import * rng = numpy.random # Parameters learning_rate = 0.01 training_epochs = 1000 # Training Data train_X = numpy.asarray(json.loads(TEEX_getinput())["x"]) train_Y = numpy.asarray(json.loads(TEEX_getinput())["y"]) n_samples = train_X.shape[0] # Construct a model X = tf.placeholder("float") Y = tf.placeholder("float") W = tf.Variable(rng.randn(), name="weight") b = tf.Variable(rng.randn(), name="bias") pred = tf.add(tf.multiply(X, W), b) cost = tf.reduce_sum(tf.pow(pred - Y, 2)) / (2 * n_samples) optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) init = tf.global_variables_initializer() # Start training with tf.Session() as sess: # Run the initializer sess.run(init) # Fit all training data for epoch in range(training_epochs): for x, y in zip(train_X, train_Y): sess.run(optimizer, feed_dict={X: x, Y: y}) TEEX_return("Y = %fX + %f" % (sess.run(W), sess.run(b))) 

The "linear regression" service gets two arraies X and Y. Then it performs linear regression of them, to calculate the weight and bias.

We first import the Tensorflow library (version 1.5), and teex library. Then we use TEEX_getinput to receive the input string, which is a json string looks like:

{ "X": [1.1, 1.5, 2.8, 4.5], "Y": [1.4, 5.5, 7.8, 10] } 

The service will get two arrays X and Y from this input string, can invoke the API of Tensorflow to construct a network which can regress a function Y = weight*X + basis according to the input arrays. After that, the service returns the "Y = weight*X + basis" to the user by invoking TEEX_return function.

Deployment and Invocation

The deployment and invocation of "linear regression" are same as "Hello World". To deploy the "linear regression" and get a service ID, you only need to type:

 $ teex-deploy -c deploy.md 

And to invoke the "linear regression", you can type:

 $ teex-client -c client.md 

Note

Since we limit the memory usage of a service in TEEX TestNet, if your own machine learning service (w/ tensorflow) requires too much memory, it may cause Runtime Error on our TestNet.