(2) Go to https://colab.research.google.com/
(3) Create a new notebook rename it and then Copy to Drive
(4) Type the following into notebook and run it step by step (Press Alt-Enter to run after each step)
- LinearRegression.ipynb Select all
#Step 1
# mount Google Drive, will ask for authorization code
import numpy as np
import os
from google.colab import drive
drive.mount('/content/drive')
#Step 2
# choose the notebook settings to use GPU, via Menu -> Edit -> Notebook Settings.
%tensorflow_version 2.x
import tensorflow as tf
# will show GPU if successful
tf.test.gpu_device_name()
#Step 3
# load data
import pandas as pd
# either download the linear_data.csv and upload to google drive, or direct download it via the shell command as below
!curl -L https://tinyurl.com/lineardatacsv | grep -A200 START_OF_LINEAR_DATA.CSV | sed '1d' | sed -n "/END_OF_LINEAR_DATA.CSV/q;p" | sed 's/>/\>/g;s/</\</g' > 'drive/MyDrive/Colab Notebooks/linear_data.csv'
df = pd.read_csv('drive/MyDrive/Colab Notebooks/linear_data.csv')
df.head()
#Step 4
# split into independent and dependent
X = df[['X']].values
y = df[['Y']].values
X.shape, y.shape
#Step 5
# visualize data
import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(X,y)
plt.xlabel('independent')
plt.ylabel('dependent')
plt.show()
# Use Text box to enter #
# Linear Regression
$ \hat y = a + b * X $
#Step 6
# Linear Regression
# define regression model
class regression():
def __init__(self):
self.a = tf.Variable(initial_value=0,dtype=tf.float32)
self.b = tf.Variable(initial_value=0,dtype=tf.float32)
def __call__(self, X):
x = tf.convert_to_tensor(X,dtype=tf.float32)
y_est = tf.add(self.a, tf.multiply(self.b,x))
return y_est
model = regression()
# Use Text box to enter #
# loss = sum of square error (sse) = $ \sum (y_t - y_p) ^ 2 $
# step 7
# define loss function
def loss_func(y_true, y_pred):
# both values are in tensors
sse = tf.reduce_sum(tf.square(tf.subtract(y_true,y_pred)))
return sse
# Use Text box to enter #
# Gradient Descent
$ a = a_i - \nabla(sse) | a * LR $
$ b = b_i - \nabla(sse) | b * LR $
# step 8
# define train function
def train(model, inputs, outputs, learning_rate):
# convert outputs into tensor
y_true = tf.convert_to_tensor(outputs,dtype=tf.float32)
# GradientTape cal gradient distance
with tf.GradientTape() as g:
y_pred = model(inputs)
current_loss = loss_func(y_true,y_pred)
da,db = g.gradient(current_loss,[model.a,model.b])
# update the values
model.a.assign_sub(da*learning_rate)
model.b.assign_sub(db*learning_rate)
# Step 9
def plot_scatter(x,y):
plt.scatter(x,y) # scatter
plt.plot(x,model(x),'r--') #line
plot_scatter(X,y)
# step 10
# model fitting
model = regression()
a_values = []
b_values = []
cost_values = []
# epochs, no of steps
epochs = 100
# learning_rate
learning_rate = 0.0001
for epoch in range(epochs):
a_values.append(model.a)
b_values.append(model.b)
# prediction values and error
y_pred = model(X)
cost_value = loss_func(y,y_pred)
cost_values.append(cost_value)
# training
train(model,X,y,learning_rate)
# visual the scatter
plot_scatter(X,y)
plt.show
#print the value
print('Epoch: %d, Loss: %0.2f, a: %0.2f, b: %0.2f' %(epoch,cost_value,a_values[-1],b_values[-1]))
# step 11
plt.plot(cost_values)
(5) Linear_data.csv , download and upload to google drive
- linear_data.csv Select all
X,Y
4,2
4,10
7,4
7,22
8,16
9,10
10,18
10,26
10,34
11,17
11,28
12,14
12,20
12,24
12,28
13,25
13,34
13,24
13,46
14,26
14,36
14,60
14,80
15,20
15,26
15,54
16,32
16,40
17,32
17,40
17,50
18,42
18,56
18,76
18,84
19,36
19,45
19,68
20,32
20,48
20,52
No comments:
Post a Comment