Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
55 views

Deep Learning Practical File

Uploaded by

Akshit
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views

Deep Learning Practical File

Uploaded by

Akshit
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

S.No.

Practical Name Signature


Train A Deep Learning Model to Classify A Given Image
1
Using Pre Trained Model

2 Implement Object Detection Using Convolution Neural


Network

3 Improve the Deep Learning Model by Tuning Hyper


Parameters

4 Implement Recommendation System from Sales Data


Using Deep Learning.

5 Perform Sentiment Analysis in Network Graph Using RNN

Implement The Image Generation Using GAN.


6 • Demonstration And Implementation of Shallow
Architecture, Using Python, Tensorflow And Keras
• Google Colaboratory Cloning Github Repository,
Upload Data, Importing Kaggle's Dataset, Basic File
Operations
• Implementing Perceptron.
• Digit Classification: Neural Network to Classify MNIST
Dataset
Implement Convolution Neural Network Application Using
7
Tensorflow and Keras,
• Classification Of MNIST Dataset Using CNN
• Face Recognition Using CNN

8 Implement Object Detection Using Transfer Learning of


CNN Architectures

Implement Hyper Parameter Tuning and Regularization


9
Practice -
• Multilayer Perceptron (BPN)
• Minibatch Gradient Descent
Practical 1: Train A Deep Learning Model to Classify A Given Image Using Pre
Trained Model

from keras.applications import VGG16

from keras.preprocessing.image import ImageDataGenerator

from keras import models

from keras import layers

from keras import optimizers

# Load the pre-trained model

conv_base = VGG16(weights='imagenet', include_top=False, input_shape=(150, 150, 3))

# Prepare the data

train_dir = 'data/train'

validation_dir = 'data/validation'

test_dir = 'data/test'

datagen = ImageDataGenerator(rescale=1./255)

batch_size = 20

train_features, train_labels = extract_features(train_dir, 2000, datagen, conv_base, batch_size)

validation_features, validation_labels = extract_features(validation_dir, 1000, datagen, conv_base,


batch_size)

test_features, test_labels = extract_features(test_dir, 1000, datagen, conv_base, batch_size)

# Define the new classifier

model = models.Sequential()

model.add(layers.Flatten(input_shape=train_features.shape[1:]))

model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dropout(0.5))

model.add(layers.Dense(1, activation='sigmoid'))

# Train the new classifier

model.compile(optimizer=optimizers.RMSprop(lr=2e-5), loss='binary_crossentropy', metrics=['acc'])

history = model.fit(train_features, train_labels, epochs=30, batch_size=20,


validation_data=(validation_features, validation_labels))

# Fine-tune the pre-trained model

conv_base.trainable = True

set_trainable = False

for layer in conv_base.layers:

if layer.name == 'block5_conv1':

set_trainable = True

if set_trainable:

layer.trainable = True

else:

layer.trainable = False

model.compile(optimizer=optimizers.RMSprop(lr=1e-5), loss='binary_crossentropy', metrics=['acc'])

history = model.fit(train_generator, steps_per_epoch=100, epochs=100,)


Practical 2: Implement Object Detection Using Convolution Neural Network:

import tensorflow as tf

from object_detection.utils import label_map_util

from object_detection.utils import visualization_utils as vis_util

# Load the model and label map

PATH_TO_MODEL = 'path/to/your/frozen_inference_graph.pb'

PATH_TO_LABELS = 'path/to/your/label_map.pbtxt'

NUM_CLASSES = 90

detection_graph = tf.Graph()

with detection_graph.as_default():

od_graph_def = tf.GraphDef()

with tf.gfile.GFile(PATH_TO_MODEL, 'rb') as fid:

serialized_graph = fid.read()

od_graph_def.ParseFromString(serialized_graph)

tf.import_graph_def(od_graph_def, name='')

label_map = label_map_util.load_labelmap(PATH_TO_LABELS)

categories = label_map_util.convert_label_map_to_categories(label_map,
max_num_classes=NUM_CLASSES, use_display_name=True)

category_index = label_map_util.create_category_index(categories)

# Define the input and output tensors

with detection_graph.as_default():

with tf.Session(graph=detection_graph) as sess:

image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')

detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')

detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')

num_detections = detection_graph.get_tensor_by_name('num_detections:0')

# Run object detection on an image

