Using TensorFlow requires a slightly different approach to programming than what you might be used to using, so let's explore what makes it different.

At their core, all TensorFlow programs have two main parts to them:

- Construction of a computational graph called
`tf.Graph`

- Running the computational graph using
`tf.Session`

In TensorFlow, a computational graph is a series of TensorFlow operations arranged into a graph structure. The TensorFlow graph contains two main types of components:

**Operations**: More commonly called**ops**, for short, these are the nodes in your graph. Ops carry out any computation that needs to be done in your graph. Generally, they consume and produce Tensors. Some ops are special and can have certain side effects when they run.**Tensors**: These are the edges of your graph; they connect up the nodes and represent data that flows through it. Most TensorFlow ops will produce and consume these`tf.Tensors`

.

In TensorFlow, the main object that you work with is called a Tensor. Tensors are the generalization of vectors and matrices. Even though vectors are one-dimensional and matrices are two-dimensional, a Tensor can be *n*-dimensional. TensorFlow represents Tensors as *n*-dimensional arrays of a user-specified data type, for example, `float32`

.

TensorFlow programs work by first building a graph of computation. This graph will produce some `tf.Tensor`

output. To evaluate this output, you must *run* it within a `tf.Session`

by calling `tf.Session.run`

on your output Tensor. When you do this, TensorFlow will execute all the parts of your graph that need to be executed in order to evaluate the `tf.Tensor`

you asked it to run.