Introduction
Siamese networks provide an intriguing strategy to classification, permitting correct picture categorization primarily based on only one instance. These networks make use of an idea known as Contrastive Loss to gauge the similarity between pairs of pictures inside a dataset. In contrast to conventional strategies specializing in deciphering picture content material, Siamese networks focus on understanding the variations and resemblances amongst pictures. This distinctive studying methodology contributes to their resilience in limited-data situations, enhancing efficiency even with out domain-specific information.
This text delves into the fascinating realm of Signature Verification by way of the lens of Siamese Networks. We’ll information you thru making a useful mannequin utilizing PyTorch, offering insights and sensible implementation steps alongside the best way.
Studying Aims
- Perceive the idea of Siamese networks and their distinctive structure involving twin subnetworks.
- Differentiate between loss capabilities utilized in Siamese networks, together with Binary Cross-Entropy Loss, Contrastive Loss, and Triplet Loss.
- Establish and describe real-world functions the place Siamese networks could be successfully used, akin to facial recognition, fingerprint recognition, and textual content similarity evaluation.
- Summarize the benefits and drawbacks of Siamese networks relating to one-shot studying, versatility, and domain-agnostic efficiency.
This text was printed as part of the Information Science Blogathon.
What are Siamese Networks?
Siamese Networks belong to a class of networks that make use of two similar subnetworks for one-shot classification. These subnetworks share the identical setup, parameters, and weights whereas accommodating totally different inputs. A Siamese Community learns a similarity operate, in contrast to typical CNNs, that are educated on copious quantities of knowledge to foretell a number of lessons. This operate permits us to discern between lessons utilizing minimal knowledge, rendering them significantly efficient for one-shot classification. This distinctive means implies that, in lots of cases, a single instance is ample for these networks to categorise pictures precisely.
An actual-world utility of Siamese Networks is in face recognition and signature verification duties. Think about an organization implementing an automatic face-based attendance system. With only one picture of every worker accessible, conventional CNNs would wrestle to categorise 1000’s of workers exactly. Enter the Siamese community, excelling in exactly this type of state of affairs.

Exploring Few-Shot Studying
In few-shot studying, fashions endure coaching to make predictions primarily based on a restricted variety of examples. This stands in distinction to the normal strategy, which calls for a considerable quantity of labeled knowledge for coaching functions. The importance of few-shot studying emerges when buying ample labeled knowledge turns into difficult or costly.
Few-shot fashions’ structure leverages the nuances amongst a small handful of samples, permitting them to make predictions primarily based on only some or perhaps a single instance. Varied design frameworks like Siamese Networks, Meta-learning, and comparable approaches facilitate this functionality. These frameworks empower the mannequin to extract significant knowledge representations and use them for novel, unseen samples.
A few sensible cases the place few-shot studying shines embody:
- Object Detection in Surveillance: Few-shot studying can successfully establish objects inside surveillance footage, even when only some examples of these objects can be found. After coaching the mannequin on a modest set of labeled examples, it might probably subsequently detect these objects in new footage, even when it has by no means encountered them earlier than.

2. Tailor-made Healthcare: Inside customized healthcare, medical professionals would possibly possess a restricted set of a affected person’s medical data, comprising a handful of CT scans or blood assessments. Utilizing a few-shot studying mannequin,e cases for coaching enable us to foretell the affected person’s potential well-being. This would possibly embody forecasts concerning the potential onset of a selected ailment or the possible response to a specific therapeutic strategy.

