Train and evaluate TensorFlow models in Python

In this tutorial, we will focus on how to train and evaluate a TensorFlow model using Python.

We need to train the model after performing all the preprocessing steps on the datasets(including splitting data into training and testing set).

Learn the basics of TensorFlow.

Training a model in TensorFlow:

Create a placeholder for input and output:

X = tf.placeholder(datatype,shape) ....(for input)

y = tf.placeholder(datatype,shape) .....(for output)

Placeholders are empty when we initiate. They get values only when the session runs.

Create a hidden layer :

w=tf.Variable(tf.zeros(shape)) ......(weight)

b=tf.Variable(tf.zeros(shape)) ......(bias)

Variables can modify the values during the computation. 

Perform the linear operation:

y_in=tf.matmul(X,w)+b .........(input*weight+bias)

Output:

Now, Apply the activation function on the neural network model.

output=tf.nn.activationFunction(y_in)

To execute code in TensorFlow, we have to create a session.

Session:

Create a session and run it to get a proper output:

with tf.Session() as sess:

  sess.run()

NOTE:

Whenever a variable is created, include an initializer and pass it as an argument for sess.run()

Initialize the variables:

init=tf.global_variables_initializer()

Finally, Specify the loss function and optimizer to evaluate the model.

 

Example code: Train and evaluate TensorFlow models in Python

#import the necessary modules
import tensorflow as tf
import pandas as pd
import numpy as np

#load the data
df = pd.read_csv("mnist_dataset.csv")

#have a look at the first ten rows of the data.
df.head(10)

Train and evaluate TensorFlow models in Python

#grabbing the first column and assign it to labels.
labels = df.iloc[:,0].values 

#grabbing all the column except the first and assigning it to the image.
image = df.iloc[:,1:].values  

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=False)

#reshapping it to get a column array.
encoder_reshape= labels.reshape(len(df),1)

#transforming and fitting the labels.
encoded_labels = encoder.fit_transform(encoder_reshape)
encoded_labels = encoded_labels.astype(np.uint8)

#printing a number from the array to see how encoder works.
print(labels[25])
print(encoded_labels[25])
2 

[0 0 1 0 0 0 0 0 0 0]

One hot encoding represents 1 for presence and 0 for the absence of each class.

#splitting the data into train and test set
from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test=train_test_split(image,encoded_labels,test_size=0.3,random_state=101)

Training a model:

#create a placeholder for input and output layer.
X = tf.placeholder(tf.float32,shape=[None,784])     #input layer
y = tf.placeholder(tf.float32,shape=[None,10])      #output layer

#create a hidden layer
w = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))

#perform the linear operation
y_in = tf.matmul(X,w)+b

#apply activation function
output = tf.nn.softmax(y_in)

#Finding the loss and optimizer using tensorflow's in-built function
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(y_in,y))
optimizer = tf.train.GradientDescentOptimizer(0.01)

#minimizing the loss function
train_data = optimizer.minimize(loss)

prediction = tf.equal(tf.argmax(y_in,1),tf.argmax(y,1))

#converting into float and finding the average accuracy
accuracy = tf.reduce_mean(tf.cast(prediction,tf.float32))
#creating a session and passing the values in batches of size 100 to placeholders.
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    for i in range(1000):
            start = (i*100) % (X_train.shape[0]-100)
            end = start+100
            batch_X = X_train[start:end]
            batch_y = y_train[start:end]
           
            sess.run(train_step,feed_dict={X:batch_X,y:batch_y})
    print(sess.run(accuracy,feed_dict={X:X_test,y:y_test}))

I hope this post helps!

Also, read Real-time object detection using TensorFlow in Python.

Leave a Reply