image = cv2.imread('path/to/your/image.jpg')

image_expanded = np.expand_dims(image, axis=0)

(boxes, scores, classes, num) = sess.run([detection_boxes, detection_scores, detection_classes,


num_detections], feed_dict={image_tensor: image_expanded})

# Draw bounding boxes and labels on the image

vis_util.visualize_boxes_and_labels_on_image_array(

image,

np.squeeze(boxes),)
Practical 3: Improve the Deep Learning Model by Tuning Hyper Parameters

from sklearn.model_selection import RandomizedSearchCV

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense, Dropout

from tensorflow.keras.optimizers import Adam

from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

from sklearn.metrics import accuracy_score

from sklearn.model_selection import train_test_split

import numpy as np

# Load the data

X = np.load('X.npy')

y = np.load('y.npy')

# Split the data into training and validation sets

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)

# Define the hyperparameter search space

params = {

'learning_rate': [0.001, 0.01, 0.1],

'batch_size': [32, 64, 128],

'num_hidden_layers': [1, 2, 3],

'num_neurons': [32, 64, 128],

'dropout_rate': [0.1, 0.2, 0.3]

# Define the model architecture


def create_model(learning_rate, num_hidden_layers, num_neurons, dropout_rate):

model = Sequential()

model.add(Dense(num_neurons, activation='relu', input_shape=(X_train.shape[1],)))

model.add(Dropout(dropout_rate))

for i in range(num_hidden_layers - 1):

model.add(Dense(num_neurons, activation='relu'))

model.add(Dropout(dropout_rate))

model.add(Dense(1, activation='sigmoid'))

optimizer = Adam(learning_rate=learning_rate)

model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])

return model

# Create a KerasClassifier object

model = KerasClassifier(build_fn=create_model)

# Use RandomizedSearchCV to find the best hyperparameters

search = RandomizedSearchCV(model, param_distributions=params, n_iter=10, scoring='accuracy',


n_jobs=-1, cv=5)

search.fit(X_train, y_train)

# Print the best hyperparameters and accuracy

print("Best Parameters: ", search.best_params_)

y_pred = search.predict(X_val)

print("Validation Accuracy: ", accuracy_score(y_val, y_pred))


Practical 4: Implement Recommendation System from Sales Data Using Deep Learning.

import pandas as pd

sales_df = pd.read_csv('sales_data.csv')

from sklearn.preprocessing import LabelEncoder

from sklearn.model_selection import train_test_split

user_encoder = LabelEncoder()

item_encoder = LabelEncoder()

sales_df['user_id'] = user_encoder.fit_transform(sales_df['user_id'])

sales_df['item_id'] = item_encoder.fit_transform(sales_df['item_id'])

X = sales_df[['user_id', 'item_id']].values

y = sales_df['sales_count'].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

from scipy.sparse import coo_matrix

from scipy.sparse.linalg import svds

# Convert the sales data to a sparse matrix

sales_matrix = coo_matrix((y_train, (X_train[:, 0], X_train[:, 1])))

# Perform singular value decomposition (SVD)

U, S, Vt = svds(sales_matrix, k=20)
# Construct the user and item embeddings

user_embeddings = U

item_embeddings = Vt.T

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Input, Dense, Concatenate, Dropout

user_input = Input(shape=(1,))

item_input = Input(shape=(1,))

user_embed = Dense(32, activation='relu')(user_input)

item_embed = Dense(32, activation='relu')(item_input)

concat = Concatenate()([user_embed, item_embed])

dense1 = Dense(64, activation='relu')(concat)

dropout1 = Dropout(0.5)(dense1)

dense2 = Dense(32, activation='relu')(dropout1)

dropout2 = Dropout(0.5)(dense2)

output = Dense(1, activation='linear')(dropout2)

model = Sequential([user_input, item_input, concat, dense1, dropout1, dense2, dropout2, output])

model.compile(loss='mse', optimizer='adam', metrics=['mae'])

model.fit([X_train[:, 0], X_train[:, 1]], y_train, batch_size=256, epochs=10, validation_data=([X_test[:, 0],


X_test[:, 1]], y_test))

import numpy as np

# Generate recommendations for each user

user_item_scores = np.dot(user_embeddings, item_embeddings.T)


user_item_scores_normalized = (user_item_scores - user_item_scores.min()) / (user_item_scores.max()
- user_item_scores.min())