The Structure of Siamese Networks
The Siamese community design includes two similar subnetworks, every processing one of many inputs. Initially, the inputs endure processing by way of a convolutional neural community (CNN), which extracts vital options from the offered pictures. These subnetworks then generate encoded outputs, usually by way of a completely linked layer, leading to a condensed illustration of the enter knowledge.
The CNN consists of two branches and a shared characteristic extraction part, composed of layers for convolution, batch normalization, and ReLU activation, adopted by max pooling and dropout layers. The ultimate phase includes the FC layer, which maps the extracted options to the last word classification outcomes. A operate delineates a linear layer adopted by a sequence of ReLU activations and a collection of consecutive operations (convolution, batch normalization, ReLU activation, max pooling, and dropout). The ahead operate guides the inputs by way of each branches of the community.
The Differencing layer serves to establish similarities between inputs and amplify distinctions amongst dissimilar pairs, completed utilizing the Euclidean Distance operate:
Distance(x₁, x₂) = ∥f(x₁) – f(x₂)∥₂
On this context,
- x₁, x₂ are the 2 inputs.
- f(x) represents the output of the encoding.
- Distance denotes the space operate.
This property permits the community to accumulate efficient knowledge representations apply that to contemporary, unseen samples. Consequently, the community generates an encoding, usually represented as a similarity rating, that aids in-class differentiation.
Depict the community’s structure within the accompanying determine. Notably, this community operates as a one-shot classifier, negating the necessity for a lot of examples per class.
Loss Capabilities Utilized in Siamese Networks
A loss operate is a mathematical device to gauge the dissimilarity between the anticipated and precise output inside a machine-learning mannequin, given a selected enter. When coaching a mannequin, the intention is to attenuate this loss operate by adjusting the mannequin’s parameters.
Quite a few loss capabilities cater to numerous drawback varieties. As an illustration, imply squared error is apt for regression challenges, whereas cross-entropy loss fits classification duties.
Distinct from a number of different community varieties, the Siamese Community embraces a number of loss capabilities, elaborated upon under.
Binary Cross-Entropy Loss
Binary cross-entropy loss proves invaluable for binary classification duties, the place the target is to foretell between two doable outcomes. Within the context of a Siamese community, the intention is to categorise a picture as both “comparable” or “dissimilar” to a different.
This operate quantifies the disparity between the forecasted chance of the constructive class and the precise end result. Throughout the Siamese community, the forecasted chance pertains to the chance of picture similarity, whereas the precise end result assumes a binary kind: 1 for picture similarity and 0 for dissimilarity.
The operate’s formulation includes the adverse logarithm of the true class chance, calculated as:
−(ylog(p)+(1−y)log(1−p))
Right here,
- y signifies the true label.
- p signifies the expected chance.
Coaching a mannequin with binary cross-entropy loss strives to attenuate this operate by parameter adjustment. By way of such minimization, the mannequin good points proficiency in correct class prediction.
Contrastive Loss
Contrastive Loss delves into the differentiation of picture pairs by using distance as a similarity measure. This operate proves advantageous when the variety of coaching cases per class is in restrict. It’s vital to notice that Contrastive loss necessitates pairs of adverse and constructive coaching samples. A visualization of this loss is offered within the accompanying determine.

The Contrastive Loss equation could be:
(1 – Y) * 0.5 * D^2 + Y * 0.5 * max(0, m – D^2)
Right here’s the breakdown:
- Y represents an enter parameter.
- D stands for the Euclidean distance.
- When Y equals 0, the inputs belong to the identical class. However, a Y worth of 1 signifies that they arrive from totally different lessons.
- The parameter ‘m’ defines a margin for the space operate, serving to establish pairs contributing to the loss. It’s price noting that the worth of ‘m’ is all the time higher than 0.
Triplet Loss
The triplet loss makes use of triples of knowledge. The graphic under illustrates these triples.

The triplet loss operate goals to boost the separation between the anchor and adverse samples whereas decreasing the hole between the anchor and constructive samples.
Mathematically, the Triplet loss operate defines itself as the utmost distinction between the anchor-to-positive distance (d(a,p)) and the anchor-to-negative distance (d(a,n)), subtracted by a margin worth. When this distinction is constructive, the computed worth turns into the loss; in any other case, it’s set to zero.
Right here’s a breakdown of the parts:
- d signifies the Euclidean distance.
- a represents the anchor enter.
- p denotes the constructive enter.
- n stands for the adverse enter.
The first purpose is to make sure that the constructive enter is nearer to the anchor enter than the adverse enter, sustaining a margin of separation.
Setting up a Siamese Community-Based mostly Mannequin for Signature Verification
Signature verification includes distinguishing counterfeit signatures from a group of real ones. On this state of affairs, a mannequin should grasp the nuances amongst quite a few signatures. It should then discern between genuine and pretend signatures when introduced with both. Attaining this verification goal poses a substantial problem for typical CNNs because of the intricate variations and restricted coaching cases. Compounding the problem, usually solely a solitary signature per particular person exists, demanding the mannequin’s proficiency in verifying 1000’s of people’ signatures. The forthcoming sections delve into making a PyTorch-based mannequin to handle this intricate process.
Dataset
The dataset we’ll make the most of pertains to signature validation and is ICDAR 2011. This assortment includes Dutch signatures, encompassing each genuine and counterfeit ones. A pattern of the info is right here for reference. Hyperlink for the dataset.

