**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.