user_items = sales_df[['user_id', 'item_id']].drop_duplicates()

user_items = user_items.set_index('user_id')

user_items['item_scores'] = user_item_scores_normalized

# Get top
Practical 5 Perform Sentiment Analysis in Network Graph Using RNN
from tensorflow.keras.layers import SimpleRNN, LSTM, GRU, Bidirectional, Dense, Embedding
from tensorflow.keras.datasets import imdb
from tensorflow.keras.models import Sequential
import numpy as np

# Getting reviews with words that come under 5000


# most occurring words in the entire
# corpus of textual review data
vocab_size = 5000
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=vocab_size)

print(x_train[0])

# Getting all the words from word_index dictionary


word_idx = imdb.get_word_index()

# Originally the index number of a value and not a key,


# hence converting the index as key and the words as values
word_idx = {i: word for word, i in word_idx.items()}

# again printing the review


print([word_idx[i] for i in x_train[0]])

# Get the minimum and the maximum length of reviews


print("Max length of a review:: ", len(max((x_train+x_test), key=len)))
print("Min length of a review:: ", len(min((x_train+x_test), key=len)))
from tensorflow.keras.preprocessing import sequence

# Keeping a fixed length of all reviews to max 400 words


max_words = 400

x_train = sequence.pad_sequences(x_train, maxlen=max_words)


x_test = sequence.pad_sequences(x_test, maxlen=max_words)

x_valid, y_valid = x_train[:64], y_train[:64]


x_train_, y_train_ = x_train[64:], y_train[64:]
# fixing every word's embedding size to be 32
embd_len = 32

# Creating a RNN model


RNN_model = Sequential(name="Simple_RNN")
RNN_model.add(Embedding(vocab_size,
embd_len,
input_length=max_words))

# In case of a stacked(more than one layer of RNN)


# use return_sequences=True
RNN_model.add(SimpleRNN(128,
activation='tanh',
return_sequences=False))
RNN_model.add(Dense(1, activation='sigmoid'))

# printing model summary


print(RNN_model.summary())

# Compiling model
RNN_model.compile(
loss="binary_crossentropy",
optimizer='adam',
metrics=['accuracy']
)

# Training the model


history = RNN_model.fit(x_train_, y_train_,
batch_size=64,
epochs=5,
verbose=1,
validation_data=(x_valid, y_valid))

# Printing model score on test data


print()
print("Simple_RNN Score---> ", RNN_model.evaluate(x_test, y_test, verbose=0))

# Defining GRU model


gru_model = Sequential(name="GRU_Model")
gru_model.add(Embedding(vocab_size,
embd_len,
input_length=max_words))
gru_model.add(GRU(128,
activation='tanh',
return_sequences=False))
gru_model.add(Dense(1, activation='sigmoid'))

# Printing the Summary


print(gru_model.summary())

# Compiling the model


gru_model.compile(
loss="binary_crossentropy",
optimizer='adam',
metrics=['accuracy']
)

# Training the GRU model


history2 = gru_model.fit(x_train_, y_train_,
batch_size=64,
epochs=5,
verbose=1,
validation_data=(x_valid, y_valid))

# Printing model score on test data


print()
print("GRU model Score---> ", gru_model.evaluate(x_test, y_test, verbose=0))
# Defining LSTM model
lstm_model = Sequential(name="LSTM_Model")
lstm_model.add(Embedding(vocab_size,
embd_len,
input_length=max_words))
lstm_model.add(LSTM(128,
activation='relu',
return_sequences=False))
lstm_model.add(Dense(1, activation='sigmoid'))
# Printing Model Summary
print(lstm_model.summary())
# Compiling the model
lstm_model.compile(
loss="binary_crossentropy",
optimizer='adam',
metrics=['accuracy']
)
# Training the model
history3 = lstm_model.fit(x_train_, y_train_,
batch_size=64,
epochs=5,
verbose=2,
validation_data=(x_valid, y_valid))
# Displaying the model accuracy on test data
print()
print("LSTM model Score---> ", lstm_model.evaluate(x_test, y_test, verbose=0))

Practical 6 Implement The Image Generation Using GAN.

from numpy import zeros, ones, expand_dims, asarray


