šŸŽ Checkout my Learn React by Making a Game course and get 1 month Free on Skillshare!

The one hot encoding function in TensorflowJs: tf.oneHot()

One hot encoding refers to transforming the representation of categories from using numeric codes such as 1, 2, 3 to using arrays such as [1, 0, 0], [1, 0, 0], [1, 0, 0] where the index of the value 1 represents the actual category.

one hot encoding  function in TensorflowJs: tf.oneHot()

An example of one hot encoding

Let's say we have a set of photos with pets and we need to group these pictures based on the main subject of the picture. And we want to do this with a neuronal network.

The categories are as follows: cats, dogs, and birds.

Remember that neuronal networks work much better with numbers instead of strings.

So, the initial temptation is to assign each category to a code represented by a numeric value:

cats  0      
dogs  1      
birds 2      

Our neuronal network will take some training data with photo objects and the code labeling the main object from that image:

const traingData = tf.tensor([photoA, photoB, photoC .... ])
const traingLabels = tf.tensor([0, 2, 2 .... ])
// in photoA we have a cat
// in photoB we have a bird
// in photoC we also have a bird and so on

This means that we expect our network to have just one output neuron, that gives a value representing what it thinks the image contains.

Well, this is our human brain speaking.

From a neuronal network point of view, when it comes to categorizing items, is much more efficient to have something like 3 output neurons where each value represents a probability of that object being in a category.

So, a better output can be:

[0.21, 0.88, 0.11]
// 21% this is a cat 
// 88% this is a dog
// 0.11% this is a bird

The category will be represented with an array where if we have the value 1 at a specific index means that we have a 100% chance that the photo contains the animat type.

cats   [1, 0 , 0]  // 100% cat, 0% dog, 0% bird
dogs   [0, 1 , 0]  // 0% cat, 100% dog, 0% bird
birds  [0, 0 , 1]  // 0% cat, 0% dog, 100% bird    

Therefore we will now represent the training data as follows:

const traingData = tf.tensor([photoA, photoB, photoC .... ])
const traingLabels = tf.tensor([
    [ 1, 0, 0 ],
    [ 0, 0, 1 ]
    [ 0, 0, 1 ]
    //...
])
// in photoA we have 100% cat , 0% dog, 0% bird
// in photoB we have 0% cat, 0% dog, 100% bird
// in photoC we also have 0% cat, 0% dog, 100% bird

If we would need to add one extra category we will increase the length of the resulting arrays:

cats    [1, 0 , 0, 0]   
dogs    [0, 1 , 0, 0]
birds   [0, 0 , 1, 0]
fishes  [0, 0 , 0, 1]    

Using the tf.oneHot() in TensorflowJs

The TensorflowJs library comes with the tf.oneHot built-in function for hot encoding.

So, if we want to one hot ecode a tensor we can do as follows:

const labels = tf.tensor1d([0,2,2], 'int32')
const oneHotLabes = tf.oneHot(labels, 3) // we have 3 labels in total
oneHotLabes.print()
// Tensor
//   [[1, 0, 0],
//    [0, 0, 1],
//    [0, 0, 1]]

Basically, for each value from within the labels tensor, the oneHot() function will create a corresponding tensor that:

  • has a length of 3
  • is filled with 0 values
  • will place the value 1 at the index equal to the value read from the labels tensor

Note, that the oneHot() function requires a tensor of type int32, or we will get an error.

If we want to replace the 0 and 1 values from when the index matches or not the location we can use the onValue and offValue optional parameters:

const labels = tf.tensor1d([0,2], 'int32', 5, -1)
const oneHotLabes = tf.oneHot(labels, 3) 
oneHotLabes.print()
// Tensor
//   [[5, -1, -1],
//    [-1, -1, 5]]

Before you go be sure to check also the TensorflowJs argmax() as it directly relates to the hot encoding function.

šŸ“– 50 Javascript, React and NextJs Projects

Learn by doing with this FREE ebook! Not sure what to build? Dive in with 50 projects with project briefs and wireframes! Choose from 8 project categories and get started right away.

šŸ“– 50 Javascript, React and NextJs Projects

Learn by doing with this FREE ebook! Not sure what to build? Dive in with 50 projects with project briefs and wireframes! Choose from 8 project categories and get started right away.


Leave a Reply

Your email address will not be published. Required fields are marked *