Convert a directory of images to TFRecords

In this post, I’ll show you how you can convert the dataset into a TFRecord file so you can fine-tune the model.

Before you run the training script for the first time, you will need to convert the Image data to native TFRecord format. The TFRecord format consists of a set of shared files where each entry is a serialized tf.Example proto. Each tf.Example proto contains the image as well as metadata such as label and bounding box information.

TFRecord file format is a simple record-oriented binary format that many TensorFlow applications use for training data.It is default file format for TensorFlow.Binary files are sometimes easier to use because you don’t have to specify different directories for images and annotations. While storing your data in the binary file, you have your data in one block of memory, compared to storing each image and annotation separately. Opening a file is a considerably time-consuming operation especially if you use HDD.Overall, by using binary files you make it easier to distribute and make the data better aligned for efficient reading.

This native file format used in Tensorflow allows you to shuffle, batch and split datasets with its own functions.Most of the batch operations aren’t done directly from images, rather they are converted into a single tfrecord file.

Convert images into a TFRecord

Before you start any training, you’ll need a set of images to teach the model about the new classes you want to recognize.When you are working with an image dataset, what is the first thing you do? Split into Train and Validate sets.

Here’s an example, which assumes you have a folder containing class-named subfolders, each full of images for each label. The example folder animal_photos should have a structure like this:

The subfolder names are important since they define what label is applied to each image, but the filenames themselves don’t matter.The label for each image is taken from the name of the subfolder it’s in.

The list of valid labels is held in label file. The code assumes that the fill contains entries as such:

where each line corresponds to a label. Script map each label contained in the file to an integer corresponding to the line number starting from 0.

Code Organization

The code for this tutorial resides in data/ train_directory path which contain training image data,validation_directory path which contain validation image data,output_directory which contain tfrecord file after run python script and labels_file which is contains a list of valid labels are held in this file.

This TensorFlow script converts the training and evaluation data into a sharded data set consisting of TFRecord files

where we have selected 1024 and 128 shards for each data set. Each record within the TFRecord file is a serialized Example proto.


Deep learning model for Car Price prediction using TensorFlow

Before AI, Image search looks at the metadata and looks where the images are and now, with AI the computer looks at the images.If you search for say, Tiger, it looks at the images, all of them in the world and whenever it sees one that has Tiger in it, it returns it. AI is now going to be everywhere, and machine learning is everywhere.What makes this image search work, in reality, is TensorFlow.Once you’ve written one of these models in TensorFlow you can deploy it anywhere in mobile.TensorFlow is truly what enables apps to classify the image.

TensorFlow gives you distribution out of the box. So that you can run it in the cloud if you need to do that.It works on all of the hardware you need to work on.It’s fast and it’s flexible and what I’m going to tell you today is that it’s also super easy to get started.

tensorflow programming environment

The generic thing that people used to say this is TensorFlow, it’s pretty low level.So you’re thinking about like multiplying matrices, adding vectors together, that kind of thing.What TensorFlow built on top of this is libraries that help you do more complex things easier.TensorFlow built a library of layers to help you build models, it built training infrastructure that helps you actually train a model and evaluate a model and put it into production.This you can do with Keras or you can do with estimators.Finally, it built models in a box and those are really full, complete machine learning algorithms such as run, and all you have to do is instantiate one and go.That’s mostly what I’m going to talk about today.

So usually when you talk about, oh, my first model in TensorFlow it’s usually something simple, like let’s fit a line to a bunch of points or something like that.But nobody is actually interested in fitting a line to a bunch of points, distributed.It doesn’t really happen all that much in reality.So we’re not going to do that. I’m going to show you instead how to handle a variety of features, and then train and evaluate different types of models.We do that on a data set of cars.So the first model today will be about predicting the price of a car from a bunch of features about the car, information about the car.


The next thing I can do with TensorBord is I can actually look at the model that was created and look at the lower levels of the model, look at what we call the graph. TehsorFlow works by generating a graph, and then this graph is shipped to all of the distributed workers that it has, it’s executed there.You don’t have to worry about this too much, but it’s awfully useful to be able to inspect this graph when you’re doing debugging or something like that.

Launching TensorBoard from Python

To run TensorBoard, use the following code.logdir points to the directory where the FileWriter serialized its data.Once TensorBoard is running, navigate your web browser to localhost:6006 to view the TensorBoard.

Data Set

First thing to do Download dataset.We’re using pandas to read the CSV file. This is easy for small datasets but for large and complex datasets.

The CSV file does not have a header, so we have to fill in column names.We also have to specify dtypes.