Downside Assertion Description
This text delves into the duty of detecting counterfeit signatures inside a signature verification context. Our goal includes leveraging a dataset of signatures and using a Siamese community to foretell the authenticity of take a look at signatures—discerning real ones from fraudulent ones. To perform this, we should set up a step-by-step course of. This entails knowledge ingestion from the dataset, creating picture pairs, and their subsequent processing by way of the Siamese community. Upon coaching the community utilizing the offered dataset, we then develop prediction capabilities.
Importing Important
Constructing the Siamese Community necessitates the inclusion of a number of key libraries. We introduce the Pillow library (PIL) for picture manipulation, matplotlib for visualization, numpy for numerical operations, and tqdm for a progress bar utility. Moreover, we harness the ability of PyTorch and torchvision to facilitate community coaching and development.
import torch
import torch.nn as nn
import torch.nn.useful as F
import torchvision.transforms as transforms
import torchvision.utils as tv_utils
from torch.autograd import Variable
from torch.utils.knowledge import DataLoader, Dataset
import PIL.Picture as Picture
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import torch.utils.knowledge as custom_data
from tqdm import tqdm
Utility Capabilities
To visualise the community’s outputs, craft a utility operate. This operate accepts pictures and their corresponding labels as inputs and arranges them in a grid for handy visualization.
import numpy as np
import matplotlib.pyplot as plt
def display_image(img, caption=None, save=False):
image_array = img.numpy()
plt.axis("off")
if caption:
plt.textual content(
75,
8,
caption,
fashion="italic",
fontweight="daring",
bbox={"facecolor": "white", "alpha": 0.8, "pad": 10},
)
plt.imshow(np.transpose(image_array, (1, 2, 0)))
plt.present()
Information Preprocessing
The information construction utilized by the Siamese community markedly differs from typical picture classification networks. In distinction to furnishing a single image-label pair, the Dataset Generator for the Siamese community necessitates the provisioning of picture pairs. These pairs endure a change course of involving conversion to black and white, subsequent resizing, and eventual conversion into Tensors. Two distinct classes of pairs are constructive pairs, characterised by similar enter pictures, and adverse pairs, with dissimilar pictures. Moreover, a operate gives the Dataset’s measurement when invoked.
import os
import pandas as pd
import torch
import torch.utils.knowledge as knowledge
from PIL import Picture
import numpy as np
class PairedDataset(knowledge.Dataset):
def __init__(self, df_path=None, data_dir=None, rework=None, subset=None):
self.df = pd.read_csv(df_path)
if subset isn't None:
self.df = self.df[:subset]
self.df.columns = ["image1", "image2", "label"]
self.data_dir = data_dir
self.rework = rework
def __getitem__(self, index):
pair1_path = os.path.be a part of(self.data_dir, self.df.iat[index, 0])
pair2_path = os.path.be a part of(self.data_dir, self.df.iat[index, 1])
pair1 = Picture.open(pair1_path).convert("L")
pair2 = Picture.open(pair2_path).convert("L")
if self.rework:
pair1 = self.rework(pair1)
pair2 = self.rework(pair2)
label = torch.tensor([int(self.df.iat[index, 2])], dtype=torch.float32)
return pair1, pair2, label
def __len__(self):
return len(self.df)
Concise Overview of Options
The community’s inputs include pictures comprising constructive and adverse knowledge pairs. We symbolize these pairs as picture knowledge and rework them into Tensor format, successfully encapsulating the underlying picture info. Labels related to the Siamese community are categorical.
Characteristic Standardization Course of
An important step includes standardizing options and changing pictures to black and white. Moreover, we uniformly resize all pictures to a (105×105) sq. format, because the Siamese Community requires this dimension. Afterward, we convert all pictures into Tensors, which reinforces computational effectivity and permits GPU utilization.
data_transform = transforms.Compose([
transforms.Resize((105, 105)),
transforms.ToTensor()
])
Splitting the Dataset
We partition the dataset into distinct coaching and testing segments to facilitate each mannequin coaching and testing. For ease of illustration, we deal with the preliminary 1000 knowledge factors. Choosing a ‘load_subset’ operate worth of None would entail using the entire dataset, albeit on the expense of extended processing time. Contemplate knowledge Augmentation as an strategy to boost the community’s long-term efficiency.
train_dataset = PairedDataset(
df_train,
dir_train,
rework=transforms.Compose([
transforms.Resize((105, 105)),
transforms.ToTensor()
]),
subset=1000
)
evaluation_dataset = PairedDataset(
df_val,
dir_val,
rework=transforms.Compose([
transforms.Resize((105, 105)),
transforms.ToTensor()
]),
subset=1000
)
Neural Community Structure
Setting up the described structure includes a collection of steps. Initially, we set up a operate that constructs units of Convolutions, Batch Normalization, and ReLU layers, providing the pliability to incorporate or exclude a Dropout layer on the finish. One other operate is devised to generate sequences of Totally Related (FC) layers, complemented by subsequent ReLU layers. As soon as the CNN part is constructed through the aforementioned capabilities, consideration shifts to shaping the FC phase of the community. Notably, distinct padding and kernel sizes are applied all through the community.
The FC portion consists of blocks comprising Linear layers trailed by ReLU activations. With the structure outlined, we execute a ahead go to course of the offered knowledge by way of the community. An vital side to spotlight is the “view” operate, which reshapes the output of the previous block by flattening dimensions. The stage is ready for coaching the Siamese community utilizing the equipped knowledge upon establishing this mechanism.
class SiameseNetwork(nn.Module):
def __init__(self):
tremendous(SiameseNetwork, self).__init__()
self.cnn1 = nn.Sequential(
self.create_conv_block(1, 96, 11, 1, False),
self.create_conv_block(96, 256, 5, 2, True),
nn.Conv2d(256, 384, kernel_size=3, stride=1, padding=1),
nn.BatchNorm2d(384),
nn.ReLU(inplace=True),
self.create_conv_block(384, 256, 3, 1, True),
)
self.fc1 = nn.Sequential(
self.create_linear_relu(30976, 1024),
nn.Dropout2d(p=0.5),
self.create_linear_relu(1024, 128),
nn.Linear(128, 2)
)
def create_linear_relu(self, input_channels, output_channels):
return nn.Sequential(nn.Linear(input_channels, output_channels),
nn.ReLU(inplace=True))
def create_conv_block(self, input_channels, output_channels, kernel_size,
padding, dropout=True):
if dropout:
return nn.Sequential(
nn.Conv2d(input_channels, output_channels, kernel_size=kernel_size,
stride=1, padding=padding),
nn.BatchNorm2d(output_channels),
nn.ReLU(inplace=True),
nn.MaxPool2d(3, stride=2),
nn.Dropout2d(p=0.3)
)
else:
return nn.Sequential(
nn.Conv2d(input_channels, output_channels, kernel_size=kernel_size,
stride=1),
nn.BatchNorm2d(output_channels),
nn.ReLU(inplace=True),
nn.MaxPool2d(3, stride=2)
)
def forward_once(self, x):
output = self.cnn1(x)
output = output.view(output.measurement()[0], -1)
output = self.fc1(output)
return output
def ahead(self, input1, input2):
out1 = self.forward_once(input1)
out2 = self.forward_once(input2)
return out1, out2
Loss Operate
The contrastive loss serves because the pivotal loss operate for the Siamese Community. Defining this loss includes using the equations elucidated earlier within the article. To boost code effectivity, fairly than defining the loss as a simple operate, an alternate strategy includes inheritance from the nn.Module class. This permits the creation of a custom-made class that furnishes the operate’s outputs. Such a wrapper permits PyTorch to optimize code execution, thus enhancing general runtime efficiency.
class ContrastiveLoss(nn.Module):
def __init__(self, margin=2.0):
tremendous(ContrastiveLoss, self).__init__()
self.margin = margin
def ahead(self, output1, output2, label):
euclidean_distance = F.pairwise_distance(output1, output2)
loss_positive = (1 - label) * torch.pow(euclidean_distance, 2)
loss_negative = label * torch.pow(torch.clamp(self.margin - euclidean_distance, min=0.0), 2)
total_loss = torch.imply(loss_positive + loss_negative)
return total_loss
Coaching the Siamese Community
With the info loaded and preprocessed, the stage is ready to begin coaching the Siamese community. To provoke this course of, we start by establishing knowledge loaders for each coaching and testing. Notably, the analysis DataLoader is configured with a batch measurement of 1 to facilitate individualized evaluations. Subsequently, the mannequin is deployed to the GPU, and pivotal parts such because the Contrastive Loss operate and the Adam optimizer are outlined.
train_loader = DataLoader(train_dataset,
shuffle=True,
num_workers=8,
batch_size=bs)
eval_loader = DataLoader(evaluation_dataset,
shuffle=True,
num_workers=8,
batch_size=1)
siamese_net = SiameseNetwork().cuda()
loss_function = ContrastiveLoss()
optimizer = torch.optim.Adam(siamese_net.parameters(), lr=1e-3, weight_decay=0.0005)
Subsequently, a operate is crafted, accepting the practice DataLoader as its enter. Inside this operate, an ongoing array is maintained to trace the loss, alongside a counter to facilitate future plotting endeavors. The next iterative course of navigates by way of the info factors inside the DataLoader. For every level, the picture pairs are transferred to the GPU, subjected to community processing, and the Contrastive Loss is computed. Subsequent steps embody the execution of a backward go, culminating within the provision of the web loss pertaining to a batch of knowledge.
def practice(train_loader, mannequin, optimizer, loss_function):
total_loss = 0.0
num_batches = len(train_loader)
mannequin.practice()
for batch_idx, (pair_left, pair_right, label) in
enumerate(tqdm(train_loader, complete=num_batches)):
pair_left, pair_right, label = pair_left.cuda(),
pair_right.cuda(), label.cuda()
optimizer.zero_grad()
output1, output2 = mannequin(pair_left, pair_right)
contrastive_loss = loss_function(output1, output2, label)
contrastive_loss.backward()
optimizer.step()
total_loss += contrastive_loss.merchandise()
mean_loss = total_loss / num_batches
return mean_loss
The mannequin could be educated over a number of epochs using our devised operate. On this demonstration, the article covers solely a restricted variety of epochs. If the analysis loss achieved throughout coaching represents the very best efficiency noticed all through the coaching length, the mannequin is preserved for subsequent inference at that exact epoch.
best_eval_loss = float('inf')
for epoch in tqdm(vary(1, num_epoch)):
train_loss = practice(train_loader)
eval_loss = consider(eval_loader)
print(f"Epoch: {epoch}")
print(f"Coaching loss: {train_loss}")
print(f"Analysis loss: {eval_loss}")
if eval_loss < best_eval_loss:
best_eval_loss = eval_loss
print(f"Greatest Analysis loss: {best_eval_loss}")
torch.save(siamese_net.state_dict(), "mannequin.pth")
print("Mannequin Saved Efficiently")
Testing the Mannequin
An analysis section ensues following mannequin coaching, permitting us to evaluate its efficiency and conduct inference for particular person knowledge factors. Analogous to the coaching operate, an analysis operate is constructed, taking the take a look at knowledge loader as enter. The information loader is iterated by way of, processing one occasion at a time. Subsequently, the picture pairs for testing are extracted. These pairs are then despatched to the GPU, enabling mannequin execution. The resultant outputs from the mannequin are utilized to compute the Contrastive loss, which is subsequently saved inside a chosen record.
def consider(eval_loader):
loss_list = []
counter_list = []
iteration_number = 0
for i, knowledge in tqdm(enumerate(eval_loader, 0), complete=len(eval_loader)):
pair_left, pair_right, label = knowledge
pair_left, pair_right, label = pair_left.cuda(), pair_right.cuda(), label.cuda()
output1, output2 = siamese_net(pair_left, pair_right)
contrastive_loss = loss_function(output1, output2, label)
loss_list.append(contrastive_loss.merchandise())
loss_array = np.array(loss_list)
mean_loss = loss_array.imply() / len(eval_loader)
return mean_loss
We will execute the code to carry out a single analysis throughout all of the take a look at knowledge factors. To evaluate efficiency visually, we are going to generate plots depicting the photographs and show the pairwise distances recognized by the mannequin between the info factors. Current these ends in the type of a grid.
for i, knowledge in enumerate(dl_eval, 0):
x0, x1, label = knowledge
concat_images = torch.cat((x0, x1), 0)
out1, out2 = siamese_net(x0.to('cuda'), x1.to('cuda'))
euclidean_distance = F.pairwise_distance(out1, out2)
print(label)
if label == torch.FloatTensor([[0]]):
label_text = "Authentic Pair of Signature"
else:
label_text = "Cast Pair of Signature"
display_images(torchvision.utils.make_grid(concat_images))
print("Predicted Euclidean Distance:", euclidean_distance.merchandise())
print("Precise Label:", label_text)
if i == 4:
break
Output

