Deep Learning Lab Manual Overview
Deep Learning Lab Manual Overview
SCIENCE
MASTER RECORD
Syllabus
COURSE OBJECTIVES
LIST OF EXPERIMENTS:
2
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
Course Outcome
CO Details BTL
Apply deep neural network for simple problems (K3)
CO508.1 K3-Apply
Apply Convolution Neural Network for image processing (K3)
CO508.2 K3-Apply
Apply Recurrent Neural Network and its variants for text analysis
CO508.3 (K4) K4-Analyze
CO - PO Mapping
Program
Program Outcomes Specific
CO
Outcomes
PO1 PO2 PO3 PO4 PO5 PO6 PO7 PO8 PO9 PO10 PO11 PO12 PSO1 PSO2
CO1 3 - - - - - - - 3 3 - - 3 3
CO2 3 - - - 3 - - 2 3 - 2 - 3 3
CO3 3 2 - 2 - 2 - - - 3 - - - -
CO4 3 - - - - - - - - 3 - - 3 3
CO5 3 - - - - - - - - 3 - 2 2 2
CO6 - - - - - 2 - 2 2 2 - 2 - -
3 2 - 2 3 2 - 2 2.7 2.8 2 2 2.8 2.8
CORRELATION
STRONG S/3 MEDIUM M/2 WEAK W/1
3
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
INDEX
Page
Sl. Name of the Experiment CO No.
No.
6
CO508.1
Solving XOR problem using DNN
1
CO508. 9
2 Character recognition using CNN 2
CO508. 15
3 Face recognition using CNN 2
CO508. 22
4 Language modeling using RNN 3
CO508. 27
5 Sentiment analysis using LSTM 3
CO508. 33
6 Parts of speech tagging using Sequence to Sequence architecture 3
CO508. 43
7 Machine Translation using Encoder-Decoder model 3
CO508. 48
8 4
Image augmentation using GANs
4
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
1. Correctness of All the steps Some steps are followed Steps are not followed.
the Procedure are sequence. but error occurred. Not showing interest to
for the Knows how to Proceeded the experiment do the experiment.
experiment/ proceed the with the guidance.
Exercise (3) experiment.
8 or 7 or 6 5 or 4 or 3 2 or 1 or 0
2. Skills level in Show excellent Show minimal Show no understanding
performing the understanding of the understanding of the of the experiment. All
experiment/ experiment. All data experiment. All data is data is not recorded and
Exercise (8) is recorded and neatly is not Presented neatly.
recorded and is
presented
not presented neatly
3 2 1
3. Inferences Correct inferences Inferences drawn ar Inferences drawn are
drawn from have been drawn and correctly. But e partially incorrectly or
the presented presented no incorrect.
Professionally professionally
experiment/ t
exercise (3)
3 2 1
4. Presentation of Calculation are Calculation are present Wrong calculations.
results (3) presents neatly with neatly with minor Major mistakes.
accurate results. mistakes
5 to 4 3 to 2 1 to 0
5. Clarity in Almost all the Partially answered Unable to answer.
answering viva questions are
questions. (5) answered.
3 2 1
6. Attitude The experiment is The experiment The experiment is not
reflected in completed on time. is Completed on time.
doing the Manual/ Record note completed on time, Observation / Record
experiment / is submitted on time. but the Manual / note is not submitted
exercise (3) Record note is not on time.
submitted on time.
Total marks out of 25
6
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
for j in range(m):
[Link]("\rIteration: {} and {}".format(i + 1, j + 1))
# Forward Prop.
a0 = X[j].reshape(X[j].shape[0], 1) # 2x1
z1 = _W1.dot(a0) + _B1 # 2x2 * 2x1 + 2x1 = 2x1
a1 = sigmoid(z1) # 2x1
z2 = _W2.dot(a1) + _B2 # 1x2 * 2x1 + 1x1 = 1x1
a2 = sigmoid(z2) # 1x1
# Back prop.
dz2 = a2 - y[j] # 1x1
dW2 += dz2 * a1.T # 1x1 .* 1x2 = 1x2
dz1 = [Link]((_W2.T * dz2), sigmoid(a1, derv=True)) #
(2x1 * 1x1) .* 2x1 = 2x1
dW1 += [Link](a0.T) # 2x1 * 1x2 = 2x2dB2 += dz2 # 1x1
7
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
Output:
8
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
alphabets = []
for i in word_dict.values():
[Link](i)
[Link]()
uff = shuffle(train_x[:100])
fig, ax = [Link](3,3, figsize = (10,10))
axes = [Link]()
for i in range(9):
_, shu = [Link](shuff[i], 30, 200, cv2.THRESH_BINARY)
axes[i].imshow([Link](shuff[i], (28,28)), cmap=plt.get_cmap('gray'))
[Link]()
# Reshape data for model creation
train_X = train_x.reshape(train_x.shape[0],train_x.shape[1],train_x.shape[2],1)
print("The new shape of train data: ", train_X.shape)
10
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
[Link](Flatten())
[Link](Dense(64,activation ="relu"))
[Link](Dense(128,activation ="relu"))
[Link](Dense(26,activation ="softmax"))
[Link](optimizer = Adam(learning_rate=0.001),
loss='categorical_crossentropy', metrics=['accuracy'])
pred = word_dict[[Link](test_yOHE[i])]
ax.set_title("Prediction: "+pred)
# Predection on External Image
img = [Link](r'test_image.jpg')
img_copy = [Link]()
img = [Link](img,
cv2.COLOR_BGR2RGB) img = [Link](img,
(400,440))
img_pred = word_dict[[Link]([Link](img_final))]
11
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
while (1):
k = [Link](1) & 0xFF
if k == 27:
break
[Link]()
Output:
12
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
model: "sequential"
13
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
=================================================================
Total params: 137,178
Trainable params: 137,178
Non-trainable params: 0
14
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
import numpy as
np import pandas
as pd
from [Link] import fetch_lfw_people
print(faces.target_names)
print([Link])
%matplotlib inline
import [Link] as
plt import seaborn as sns
[Link]()
df = [Link].from_dict(names,
orient='index') [Link](kind='bar')
mask = [Link]([Link], dtype=[Link])
x_faces = [Link][mask]
y_faces = [Link][mask]
x_faces = [Link](x_faces, (x_faces.shape[0], [Link][1],
[Link][2], [Link][3]))
x_faces.shape
from [Link] import to_categorical
from sklearn.model_selection import train_test_split
15
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
model = Sequential()
[Link](Conv2D(32, (3, 3),
activation='relu',
input_shape=(face_images.shape[1:])))
[Link](MaxPooling2D(2, 2))
[Link](Conv2D(64, (3, 3), activation='relu'))
[Link](MaxPooling2D(2, 2))
[Link](Conv2D(64, (3, 3), activation='relu'))
[Link](MaxPooling2D(2, 2))
[Link](Flatten())
[Link](Dense(128, activation='relu'))
[Link](Dense(class_count, activation='softmax'))
[Link](optimizer='adam', loss='categorical_crossentropy',
metrics=['accuracy'])
[Link]()
hist = [Link](x_train, y_train, validation_data=(x_test, y_test), epochs=20,
batch_size=25)
acc = [Link]['accuracy']
val_acc = [Link]['val_accuracy']
epochs = range(1, len(acc) + 1)
[Link](epochs, acc, '-', label='Training Accuracy')
[Link](epochs, val_acc, ':', label='Validation Accuracy')
[Link]('Training and Validation Accuracy')
[Link]('Epoch')
[Link]('Accuracy')
[Link](loc='lower right')
[Link]()
from [Link] import confusion_matrix
y_predicted = [Link](x_test)
mat = confusion_matrix(y_test.argmax(axis=1), y_predicted.argmax(axis=1))
16
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
[Link]('Predicted label')
[Link]('Actual label')
import [Link] as image
x = image.load_img('[Link]', target_size=(face_images.shape[1:]))
[Link]([])
[Link]([])
[Link](x)
x = image.img_to_array(x) /
255 x = np.expand_dims(x,
axis=0) y = [Link](x)[0]
for i in range(len(y)):
print(faces.target_names[i] + ': ' +
str(y[i]))
Output:
['Colin Powell' 'Donald Rumsfeld' 'George W Bush' 'Gerhard Schroeder'
'Tony Blair']
(1140, 128, 128, 3)
17
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
Model: "sequential"
=================================================================
Total params: 1,662,725
Trainable params: 1,662,725
Non-trainable params: 0
Epoch 1/20
18
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
19
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
<[Link] at 0x1ec80d4d910>
20
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
21
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
22
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
all_categories.append(category)
lines = readLines(filename)
category_lines[category] = lines
n_categories = len(all_categories)
if n_categories == 0:
raise RuntimeError('Data not found. Make sure that you downloaded data
' 'from [Link] and extract it to '
'the current directory.')
import torch
import [Link] as nn
class RNN([Link]):
def init (self, input_size, hidden_size, output_size):
super(RNN, self). init ()
self.hidden_size = hidden_size
def initHidden(self):
return [Link](1, self.hidden_size)
import random
23
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
def categoryTensor(category):
li = all_categories.index(category)
tensor = [Link](1,
n_categories) tensor[0][li] = 1
return tensor
# One-hot matrix of first to last letters (not including EOS) for input
def inputTensor(line):
tensor = [Link](len(line), 1, n_letters)
for li in range(len(line)):
letter = line[li] tensor[li][0]
[all_letters.find(letter)] = 1
return tensor
[Link]()
for p in [Link]():
[Link].add_([Link], alpha=-learning_rate)
import time
import math
def timeSince(since):
now = [Link]()
s = now - since
m = [Link](s / 60)
s -= m * 60
return '%dm %ds' % (m, s)
24
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
n_iters = 100000
print_every = 5000
plot_every = 500
all_losses = []
total_loss = 0 # Reset every ``plot_every`` ``iters``
start = [Link]()
for iter in range(1, n_iters + 1):
output, loss =
train(*randomTrainingExample()) total_loss +=
loss
if iter % print_every == 0:
print('%s (%d %d%%) %.4f' % (timeSince(start), iter, iter / n_iters * 100, loss))
if iter % plot_every == 0:
all_losses.append(total_loss / plot_every)
total_loss = 0
import [Link] as plt
[Link]()
[Link](all_losses)
max_length = 20
output_name = start_letter
for i in range(max_length):
output, hidden = rnn(category_tensor, input[0],
hidden) topv, topi = [Link](1)
topi = topi[0][0]
if topi == n_letters - 1:
break
else:
letter = all_letters[topi]
output_name += letter
input = inputTensor(letter)
return output_name
# Get multiple samples from one category and multiple starting letters
def samples(category, start_letters='ABC'):
for start_letter in start_letters:
print(sample(category, start_letter))
samples('Russian', 'RUS')
samples('German', 'GER')
samples('Spanish', 'SPA')
samples('Chinese', 'CHI')
25
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
Output:
# categories: 18 ['Arabic', 'Chinese', 'Czech', 'Dutch', 'English', 'French', 'German',
'Greek', 'Irish', 'Italian ', 'Japanese', 'Korean', 'Polish', 'Portuguese', 'Russian ',
'Scottish', 'Spanish', 'Vietnamese']
O'Neal
0m 5s (5000 5%) 2.6595
0m 11s (10000 10%) 2.9644
0m 16s (15000 15%) 3.3754
0m 22s (20000 20%) 2.0799
0m 27s (25000 25%) 2.6884
0m 33s (30000 30%) 2.2509
0m 38s (35000 35%) 2.3497
0m 43s (40000 40%) 2.5290
0m 49s (45000 45%) 2.9439
0m 54s (50000 50%) 2.7406
0m 59s (55000 55%) 3.0044
1m 4s (60000 60%) 2.5765
1m 10s (65000 65%) 2.3694
1m 15s (70000 70%) 2.2810
1m 20s (75000 75%) 2.2660
1m 26s (80000 80%) 2.1720
1m 31s (85000 85%) 2.4900
1m 36s (90000 90%) 2.0302
1m 42s (95000 95%) 1.8320
1m 47s (100000 100%) 2.4904
[<[Link].Line2D at 0x1e56757bcd0>]
Rovonov
Uarakov
Shavanov
Gerre Eeren
Roure Salla
Para Allana
Cha
Han
Iun
26
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
reviews = data['review'].values
labels = data['sentiment'].values
encoder = LabelEncoder()
encoded_labels = encoder.fit_transform(labels)
27
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
# model initialization
model =
[Link]([
[Link](vocab_size, embedding_dim,
input_length=max_length),
[Link]([Link](64)),
[Link](24, activation='relu'),
[Link](1, activation='sigmoid')
])
# compile model
[Link](loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# model summary
[Link]()
num_epochs = 5
history = [Link](train_padded, train_labels,
epochs=num_epochs, verbose=1,
validation_split=0.1)
prediction = [Link](test_padded)
# Get labels based on probability 1 if p>= 0.5 else 0
pred_labels = []
for i in prediction:
if i >= 0.5:
pred_labels.append(1)
else:
28
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
pred_labels.append(0)
print("Accuracy of prediction on test set :
", accuracy_score(test_labels,pred_labels))
Output:
review sentiment
0 One of the other reviewers has mentioned that ... positive
1 A wonderful little production. <br /><br />The... positive
2 I thought this was a wonderful way to spend ti... positive
3 Basically there's a family where a little boy ... negative
4 Petter Mattei's "Love in the Time of Money" is... positive
... ... ...
49995 I thought this movie did a down right good job... positive
49996 Bad plot, bad dialogue, bad acting, idiotic di... negative
49997 I am a Catholic taught in parochial elementary... negative
49998 I'm going to have to disagree with the previou... negative
49999 No one expects the Star Trek movies to be high... negative
29
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
review sentiment
0 w w w w w w w w w w w w w w w w w w w w w w w ... positive
1 wwwwwwwwwwwwwww positive
2 wwwwwwwwwwwwwwwwwww positive
3 wwwwwwwwwww negative
4 wwwwwwwwwwwwwwwwww positive
review sentiment
Model: "sequential"
30
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
===========================================================
======
Total params: 387,601
Trainable params: 387,601
Non-trainable params: 0
Epoch 1/5
1055/1055 [==============================] - 60s 55ms/step - loss: 0.69
32 - accuracy: 0.5021 - val_loss: 0.6925 - val_accuracy: 0.5205 Epoch 2/5
1055/1055 [==============================] - 58s 55ms/step - loss: 0.69
26 -
Epoch 3/5
1055/1055 [==============================] - 59s 56ms/step - loss: 0.69
26 - accuracy: 0.5129 - val_loss: 0.6924 - val_accuracy: 0.5171 Epoch
4/5
1055/1055 [==============================] - 59s 56ms/step - loss: 0.69
23 - accuracy: 0.5166 - val_loss: 0.6927 - val_accuracy: 0.4965 Epoch
5/5
1055/1055 [==============================] - 58s 55ms/step - loss: 0.69
25 - accuracy: 0.5141 - val_loss: 0.6924 - val_accuracy: 0.5173
31
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
32
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
import numpy as np
import pandas as
pd import json
import functools as fc
from [Link] import accuracy_score
for i in
range(len(word)): if
word[i] in vocab:
vocab[word[i]] += 1
else:
vocab[word[i]] = 1
# replace rare words with <unk> (threshold = 3)
vocab2 = {}
num_unk = 0
for w in vocab:
if vocab[w] >= 3:
vocab2[w] = vocab[w]
else:
num_unk += vocab[w]
33
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
for i in range(len(word)):
if word[i] not in vocab_ls:
word[i] == '<unk>'
# for ss, we need to count the times that a pos tag occurs at the beginning
# of a sequence (i.e. (s|<s>))
for i in
range(len(word)): if
index[i] == 1:
if str(pos[i]) + '|' + '<s>' in ss:
ss[str(pos[i]) + '|' + '<s>'] += 1
else:
ss[str(pos[i]) + '|' + '<s>'] = 1
for p in pos:
if p in count_pos:
count_pos[p] += 1
else:
count_pos[p] = 1
34
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
35
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
# split dev lists (index, word and pos) to individual samples (list --> list of sublists)
word_dev2 = []
pos_dev2 = []
word_sample = []
pos_sample = []
for i in range(len(dev)-1):
if index_dev[i] < index_dev[i+1]:
word_sample.append(word_dev[i])
pos_sample.append(pos_dev[i])
else:
word_sample.append(word_dev[i])
word_dev2.append(word_sample)
word_sample = []
pos_sample.append(pos_dev[i])
pos_dev2.append(pos_sample)
pos_sample = []
def greedy(sentence):
# initialize a dictionary to keep track of the pos for each position
pos = []
for p in
pos_distinct: try:
temp = emission[sentence[0] + '|' + p] * transition[p + '|' + '<s>']
if temp > max_prob:
max_prob = temp
p0 = p
except:
pass
[Link](p0)
max_prob = 0
pi = 'UNK'
36
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
for p in
pos_distinct: try:
temp = emission[sentence[i] + '|' + p] * transition[p + '|' + pos[-
1]] if temp > max_prob:
max_prob = temp
pi = p
except:
pass
[Link](pi)
return pos
pos_greedy = [greedy(s) for s in word_dev2]
# concatenate the list of sublists into one single list
pos_greedy = [Link](lambda a, b: a + b, pos_greedy)
pos_dev = [Link](lambda a, b: a + b, pos_dev2)
index_dev = [Link][:,
'index'].[Link]() word_dev = [Link][:,
'word'].[Link]() pos_dev = [Link][:,
'POS'].[Link]()
# split dev lists (index, word and pos) to individual samples (list --> list of sublists)
word_dev2 = []
37
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
pos_dev2 = []
word_sample = []
pos_sample = []
for i in range(len(dev)-1):
if index_dev[i] < index_dev[i+1]:
word_sample.append(word_dev[i])
pos_sample.append(pos_dev[i])
else:
word_sample.append(word_dev[i])
word_dev2.append(word_sample)
word_sample = []
pos_sample.append(pos_dev[i])
pos_dev2.append(pos_sample)
pos_sample = []
# for the first position, the highest cumulative probability of each possible pos would be
# emission[sentence[0]|pos] * transition[pos|<s>]
# check if the first word is in the vocabualry. If not, replace with '<unk>'
if sentence[0] not in vocab_frequent:
sentence[0] = '<unk>'
for p in pos_distinct:
if p + '|' + '<s>' in transition:
try:
seq[0][p] = transition[p + '|' + '<s>'] * \
emission[sentence[0] + '|' + p]
except:
seq[0][p] = 0
# set <s> as the previous pos of each possible pos at the first position
for p in seq[0].keys():
pre_pos[0][p] = '<s>'
# for position i > 0, the highest cumulative probability of each possible pos would be
# emission[sentence[i]|pos[i]] * transition[pos[i]|pos[i-1]] * seq[i-1][pos]
for i in range(1, len(sentence)):
# still, check if the word is in the vocabulary
if sentence[i] not in vocab_frequent:
sentence[i] = '<unk>'
38
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
for p in seq[i-1].keys():
for p_prime in pos_distinct:
if p_prime + '|' + p in transition:
if p_prime in seq[i]:
try:
temp = seq[i-1][p] * \
transition[p_prime + '|' + p] * \
emission[sentence[i] + '|' + p_prime]
if temp > seq[i][p_prime]:
seq[i][p_prime] = temp
pre_pos[i][p_prime] = p
except:
pass
else:
try:
seq[i][p_prime] = seq[i-1][p] * \
transition[p_prime + '|' + p] * \
emission[sentence[i] + '|' + p_prime]
pre_pos[i][p_prime] = p
except:
seq[i][p_prime] = 0
# after we get the maximum probability for every possible pos at every position of a
sentence,
# we can trace backward to find out our prediction on the pos for the sentence.
seq_predict = []
# The pos of the last word in the sentence is the one with the highest probability
# after predicting the pos of the last word in the sentence, we can iterate through pre_pos
to predict
# the pos of the remaining words in the input sentence in the reverse order
39
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
Output:
0
1 Pierre NNP
1
2 Vinken NNP
2
3 , ,
3
4 61 CD
4 5 years NNS
0 1 The DT
1 2 Arizona NNP
2 3 Corporations NNP
3 4 Commission NNP
4 5 authorized VBD
40
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
41
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
'61', 'years', 'old', 'will', 'join', 'the', 'board', 'as', 'a', 'nonexecutive',
'director', 'Nov.', '29', '.', 'Mr.', 'is', 'chairman', 'of', 'N.V.', 'Dutch',
'publishing', 'group', 'Rudolph', 'Agnew', '55', 'and', 'former', 'Consolidated',
'Gold', 'Fields', 'PLC', 'was', 'named', 'this', 'British', 'industrial', 'conglomerate', 'A', 'form',
'asbesto s', 'once', 'used', 'to', 'make', 'Kent', 'cigarette',
'filters', 'has', 'caused', 'high', 'percentage', 'cancer', 'deaths', 'among',
'workers', 'exposed', 'it', 'more',]
42
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
# You can write up to 5GB to the current directory (/kaggle/working/) that gets
preserved as output
when you create a version using "Save & Run All"
# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of
current session
from [Link] import Model
from [Link] import Input,LSTM,Dense
batch_size=64
epochs=100
latent_dim=256 # here latent dim represent hidden state or cell state
num_samples=10000
data_path='[Link]'
# Vectorize the data. input_texts = [] target_texts = [] input_characters = set() target_characters = set()
with open(data_path, 'r', encoding='utf-8') as f: lines = [Link]().split('\n')
for line in lines[: min(num_samples, len(lines) - 1)]: input_text, target_text, _ = [Link]('\t')
# We use "tab" as the "start sequence" character
# for the targets, and "\n" as "end sequence" character. target_text = '\t' + target_text + '\n'
input_texts.append(input_text) target_texts.append(target_text)
for char in input_text:
if char not in input_characters: input_characters.add(char)
for char in target_text:
if char not in target_characters: target_characters.add(char)
input_characters=sorted(list(input_characters)) target_characters=sorted(list(target_characters))
num_encoder_tokens=len(input_characters) num_decoder_tokens=len(target_characters)
max_encoder_seq_length=max([len(txt) for txt in input_texts]) max_decoder_seq_length=max([len(txt) for
txt in target_texts]) print('Number of samples:', len(input_texts))
print('Number of unique input tokens:', num_encoder_tokens) print('Number of unique output tokens:',
num_decoder_tokens) print('Max sequence length for inputs:', max_encoder_seq_length) print('Max
sequence length for outputs:', max_decoder_seq_length)
43
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
input_token_index=dict(
[(char,i) for i, char in enumerate(input_characters)])
target_token_index=dict(
[(char,i) for i, char in enumerate(target_characters)])
encoder_input_data = [Link](
(len(input_texts), max_encoder_seq_length, num_encoder_tokens),
dtype='float32')
decoder_input_data = [Link](
(len(input_texts), max_decoder_seq_length, num_decoder_tokens),
dtype='float32')
decoder_target_data = [Link](
(len(input_texts), max_decoder_seq_length, num_decoder_tokens),
dtype='float32')
44
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
# Run training
[Link](optimizer='rmsprop', loss='categorical_crossentropy',
metrics=['accuracy'])
[Link]([encoder_input_data, decoder_input_data], decoder_target_data,
batch_size=batch_size,
epochs=epochs,
validation_split=0.2)
[Link]('eng2french.h5')
decoder_state_input_h = Input(shape=(latent_dim,))
decoder_state_input_c = Input(shape=(latent_dim,))
decoder_states_inputs = [decoder_state_input_h,
decoder_state_input_c] decoder_outputs, state_h, state_c =
decoder_lstm(
decoder_inputs, initial_state=decoder_states_inputs)
decoder_states = [state_h, state_c]
decoder_outputs = decoder_dense(decoder_outputs)
decoder_model = Model(
[decoder_inputs] + decoder_states_inputs,
[decoder_outputs] + decoder_states)
# Sample a token
sampled_token_index = [Link](output_tokens[0, -1, :])
sampled_char = reverse_target_char_index[sampled_token_index]
decoded_sentence += sampled_char
45
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
# Update states
states_value = [h, c]
return decoded_sentence
Output:
Number of samples: 10000
Number of unique input tokens: 71 Number of
unique output tokens: 93 Max sequence length
for inputs: 15 Max sequence length for outputs:
59
Epoch 1/100
125/125 [==============================] - 15s 105ms/step - loss:
1.2150 - accuracy: 0.7315 - val_loss: 1.0873 - val_accuracy: 0.7068
Epoch 2/100
125/125 [==============================] - 13s 106ms/step - loss:
0.9334 - accuracy: 0.7490 - val_loss: 0.9959 - val_accuracy: 0.7128
Epoch 3/100
125/125 [==============================] - 13s 105ms/step - loss:
0.8396 - accuracy: 0.7679 - val_loss: 0.9039 - val_accuracy: 0.7500
…
Epoch 98/100
125/125 [==============================] - 13s 107ms/step - loss:
0.1532 - accuracy: 0.9531 - val_loss: 0.5529 - val_accuracy: 0.8705
Epoch 99/100
125/125 [==============================] - 13s 108ms/step - loss:
0.1517 - accuracy: 0.9533 - val_loss: 0.5561 - val_accuracy: 0.8697
Epoch 100/100
125/125 [==============================] - 13s 108ms/step - loss:
0.1497 - accuracy: 0.9543 - val_loss: 0.5522 - val_accuracy: 0.8706
sentence)
46
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
47
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
import os
import numpy as np
import [Link] as
image
import [Link] as plt
%matplotlib inline
def show_images(images):
fig, axes = [Link](1, 8, figsize=(20, 20), subplot_kw={'xticks': [], 'yticks': []})
for i, ax in enumerate([Link]):
[Link](images[i] / 255)
x_train = []
y_train = []
x_test = []
y_test = []
48
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
[Link](base_model)
[Link](Flatten())
[Link](Dense(1024, activation='relu'))
[Link](Dropout(0.2))
[Link](Dense(3, activation='softmax'))
[Link](optimizer='adam', loss='categorical_crossentropy',
metrics=['accuracy'])
hist = [Link](x_train, y_train_encoded, validation_data=(x_test,
y_test_encoded), batch_size=10, epochs=25)
49
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
acc = [Link]['accuracy']
val_acc = [Link]['val_accuracy']
epochs = range(1, len(acc) + 1)
[Link](epochs, acc, '-', label='Training Accuracy')
[Link](epochs, val_acc, ':', label='Validation Accuracy')
[Link]('Actual label')
x = image.load_img('arctic-wildlife/samples/arctic_fox/arctic_fox_140.jpeg',
target_size=(224, 224))
[Link]([])
[Link]([])
[Link](x)
50
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
x = image.img_to_array(x)
x = np.expand_dims(x,
axis=0) x =
preprocess_input(x)
predictions = [Link](x)
for i, label in
enumerate(class_labels):
print(f'{label}: {predictions[0][i]}')
x = image.load_img('arctic-wildlife/samples/walrus/walrus_143.png',
target_size=(224, 224))
[Link]([])
[Link]([])
[Link](x)
x = image.img_to_array(x)
x = np.expand_dims(x,
axis=0) x =
preprocess_input(x)
predictions = [Link](x)
51
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
Output:
Train :
Test :
52
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
Epoch 24/25
30/30 [==============================] - 27s 896ms/step - loss: 0.5841 -
accuracy: 0.9633 - val_loss: 0.5701 - val_accuracy: 0.9667
Epoch 25/25
30/30 [==============================] - 25s 844ms/step - loss: 0.7861 -
accuracy: 0.9500 - val_loss: 0.5762 - val_accuracy: 0.9667
<[Link] at 0x2c5496dfa00>
53
Downloaded by trivenij 24cse (trivenij.24cse@[Link])
lOMoARcPSD|56718048
CONTENT BEYOND
SYLLABUS
55
PROJECT 1
56
57
58
59
60
PROJECT 2
61
62
63
64
Greedy decoding and Viterbi decoding are algorithms used to infer the most likely sequence of states in Hidden Markov Models (HMMs) for tasks such as Part of Speech Tagging. Greedy decoding selects the most probable state at each step, considering only local, myopic decisions, which can lead to suboptimal global solutions due to lack of foresight . In contrast, Viterbi decoding considers all possible paths in the state space to identify the one with the highest overall probability, thus providing an optimal state sequence for the entire input . While greedy decoding is faster and simpler, the Viterbi algorithm, though computationally more intensive, generally yields more accurate predictions by virtue of its exhaustive search approach.
In the face recognition task, images are normalized by scaling pixel values to a 0-1 range through division by 255, supporting the model's training phase . The input shape corresponds to the dimensions of the images in the dataset, allowing for meaningful feature extraction. Conversely, the wildlife image classification task involves a suite of preprocessing steps using utilities like `ResNet50V2` for feature extraction, implemented with random augmentations like flipping and rotations to increase data diversity . Additionally, the wildlife images are rescaled and preprocessed using `preprocess_input` to adapt them to the model's expectations. These differences illustrate the tailoring of preprocessing techniques to specific dataset and model requirements, optimizing feature learning for distinct classification tasks.
Reducing the vocabulary size in Hidden Markov Models (HMM) for Part of Speech Tagging can lead to an increase in the use of out-of-vocabulary (OOV) tokens, represented as '<UNK>' . This reduction simplifies the model by decreasing the complexity of the emission matrix, potentially improving computational efficiency. However, excessive trimming can degrade the model's performance, as it may miss significant syntactic details necessary for accurately predicting part of speech tags. Balancing the vocabulary size is crucial; retaining frequently used words while representing rare words with '<UNK>' helps maintain a reasonable model complexity while striving for accurate tagging performance.
Dropout is a regularization technique used to prevent overfitting in neural networks by randomly setting a fraction of the input units to zero during training, thereby preventing units from co-adapting too much . In the RNN architecture described, a `Dropout` layer with a rate of 0.1 is applied after intermediate computations, as indicated by `self.dropout = nn.Dropout(0.1)` . This helps in maintaining a robust model that generalizes well to unseen data by ensuring that neurons rely on a distributed representation to make predictions, thus reducing overfitting and improving the network's ability to learn.
A confusion matrix is a table used to evaluate the accuracy of a classification model by displaying the actual versus predicted classifications across different categories. In the face recognition model, the confusion matrix is constructed using the `confusion_matrix` function and visualized as a heatmap with Seaborn . This visualization highlights the areas where the model is performing well (high values on the diagonal) versus areas of confusion (off-diagonal values). The heatmap provides an intuitive and immediate understanding of the model's accuracy and misclassification rates for each class, helping identify specific weaknesses or areas for improvement in the model.
Data normalization is a crucial preprocessing step that scales the input data to a uniform range, improving the performance and convergence speed of a machine learning model. In the given face recognition model, normalization is applied to pixel values by scaling them to a 0-1 range, specifically by dividing by 255 as depicted by the line `face_images = x_faces / 255` . This ensures that the input features have a mean of zero and a consistent scale, which helps the neural network to learn more effectively.
Using GANs for image augmentation poses challenges such as mode collapse, where the generator produces limited varieties of images, and training instability due to adversarial competition between the generator and discriminator . Mitigation strategies include implementing techniques like batch normalization to stabilize training, using alternative loss functions to improve convergence, and incorporating diversity-promoting mechanisms to combat mode collapse. Regular monitoring and adjustment of the learning rate can also ensure balanced training of the generator and discriminator. Furthermore, using more sophisticated architectures, such as conditional GANs, can improve the quality and diversity of generated images by conditioning on specific labels or data attributes .
The softmax activation function in the output layer of a neural network is essential for multiclass classification tasks as it converts logits (raw model outputs) into probabilities that sum to one, a prerequisite for interpretation as class probabilities . This provides a probabilistic framework to output affinities for each class, enabling the model to not only indicate the predicted category but also offer a confidence score associated with each prediction. This interpretability is crucial for applications where understanding the likelihood of different outcomes is important for informed decision-making.
The CNN architecture in the face recognition model is built using the Sequential API, starting with a `Conv2D` layer with 32 filters, aimed at detecting elementary visual features like edges . This is followed by a `MaxPooling2D` layer to reduce spatial dimensions, helping highlight the most significant features and reducing computational cost. Another two `Conv2D` layers with 64 filters each are added to learn more abstract features, again followed by `MaxPooling2D` layers . The model then flattens the 3D feature maps into 1D feature vectors using a `Flatten` layer, preparing data for classification. A `Dense` layer with 128 nodes and ReLU activation captures high-level abstractions, and finally, a `Dense` layer with a softmax activation function classifies the input into one of the specified classes . This multilayer architecture leverages spatial hierarchies in images to effectively classify faces.
Converting a Unicode string to ASCII is significant in language modeling as it simplifies the character set to a more manageable form, reducing noise caused by variations in encoding and ensuring compatibility across different systems and pre-trained language models . It is achieved using the `unicodeToAscii` function, which iteratively eliminates non-ASCII characters by normalizing Unicode strings to the 'NFD' form and using comprehension to filter out characters that are not ASCII or diacritical marks (category 'Mn'). This preprocessing step aids in creating a uniform input format for the model, facilitating more efficient learning and prediction.