Deep Learning Lab Manual
Deep Learning Lab Manual
Aim:
To write a program to Solving XOR problem using DNN.
Algorithm:
1. Start the program.
2. Get the training data
3. To create the Number of Input units, Number of Hidden units, request.
4. To send frames to server from the client side.
5. If your frames reach the server it will send ACK signal to client otherwise it will
send NACK signal to client.
6. Stop the program
Program:
import numpy as np # For matrix math
import matplotlib.pyplot as plt # For plotting
import sys # For printing
# The training data.
X = np.array([
[0, 1],
[1, 0],
[1, 1],
[0, 0]
])
for j in range(m):
sys.stdout.write("\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 = np.multiply((_W2.T * dz2), sigmoid(a1, derv=True)) #
(2x1 * 1x1) .* 2x1 = 2x1
dW1 += dz1.dot(a0.T) # 2x1 * 1x2 = 2x2
)
Output
Result:
Thus the Python program successfully to Solving XOR problem using DNN.
Ex. No: 2 CHARACTER RECOGNITION USING CNN
Aim:
Program:
pip install
opencv-python pip
install keras
pip install tensorflow
import cv2
import numpy as
np import pandas
as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import
train_test_split from sklearn.utils import shuffle
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPool2D, Dropout
from keras.optimizers import SGD, Adam
from keras.callbacks import ReduceLROnPlateau, EarlyStopping
from keras.utils import to_categorical
data = pd.read_csv(r"A_Z Handwritten Data.csv").astype('float32')
X = data.drop('0',axis = 1)
y = data['0']
train_x, test_x, train_y, test_y = train_test_split(X, y, test_size =
0.2) train_x = np.reshape(train_x.values, (train_x.shape[0], 28,28))
test_x = np.reshape(test_x.values, (test_x.shape[0], 28,28))
word_dict =
{0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H',8:'I',9:'J',10:'K',11:'L',12:'M',13:'N',14:'O',
15:'P',16:'Q',17:'R',18:'S',19:'T',20:'U',21:'V',22:'W',23:'X', 24:'Y',25:'Z'}
y_int = np.int0(y)
count = np.zeros(26,
dtype='int') for i in y_int:
count[i] +=1
alphabets = []
for i in
word_dict.values():
alphabets.append(i)
plt.show()
uff = shuffle(train_x[:100])
fig, ax = plt.subplots(3,3, figsize = (10,10))
axes = ax.flatten()
for i in range(9):
_, shu = cv2.threshold(shuff[i], 30, 200, cv2.THRESH_BINARY)
axes[i].imshow(np.reshape(shuff[i], (28,28)), cmap=plt.get_cmap('gray'))
plt.show()
# 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)
model.add(Flatten())
model.add(Dense(64,activation ="relu"))
model.add(Dense(128,activation ="relu"))
model.add(Dense(26,activation ="softmax"))
model.compile(optimizer = Adam(learning_rate=0.001),
loss='categorical_crossentropy', metrics=['accuracy'])
pred = word_dict[np.argmax(test_yOHE[i])]
ax.set_title("Prediction: "+pred)
# Predection on External Image
img = cv2.imread(r'test_image.jpg')
img_copy = img.copy()
img = cv2.cvtColor(img,
cv2.COLOR_BGR2RGB) img = cv2.resize(img,
(400,440))
img_pred = word_dict[np.argmax(model.predict(img_final))]
while (1):
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
Output:
The new shape of train data: (297960, 28, 28, 1)
The new shape of train data: (74490, 28, 28, 1)
The new shape of train labels: (297960, 26)
The new shape of test labels: (74490, 26)
model: "sequential"
=================================================================
Total params: 137,178
Trainable params: 137,178
Non-trainable params: 0
Aim:
To write a python program to implement the Face recognition using CNN.
Algorithm:
i. Start the program.
ii. Get the relevant packages for Face
Recognition Load the A_Z Handwritten
Data.csv from the directory. Reshape data for
model creation
iii. Train the model and Prediction on test data
iv. Prediction on External Image
v. Stop the program
Program:
import numpy as
np import pandas
as pd
from sklearn.datasets import fetch_lfw_people
print(faces.target_names
)
print(faces.images.shape
)
%matplotlib inline
import matplotlib.pyplot as
plt import seaborn as sns
sns.set()
fig, ax = plt.subplots(3, 6, figsize=(18,
10)) for i, axi in enumerate(ax.flat):
axi.imshow(faces.images[i] / 255) # Scale pixel values so Matplotlib doesn't clip
everything above 1.0
axi.set(xticks=[], yticks=[], xlabel=faces.target_names[faces.target[i]])
from collections import Counter
counts = Counter(faces.target)
names = {}
df = pd.DataFrame.from_dict(names,
orient='index') df.plot(kind='bar')
mask = np.zeros(faces.target.shape, dtype=np.bool)
for target in np.unique(faces.target):
mask[np.where(faces.target == target)[0][:100]] = 1
x_faces = faces.data[mask]
y_faces = faces.target[mask]
x_faces = np.reshape(x_faces, (x_faces.shape[0], faces.images.shape[1],
faces.images.shape[2], faces.images.shape[3]))
x_faces.shape
from tensorflow.keras.utils import to_categorical
from sklearn.model_selection import
train_test_split
model = Sequential()
model.add(Conv2D(32, (3, 3),
activation='relu',
input_shape=(face_images.shape[1:])))
model.add(MaxPooling2D(2, 2))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(2, 2))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(2, 2))
model.add(Flatten())
model.add(Dense(128,
activation='relu'))
model.add(Dense(class_count, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
hist = model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=20,
batch_size=25)
acc = hist.history['accuracy']
val_acc = hist.history['val_accuracy']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, '-', label='Training Accuracy')
plt.plot(epochs, val_acc, ':', label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend(loc='lower right')
plt.plot()
from sklearn.metrics import confusion_matrix
y_predicted = model.predict(x_test)
mat = confusion_matrix(y_test.argmax(axis=1), y_predicted.argmax(axis=1))
plt.xlabel('Predicted
label') plt.ylabel('Actual
label') import keras.utils
as image
x = image.load_img('george.jpg', target_size=(face_images.shape[1:]))
plt.xticks([])
plt.yticks([])
plt.imshow(x)
x = image.img_to_array(x) /
255 x = np.expand_dims(x,
axis=0) y = model.predict(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)
(500, 128, 128, 3)
Model: "sequential"
=================================================================
Total params: 1,662,725
Trainable params: 1,662,725
Non-trainable params: 0
Epoch 1/20
16/16 [==============================] - 2s 123ms/step - loss: 1.6558 - accuracy: 0.1925 -
val_loss: 1.6038 - val_accuracy: 0.2000
Epoch 2/20
16/16 [==============================] - 2s 110ms/step - loss: 1.5860 - accuracy: 0.3175 -
val_loss: 1.5416 - val_accuracy: 0.3200
Epoch 3/20
16/16 [==============================] - 2s 112ms/step - loss: 1.4851 - accuracy: 0.3675 -
val_loss: 1.3706 - val_accuracy: 0.4500
Epoch 4/20
16/16 [==============================] - 2s 110ms/step - loss: 1.1602 - accuracy: 0.5775 -
val_loss: 1.0931 - val_accuracy: 0.5900
Epoch 5/20
16/16 [==============================] - 2s 112ms/step - loss: 0.8385 - accuracy: 0.7000 -
val_loss: 0.8494 - val_accuracy: 0.6700
Epoch 6/20
16/16 [==============================] - 2s 111ms/step - loss: 0.5011 - accuracy: 0.8275 -
val_loss: 0.8085 - val_accuracy: 0.6900
Epoch 7/20
16/16 [==============================] - 2s 111ms/step - loss: 0.3819 - accuracy: 0.8550 -
val_loss: 0.7241 - val_accuracy: 0.7200
Epoch 8/20
16/16 [==============================] - 2s 110ms/step - loss: 0.3558 - accuracy: 0.8950 -
val_loss: 0.5499 - val_accuracy: 0.7800
Epoch 9/20
16/16 [==============================] - 2s 114ms/step - loss: 0.1407 - accuracy: 0.9575 -
val_loss: 0.7090 - val_accuracy: 0.8000
Epoch 10/20
16/16 [==============================] - 2s 115ms/step - loss: 0.0869 - accuracy: 0.9875 -
val_loss: 0.6296 - val_accuracy: 0.8400
Epoch 11/20
16/16 [==============================] - 2s 111ms/step - loss: 0.0413 - accuracy: 0.9950 -
val_loss: 0.5816 - val_accuracy: 0.8300
Epoch 12/20
16/16 [==============================] - 2s 110ms/step - loss: 0.0325 - accuracy: 0.9950 -
val_loss: 0.5888 - val_accuracy: 0.8300
Epoch 13/20
16/16 [==============================] - 2s 110ms/step - loss: 0.0359 - accuracy: 0.9900 -
val_loss: 0.6945 - val_accuracy: 0.8100
Epoch 14/20
16/16 [==============================] - 2s 110ms/step - loss: 0.0085 - accuracy: 1.0000 -
val_loss: 0.5278 - val_accuracy: 0.8600
Epoch 15/20
16/16 [==============================] - 2s 111ms/step - loss: 0.0048 - accuracy: 1.0000 -
val_loss: 0.5697 - val_accuracy: 0.8500
Epoch 16/20
16/16 [==============================] - 2s 111ms/step - loss: 0.0032 - accuracy: 1.0000 -
val_loss: 0.6065 - val_accuracy: 0.8500
Epoch 17/20
16/16 [==============================] - 2s 110ms/step - loss: 0.0022 - accuracy: 1.0000 -
val_loss: 0.6007 - val_accuracy: 0.8500
Epoch 18/20
16/16 [==============================] - 2s 112ms/step - loss: 0.0017 - accuracy: 1.0000 -
val_loss: 0.6242 - val_accuracy: 0.8500
Epoch 19/20
16/16 [==============================] - 2s 118ms/step - loss: 0.0013 - accuracy: 1.0000 -
val_loss: 0.6333 - val_accuracy: 0.8500
Epoch 20/20
16/16 [==============================] - 2s 111ms/step - loss: 0.0011 - accuracy: 1.0000 -
val_loss: 0.6541 - val_accuracy: 0.8500
<matplotlib.image.AxesImage at 0x1ec80d4d910>
Ex. No: 4 LANGUAGE MODELING USING RNN
Aim:
Program:
from future import unicode_literals, print_function,
division from io import open
import
glob
import os
import unicodedata
import string
all_letters = string.ascii_letters + " .,;'-"
n_letters = len(all_letters) + 1 # Plus EOS
marker def findFiles(path): return
glob.glob(path)
class RNN(nn.Module):
def init (self, input_size, hidden_size, output_size):
super(RNN, self). init ()
self.hidden_size = hidden_size
def initHidden(self):
return torch.zeros(1, self.hidden_size)
import random
# One-hot matrix of first to last letters (not including EOS) for input
def inputTensor(line):
tensor = torch.zeros(len(line), 1, n_letters)
for li in range(len(line)):
letter = line[li]
tensor[li][0][all_letters.find(letter)] = 1
return tensor
loss.backward()
for p in rnn.parameters():
p.data.add_(p.grad.data,
alpha=-learning_rate)
return output, loss.item() / input_line_tensor.size(0)
import time
import math
def timeSince(since):
now = time.time()
s = now - since
m = math.floor(s /
60) s -= m * 60
return '%dm %ds' % (m, s)
rnn = RNN(n_letters, 128, n_letters)
n_iters = 100000
print_every = 5000
plot_every = 500
all_losses = []
total_loss = 0 # Reset every ``plot_every`` ``iters``
start = time.time()
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 matplotlib.pyplot as plt
plt.figure()
plt.plot(all_losses)
max_length = 20
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')
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
[<matplotlib.lines.Line2D at
0x1e56757bcd0>]
Ex. No: 5
SENTIMENT ANALYSIS USING LSTM
Aim:
To write a python program to implement the Sentiment analysis using LSTM.
Algorithm:
Start the program.
Get the relevant packages for Keras-Preprocessing
Load the IMDB Dataset.csv file.
Remove HTML tags, URL and non-alphanumeric
characters Read a file and split into lines.
Tuning the hyperparameters of the model
Model initialization
compile model
reviews on which we need to predict.
Stop the program
Program:
pip install Keras-Preprocessing
import re
import pandas as
pd import numpy
as np
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import
train_test_split from keras.preprocessing.text
import Tokenizer
from keras_preprocessing.sequence import
pad_sequences import keras
from sklearn.metrics import
classification_report from sklearn.metrics
import accuracy_score import math
import nltk
data = pd.read_csv('IMDB
Dataset.csv') data
def remove_tags(string):
removelist = ""
result = re.sub('','',string) #remove HTML
tags result = re.sub('https://.*','',result) #remove
URLs
result = re.sub(r'[^w'+removelist+']', ' ',result) #remove
non-alphanumeric characters
result = result.lower()
return result
data['review']=data['review'].apply(lambda cw : remove_tags(cw))
nltk.download('stopwords')
from nltk.corpus import stopwords
stop_words = set(stopwords.words('english'))
data['review'] = data['review'].apply(lambda x: ' '.join([word for word in x.split() if
word not in (stop_words)]))
import nltk
nltk.download()
#we want to download 'wordnet' and 'omw-1.4' from nltk
w_tokenizer = nltk.tokenize.WhitespaceTokenizer()
lemmatizer = nltk.stem.WordNetLemmatizer()
def
lemmatize_text(text):
st = ""
for w in w_tokenizer.tokenize(text):
st = st + lemmatizer.lemmatize(w) + " "
return st
data['review'] = data.review.apply(lemmatize_text)
data
s = 0.0
for i in
data['review']:
word_list =
i.split()
s = s + len(word_list)
print("Average length of each review : ",s/data.shape[0])
pos = 0
for i in range(data.shape[0]):
if data.iloc[i]['sentiment'] ==
'positive': pos = pos + 1
neg = data.shape[0]-pos
print("Percentage of reviews with positive sentiment is
"+str(pos/data.shape[0]*100)+"%")
print("Percentage of reviews with negative sentiment is
"+str(neg/data.shape[0]*100)+"%")
reviews = data['review'].values
labels =
data['sentiment'].values
encoder = LabelEncoder()
encoded_labels = encoder.fit_transform(labels)
# model initialization
model = keras.Sequential([
keras.layers.Embedding(vocab_size, embedding_dim,
input_length=max_length),
keras.layers.Bidirectional(keras.layers.LSTM(64)),
keras.layers.Dense(24, activation='relu'),
keras.layers.Dense(1, activation='sigmoid')
])
# compile model
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# model summary
model.summary()
num_epochs = 5
history = model.fit(train_padded,
train_labels,
epochs=num_epochs, verbose=1,
validation_split=0.1)
prediction = model.predict(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:
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
review sentiment
1 wwwwwwwwwwwwwww positive
2 wwwwwwwwwwwwwwwwwww positive
3 wwwwwwwwwww negative
review sentiment
Model: "sequential"
===========================================================
======
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 - accuracy: 0.5094 - val_loss: 0.6925 - val_accuracy: 0.5173
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
Result:
Aim:
Program:
for i in range(len(word)):
if word[i] not in vocab_ls:
word[i] == '<unk>'
for p in pos:
if p in count_pos:
count_pos[p] += 1
else:
count_pos[p] = 1
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 = []
# predict the pos of the first word in the sentence
# we need to make sure the first word is in the vocabulary. If not, replace
# with <unk>
if sentence[0] not in vocab_frequent:
sentence[0] = '<unk>'
# predict pos based on the product of the emission and transition
max_prob = 0
p0 = 'UNK'
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
pos.append(p0)
max_prob = 0
pi = 'UNK'
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
pos.append(pi)
return pos
pos_greedy = [greedy(s) for s in word_dev2]
# concatenate the list of sublists into one single list
pos_greedy = fc.reduce(lambda a, b: a + b, pos_greedy)
pos_dev = fc.reduce(lambda a, b: a + b, pos_dev2)
index_dev = dev.loc[:,
'index'].values.tolist() word_dev = dev.loc[:,
'word'].values.tolist() pos_dev = dev.loc[:,
'POS'].values.tolist()
# 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 = []
# 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>'
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
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
The total size of my vocabulary is 43193 The
total occurrences of <unk> is 32537
‘
Aim:To write a python program to
implement the Machine Translation
using Encoder-Decoder model
Algorithm:
1. Start the program
2. Input data files are available in the read-only
3. Decoder_target_data is ahead of decoder_input_data by one time
step Set up the decoder, using `encoder_states` as initial state
4. Run training
5. Reverse-lookup token index to decode sequences back to something
readable. Generate empty target sequence of length 1.
6. Sampling loop for a batch of sequences (to simplify, here we assume a batch of
size 1). Sample a token
7. Exit condition: either hit max length or find stop character. Update the
target sequence (of length 1).
8. Update states
9. Stop the program
Program:
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv
data_path='fra.txt'
# Vectorize the data.
input_texts = []
target_texts = []
input_characters = set()
target_characters =
set()
with open(data_path, 'r', encoding='utf-8') as f:
lines = f.read().split('\n')
for line in lines[: min(num_samples, len(lines) - 1)]:
input_text, target_text, _ = line.split('\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)
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 = np.zeros(
(len(input_texts), max_encoder_seq_length, num_encoder_tokens),
dtype='float32')
decoder_input_data = np.zeros(
(len(input_texts), max_decoder_seq_length, num_decoder_tokens),
dtype='float32')
decoder_target_data = np.zeros(
(len(input_texts), max_decoder_seq_length, num_decoder_tokens),
dtype='float32')
Aim:
Algorithm:
1. Start the program
2. Load the images from the
directory. Split the data into
train and test images
3. Training the CNN using the two different sized datasets with no augmented
data. Train a network based on ResNet-50V2 with data augmentation
4. Preprocess the image and submit it to the network for classification.
5. Now try it with a walrus image that the network hasn't seen before. Start by
loading the image.
6. Finally, preprocess the image and make a
prediction. Stop the program.
Program:
import os
import numpy as np
import keras.utils as
image
import matplotlib.pyplot as plt
%matplotlib inline
def show_images(images):
fig, axes = plt.subplots(1, 8, figsize=(20, 20),
[]}) subplot_kw={'xticks': [], 'yticks':
model.add(base_model)
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(3,
activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy',
metrics=['accuracy'])
hist = model.fit(x_train, y_train_encoded, validation_data=(x_test,
y_test_encoded), batch_size=10, epochs=25)
acc = hist.history['accuracy']
val_acc = hist.history['val_accuracy']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, '-', label='Training Accuracy')
plt.plot(epochs, val_acc, ':', label='Validation
Accuracy')
Test :
Train a network
based on
ResNet-50V2 with
data augmentation
Epoch 1/25
30/30 [==============================] -
27s 848ms/step - loss: 31.6208
- accuracy: 0.7400 -
val_loss: 8.3153 -
val_accuracy: 0.8667
Epoch 2/25
30/30 [==============================] -
25s 848ms/step - loss: 6.1519 -
accuracy: 0.8900 -
val_loss: 2.5947 -
val_accuracy: 0.9583
Epoch 3/25
30/30 [==============================] -
Epoch 24/25
<matplotlib.image.AxesImage at
30/30 0x2c5496dfa00>
[============================
==] - 27s 896ms/step - loss: 0.5841 -
accura
cy: Dept of AI & DS 49
0.9633
-
val_los
s:
0.5701
-
val_ac
curacy:
0.9667
Epoch
25/25
30/30
[============================
==] - 25s 844ms/step - loss: 0.7861 -
accuracy: 0.9500 - val_loss: 0.5762 -
val_accuracy: 0.9667
4/4
[============================
==] - 3s 635ms/step
Text(89.18, 0.5, 'Actual label')
Preprocess the image and submit it to the network for classification.
1/1 [==============================] - 0s 57ms/step
arctic fox: 1.0
polar bear: 1.1824497264458205e-28
walrus: 0.0
Now try it with a walrus image that the network hasn't seen before. Start by
loading the image.
<matplotlib.image.AxesImage at 0x2c546cb7790>