from numpy.random import randn, randint
from keras.datasets import fashion_mnist
from keras.optimizers import Adam
from keras.models import Model, load_model
from keras.layers import Input, Dense, Reshape, Flatten
from keras.layers import Conv2D, Conv2DTranspose, Concatenate
from keras.layers import LeakyReLU, Dropout, Embedding
from keras.layers import BatchNormalization, Activation
from keras import initializers
from keras.initializers import RandomNormal
from keras.optimizers import Adam, RMSprop, SGD
from matplotlib import pyplot
import numpy as np
from math import sqrt

(X_train, _), (_, _) = fashion_mnist.load_data()


X_train = X_train.astype(np.float32) / 127.5 - 1
X_train = np.expand_dims(X_train, axis=3)
print(X_train.shape)

def generate_latent_points(latent_dim, n_samples):


x_input = randn(latent_dim * n_samples)
z_input = x_input.reshape(n_samples, latent_dim)
return z_input

def generate_real_samples(X_train, n_samples):


ix = randint(0, X_train.shape[0], n_samples)
X = X_train[ix]
y = ones((n_samples, 1))
return X, y

def generate_fake_samples(generator, latent_dim, n_samples):


z_input = generate_latent_points(latent_dim, n_samples)
images = generator.predict(z_input)
y = zeros((n_samples, 1))
return images, y

def summarize_performance(step, g_model, latent_dim, n_samples=100):


X, _ = generate_fake_samples(g_model, latent_dim, n_samples)
X = (X + 1) / 2.0
for i in range(100):
pyplot.subplot(10, 10, 1 + i)
pyplot.axis('off')
pyplot.imshow(X[i, :, :, 0], cmap='gray_r')
filename2 = 'model_%04d.h5' % (step+1)
g_model.save(filename2)
print('>Saved: %s' % (filename2))
def save_plot(examples, n_examples):
for i in range(n_examples):
pyplot.subplot(sqrt(n_examples), sqrt(n_examples), 1 + i)
pyplot.axis('off')
pyplot.imshow(examples[i, :, :, 0], cmap='gray_r')
pyplot.show()

def define_discriminator(in_shape=(28, 28, 1)):


init = RandomNormal(stddev=0.02)
in_image = Input(shape=in_shape)
fe = Flatten()(in_image)
fe = Dense(1024)(fe)
fe = LeakyReLU(alpha=0.2)(fe)
fe = Dropout(0.3)(fe)
fe = Dense(512)(fe)
fe = LeakyReLU(alpha=0.2)(fe)
fe = Dropout(0.3)(fe)
fe = Dense(256)(fe)
fe = LeakyReLU(alpha=0.2)(fe)
fe = Dropout(0.3)(fe)
out = Dense(1, activation='sigmoid')(fe)
model = Model(in_image, out)
opt = Adam(lr=0.0002, beta_1=0.5)
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])
return model
discriminator = define_discriminator()

def define_generator(latent_dim):
init = RandomNormal(stddev=0.02)
in_lat = Input(shape=(latent_dim,))
gen = Dense(256, kernel_initializer=init)(in_lat)
gen = LeakyReLU(alpha=0.2)(gen)
gen = Dense(512, kernel_initializer=init)(gen)
gen = LeakyReLU(alpha=0.2)(gen)
gen = Dense(1024, kernel_initializer=init)(gen)
gen = LeakyReLU(alpha=0.2)(gen)
gen = Dense(28 * 28 * 1, kernel_initializer=init)(gen)
out_layer = Activation('tanh')(gen)
out_layer = Reshape((28, 28, 1))(gen)
model = Model(in_lat, out_layer)
return model
generator = define_generator(100)

def define_gan(g_model, d_model):


d_model.trainable = False
gan_output = d_model(g_model.output)
model = Model(g_model.input, gan_output)
opt = Adam(lr=0.0002, beta_1=0.5)
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])
return model
gan_model = define_gan(generator, discriminator)

def train(g_model, d_model, gan_model, X_train, latent_dim, n_epochs=100, n_batch=64):