The training set contains the examples that we’ll use to train the model; the test set contains the examples that we’ll use to evaluate the trained model’s effectiveness.

The training set and test set started out as a single data set. Then, we split the examples, with the majority going into the training set and the remainder going into the test set. Adding examples to the training set usually builds a better model; however, adding more examples to the test set enables us to better gauge the model’s effectiveness. Regardless of the split, the examples in the test set must be separate from the examples in the training set. Otherwise, you can’t accurately determine the model’s effectiveness.

Feature Columns

Feature Columns are the intermediaries between raw data and Estimators. Feature columns are very rich, enabling you to transform a diverse range of raw data into formats that Estimators can use, allowing easy experimentation.

Every neuron in a neural network performs multiplication and addition operations on weights and input data. Real-life input data often contains non-numerical (categorical) data. For example, consider a fuel-type feature that can contain the following two non-numerical values:

  • gas
  • diesel

ML models generally represent categorical values as simple vectors in which a 1 represents the presence of a value and a 0 represents the absence of a value. For example, when fuel_type is set to diesel, an ML model would usually represent fuel_type as [1,0], meaning:

  • 0gas is absent
  • 1diesel is present

So, although raw data can be numerical or categorical, an ML model represents all features as numbers.

Numeric column

The price predictor calls the tf.feature_column.numeric_column function for numeric input features:

Categorical column

We cannot input strings directly to a model. Instead, we must first map strings to numeric or categorical values. Categorical vocabulary columns provide a good way to represent strings as a one-hot vector.

Hashed Column

the number of categories can be so big that it’s not possible to have individual categories for each vocabulary word or integer because that would consume too much memory. For these cases, we can instead turn the question around and ask, “How many categories am I willing to have for my input?” In fact, the tf.feature_column.categorical_column_with_hash_bucket function enables you to specify the number of categories.

Create Input Functions

I still have to give it some input data.TensorFlow has off-the-shelf input pipeline for most formats, or for many formats.And particularly, here in this example, I’m using input from pandas.So I’m going to read input from a pandas data frame.

What I’m telling it here is I want to use the batches of 64. So each iteration of the algorithm will use 64 input data pieces. I’m going to shuffle the input, which always a good thing to do when you’re training.Please always shuffle the input and num_epochs=None means to cycle through the data indefinitely.If you’re done with the data, just do it again.

Instantiate an Estimator

We specify what kind of machine learning algorithm we want to apply to prediction Car price and in my case here, I’m going to use first a linear regression, which is kind of the simplest way to learn something and all I have to do is tell him, hey,look,you’re going to use these input features that I’ve just declared.

Train, Evaluate, and Predict

Now that we have an Estimator object, we can call methods to do the following:

  • Train the model.
  • Evaluate the trained model.
  • Use the trained model to make predictions.

Train the model

Train the model by calling the Estimator’s train method as follows:

The steps argument tells the method to stop training after a number of training steps.

Evaluate the trained model

Now that the model has been trained, we can get some statistics on its performance. The following code block evaluates the accuracy of the trained model on the test data:

Unlike our call to the train method, we did not pass the steps argument to evaluate. Our eval_input_fn only yields a single epoch of data.

Making predictions (inferring) from the trained model

We now have a trained model that produces good evaluation results. We can now use the trained model to predict the price of a car flower based on some unlabeled measurements. As with training and evaluation, we make predictions using a single function call:

Deep Neural Network

We have to obviously change the name of the class that we’re using.Then we’ll also have to adapt the inputs to something that this new model can use.So in this case, a DNN model can’t use these categorical features directly.we have to do something to it and the two things that you can do to a categorical feature, typically, to make it work with a deep neural network is you either embed it or you transform it into what’s called a one-hot or an indicator.So we do this by simply saying, hey, make me an embedding, and out of the cylinders, make it an indicator column because there are not so many values there.Usually, this is fairly complicated stuff, and you have to write a lot of code.

Then also, most of these more complicated models have hyperparameters and in this case, the DNN, basically we tell it, hey, make me a three-layer neural network with layer size 50,30, and 10 and that’s all really you need to–this is a very high-level interface.


TensorFlow, implementations of complete machine learning models.You can get started with them extremely quickly.They come with all of the integrations, with TensorBord, visualization for serving and production, for different hardware, different use cases.They obviously work in distributed settings.We use them in data centers.You can use them on your home computer network if that’s what you’d like.You can use them in flocks of mobile devices.Everything is possible.They run on all kinds of different hardware.Particularly, they will run on TPU.They also always run on GPU, on CPU.

Download this project from GitHub