Benefits and Disadvantages of Siamese Networks
Disadvantages
- One notable downside of Siamese networks is their output, which gives a similarity rating fairly than a chance distribution that sums as much as 1. This attribute can current challenges in sure functions the place probability-based outputs are preferable.
Benefits
- Siamese networks exhibit resilience when coping with various numbers of examples inside totally different lessons. This adaptability stems from the community’s means to operate successfully with restricted class info.
- The community’s classification efficiency doesn’t hinge on offering domain-specific info, contributing to its versatility.
- Siamese networks could make predictions even with only a single picture per class.
Functions of Siamese Networks
Siamese Networks discover utility in numerous functions, some outlined under.
Facial Recognition: Siamese networks show advantageous in one-shot facial recognition duties. By using contrastive loss, these networks distinguish dissimilar faces from comparable ones, enabling efficient facial identification with minimal knowledge samples.

Fingerprint Recognition: Harness the Siamese Networks for fingerprint recognition. By offering pairs of pre-processed fingerprints to the community, it learns to distinguish between legitimate and invalid prints, enhancing the accuracy of fingerprint-based authentication.

Signature Verification: This text primarily delved into the implementation of Signature Verification by way of Siamese networks. As demonstrated, the community processes pairs of signatures to find out the authenticity of signatures, distinguishing between real and cast ones.