bat_per_epo = int(X_train.shape[0] / n_batch)
n_steps = bat_per_epo * n_epochs
for i in range(n_steps):
X_real, y_real = generate_real_samples(X_train, n_batch)
d_loss_r, d_acc_r = d_model.train_on_batch(X_real, y_real)
X_fake, y_fake = generate_fake_samples(g_model, latent_dim, n_batch)
d_loss_f, d_acc_f = d_model.train_on_batch(X_fake, y_fake)
z_input = generate_latent_points(latent_dim, n_batch)
y_gan = ones((n_batch, 1))
g_loss, g_acc = gan_model.train_on_batch(z_input, y_gan)
print('>%d, dr[%.3f,%.3f], df[%.3f,%.3f], g[%.3f,%.3f]' % (i+1, d_loss_r,d_acc_r, d_loss_f,d_acc_f,
g_loss,g_acc))
if (i+1) % (bat_per_epo * 1) == 0:
summarize_performance(i, g_model, latent_dim)

latent_dim = 100
train(generator, discriminator, gan_model, X_train, latent_dim, n_epochs=20, n_batch=64)

import math
model = load_model('model_18740.h5')
latent_dim = 100
n_examples = 100
latent_points = generate_latent_points(latent_dim, n_examples)
X = model.predict(latent_points)
X = (X + 1) / 2.0
# Calculate the number of rows needed for the plot
n_rows = math.ceil(n_examples / 10)
save_plot(X, n_examples, )
Practical 7 Implement Convolution Neural Network Application Using Tensorflow and Keras,

• Classification Of MNIST Dataset Using CNN

import numpy as np
import pandas as pd
from numpy import unique, argmax
from tensorflow.keras.datasets.mnist import load_data
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dropout
from tensorflow.keras.utils import plot_model
import matplotlib.pyplot as plt
from tensorflow.keras.datasets import mnist

#loading the MNIST Dataset

(train_x, train_y), (test_x, test_y) = mnist.load_data()

#printing the shapes

print(train_x.shape, train_y.shape)

print(test_x.shape , test_y.shape)

#reshaping train and test sets

train_x = train_x.reshape((train_x.shape[0], train_x.shape[1], train_x.shape[2], 1))


test_x = test_x .reshape((test_x.shape[0], test_x.shape[1], test_x.shape[2], 1))
#printing the shapes
print(train_x.shape, train_y.shape)

print(test_x.shape , test_y.shape)

#normalizing the pixel values of images

train_x = train_x.astype('float32')/255.0

test_x = test_x.astype('float32')/255.0

#plotting images of dataset

fig = plt.figure(figsize = (10,3))

for i in range(20):

ax= fig.add_subplot(2, 10, i+1, xticks=[], yticks=[])

ax.imshow(np.squeeze(train_x[i]), cmap='gray')

ax.set_title(train_y[i])

shape = train_x.shape[1:]

shape
#CNN Model

model = Sequential()

#adding convolutional layer

model.add(Conv2D(32, (3,3), activation='relu', input_shape= shape))

model.add(Conv2D(48, (3,3), activation='relu'))

model.add(Dropout(0.5))

model.add(Flatten())

model.add(Dense(500, activation='relu'))

model.add(Dense(10, activation='softmax'))

model.summary()
#compiling model

model.compile(optimizer='adam', loss = 'sparse_categorical_crossentropy',metrics= ['accuracy'] )

x=model.fit(train_x, train_y, epochs=10, batch_size = 128, verbose= 2 , validation_split = 0.1)

loss, accuracy= model.evaluate(test_x, test_y, verbose = 0)

print(f'Accuracy: {accuracy*100}')
Practical 8 Implement Object Detection Using Transfer Learning of CNN Architectures

# for numerical analysis


import numpy as np
# to store and process in a dataframe
import pandas as pd

# for ploting graphs


import matplotlib.pyplot as plt
# advancec ploting
import seaborn as sns

# image processing
import matplotlib.image as mpimg

# train test split


from sklearn.model_selection import train_test_split
# model performance metrics
from sklearn.metrics import confusion_matrix, classification_report

# utility functions
from tensorflow.keras.utils import to_categorical
# sequential model
from tensorflow.keras.models import Sequential
# layers
from tensorflow.keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout

# from keras.optimizers import RMSprop


# from keras.preprocessing.image import ImageDataGenerator
# from keras.callbacks import ReduceLROnPlateau

train = pd.read_csv("/content/test.csv")
test = pd.read_csv("/content/test.csv")

train.head()