Textual content Similarity: Siamese Networks additionally discover relevance in assessing textual content similarity. By way of paired enter, the community can discern similarities between totally different textual items. Sensible functions embody figuring out analogous questions inside a query financial institution or retrieving comparable paperwork from a textual content repository.

Conclusion
A Siamese neural community, usually abbreviated as SNN, falls beneath the class of neural community designs incorporating two or extra sub-networks that share an similar construction. On this context, “similar” implies having matching configurations, parameters, and weights. The synchronization of parameter updates between these sub-networks determines resemblances amongst inputs by way of the comparability of characteristic vectors.
Key Takeaways
- Siamese networks excel in classifying datasets with restricted examples per class, making them invaluable for situations with scarce coaching knowledge.
- By way of this exploration, we gained perception into the basic ideas underpinning Siamese networks, encompassing their structure, employed loss capabilities, and the method of coaching such networks.
- Our journey encompassed the sensible utility of Siamese networks within the context of Signature verification, using the ICDAR 2011 dataset. This concerned the creation of a mannequin able to detecting counterfeit signatures.
- The coaching and testing pipeline for Siamese networks turned clear, providing a complete understanding of how these networks function. We delved into the illustration of paired knowledge, a vital side of their effectiveness.
Often Requested Questions
Reply: Siamese networks discover functions in numerous domains, akin to picture classification, object detection, textual content classification, and voice classification. Moreover, make use of these networks to encode particular options. The flexibility extends to creating comparable fashions for classifying totally different shapes. Moreover, Siamese networks play a vital position in enabling one-shot studying duties.
Reply: Within the formal characterization of Siamese networks in Pure Language Processing (NLP) by way of the triplet loss operate, we are able to describe it as follows: A number of similar neural networks represent a Siamese community and obtain enter vectors to extract options. These extracted options are then fed into the triplet operate, taking part in a vital position within the few-shot studying course of.
Reply: Siamese Networks had been first launched by Gregory Koch in 2015. The time period “Siamese” originates from the community’s construction, which includes two similar sub-networks processing distinct enter samples utilizing the identical set of weights.
Reply: A Siamese Community learns a similarity operate, in contrast to a standard CNN, which learns to foretell a number of lessons utilizing massive quantities of knowledge. The acquired operate permits class differentiation with diminished knowledge necessities.
The media proven on this article isn’t owned by Analytics Vidhya and is used on the Writer’s discretion.