test.head()
print(train.isna().sum().sum())
print(test.isna().sum().sum())

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8, 5))
sns.countplot(train, palette='Dark2')
plt.title('Train labels count')
plt.show()
Practical 9 Implement Hyper Parameter Tuning and Regularization Practice -
• Minibatch Gradient Descent

import torch
import numpy as np
import matplotlib.pyplot as plt

# Creating a function f(X) with a slope of -5


X = torch.arange(-5, 5, 0.1).view(-1, 1)
func = -5 * X

# Adding Gaussian noise to the function f(X) and saving it in Y


Y = func + 0.4 * torch.randn(X.size())

...
# Plot and visualizing the data points in blue
plt.plot(X.numpy(), Y.numpy(), 'b+', label='Y')
plt.plot(X.numpy(), func.numpy(), 'r', label='func')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid('True', color='y')
plt.show()
...
# defining the function for forward pass for prediction
def forward(x):
return w * x + b

# evaluating data points with Mean Square Error (MSE)


def criterion(y_pred, y):
return torch.mean((y_pred - y) ** 2)

w = torch.tensor(-10.0, requires_grad = True)


b = torch.tensor(-20.0, requires_grad = True)

step_size = 0.1
loss_SGD = []
n_iter = 20

for i in range (n_iter):


# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_SGD.append(criterion(y_pred, Y).tolist())
for x, y in train_loader:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updating the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()

import matplotlib.pyplot as plt


import torch
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
torch.manual_seed(42)

# Creating a function f(X) with a slope of -5


X = torch.arange(-5, 5, 0.1).view(-1, 1)
func = -5 * X
# Adding Gaussian noise to the function f(X) and saving it in Y
Y = func + 0.4 * torch.randn(X.size())

w = torch.tensor(-10.0, requires_grad = True)


b = torch.tensor(-20.0, requires_grad = True)

# defining the function for forward pass for prediction


def forward(x):
return w * x + b

# evaluating data points with Mean Square Error (MSE)


def criterion(y_pred, y):
return torch.mean((y_pred - y) ** 2)

# Creating our dataset class


class Build_Data(Dataset):
# Constructor
def __init__(self):
self.x = torch.arange(-5, 5, 0.1).view(-1, 1)
self.y = -5 * X
self.len = self.x.shape[0]
# Getting the data
def __getitem__(self, index):
return self.x[index], self.y[index]
# Getting length of the data
def __len__(self):
return self.len

# Creating DataLoader object


dataset = Build_Data()
train_loader = DataLoader(dataset=dataset, batch_size=1)

step_size = 0.1
loss_SGD = []
n_iter = 20

for i in range (n_iter):


# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_SGD.append(criterion(y_pred, Y).tolist())
for x, y in train_loader:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updating the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()

...
train_loader_10 = DataLoader(dataset=dataset, batch_size=10)

w = torch.tensor(-10.0, requires_grad=True)
b = torch.tensor(-20.0, requires_grad=True)

step_size = 0.1
loss_MBGD_10 = []
iter = 20

for i in range (iter):


# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_MBGD_10.append(criterion(y_pred, Y).tolist())
for x, y in train_loader_10:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updating the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()

...
train_loader_20 = DataLoader(dataset=dataset, batch_size=20)

w = torch.tensor(-10.0, requires_grad=True)
b = torch.tensor(-20.0, requires_grad=True)
step_size = 0.1
loss_MBGD_20 = []
iter = 20

for i in range(iter):
# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_MBGD_20.append(criterion(y_pred, Y).tolist())
for x, y in train_loader_20:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updating the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()

import matplotlib.pyplot as plt


import torch
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
torch.manual_seed(42)

# Creating a function f(X) with a slope of -5


X = torch.arange(-5, 5, 0.1).view(-1, 1)
func = -5 * X
# Adding Gaussian noise to the function f(X) and saving it in Y
Y = func + 0.4 * torch.randn(X.size())

w = torch.tensor(-10.0, requires_grad=True)
b = torch.tensor(-20.0, requires_grad=True)

# defining the function for forward pass for prediction


def forward(x):
return w * x + b

# evaluating data points with Mean Square Error (MSE)


def criterion(y_pred, y):
return torch.mean((y_pred - y) ** 2)
# Creating our dataset class
class Build_Data(Dataset):
# Constructor
def __init__(self):
self.x = torch.arange(-5, 5, 0.1).view(-1, 1)
self.y = -5 * X
self.len = self.x.shape[0]
# Getting the data
def __getitem__(self, index):
return self.x[index], self.y[index]
# Getting length of the data
def __len__(self):
return self.len

# Creating DataLoader object


dataset = Build_Data()
train_loader_10 = DataLoader(dataset=dataset, batch_size=10)

step_size = 0.1
loss_MBGD_10 = []
iter = 20

for i in range(n_iter):
# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_MBGD_10.append(criterion(y_pred, Y).tolist())
for x, y in train_loader_10:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updateing the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()

train_loader_20 = DataLoader(dataset=dataset, batch_size=20)

# Reset w and b
w = torch.tensor(-10.0, requires_grad=True)
b = torch.tensor(-20.0, requires_grad=True)

loss_MBGD_20 = []

for i in range(n_iter):
# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_MBGD_20.append(criterion(y_pred, Y).tolist())
for x, y in train_loader_20:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updating the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()

plt.plot(loss_SGD,label = "Stochastic Gradient Descent")


plt.plot(loss_MBGD_10,label = "Mini-Batch-10 Gradient Descent")
plt.plot(loss_MBGD_20,label = "Mini-Batch-20 Gradient Descent")
plt.xlabel('epoch')
plt.ylabel('Cost/total loss')
plt.legend()
plt.show()
import matplotlib.pyplot as plt
import torch
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
torch.manual_seed(42)

# Creating a function f(X) with a slope of -5


X = torch.arange(-5, 5, 0.1).view(-1, 1)
func = -5 * X
# Adding Gaussian noise to the function f(X) and saving it in Y
Y = func + 0.4 * torch.randn(X.size())

w = torch.tensor(-10.0, requires_grad=True)
b = torch.tensor(-20.0, requires_grad=True)

# defining the function for forward pass for prediction


def forward(x):
return w * x + b

# evaluating data points with Mean Square Error (MSE)


def criterion(y_pred, y):
return torch.mean((y_pred - y) ** 2)

# Creating our dataset class


class Build_Data(Dataset):
# Constructor
def __init__(self):
self.x = torch.arange(-5, 5, 0.1).view(-1, 1)
self.y = -5 * X
self.len = self.x.shape[0]
# Getting the data
def __getitem__(self, index):
return self.x[index], self.y[index]
# Getting length of the data
def __len__(self):
return self.len

# Creating DataLoader object


dataset = Build_Data()
train_loader = DataLoader(dataset=dataset, batch_size=1)

step_size = 0.1
loss_SGD = []
n_iter = 20
for i in range(n_iter):
# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_SGD.append(criterion(y_pred, Y).tolist())
for x, y in train_loader:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updating the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()

train_loader_10 = DataLoader(dataset=dataset, batch_size=10)

# Reset w and b
w = torch.tensor(-10.0, requires_grad=True)
b = torch.tensor(-20.0, requires_grad=True)

loss_MBGD_10 = []

for i in range(n_iter):
# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_MBGD_10.append(criterion(y_pred, Y).tolist())
for x, y in train_loader_10:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updating the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()
train_loader_20 = DataLoader(dataset=dataset, batch_size=20)

# Reset w and b
w = torch.tensor(-10.0, requires_grad=True)
b = torch.tensor(-20.0, requires_grad=True)

loss_MBGD_20 = []

for i in range(n_iter):
# calculating loss as in the beginning of an epoch and storing it
y_pred = forward(X)
loss_MBGD_20.append(criterion(y_pred, Y).tolist())
for x, y in train_loader_20:
# making a prediction in forward pass
y_hat = forward(x)
# calculating the loss between original and predicted data points
loss = criterion(y_hat, y)
# backward pass for computing the gradients of the loss w.r.t to
learnable parameters
loss.backward()
# updating the parameters after each iteration
w.data = w.data - step_size * w.grad.data
b.data = b.data - step_size * b.grad.data
# zeroing gradients after each iteration
w.grad.data.zero_()
b.grad.data.zero_()

plt.plot(loss_SGD,label="Stochastic Gradient Descent")


plt.plot(loss_MBGD_10,label="Mini-Batch-10 Gradient Descent")
plt.plot(loss_MBGD_20,label="Mini-Batch-20 Gradient Descent")
plt.xlabel('epoch')
plt.ylabel('Cost/total loss')
plt.legend()
plt.show()

You might also like