TensorFlow vs PyTorch — Linear Regression

栏目: IT技术 · 发布时间: 4年前

内容简介:Implementation of Linear Regression in both TensorFlow and PyTorch frameworks and comparison of their resultsIf your are new to Deep Learning and Neural Networks, then you must have come across the terms “In this exercise, I will be showing you the impleme

TensorFlow vs PyTorch — Linear Regression

Implementation of Linear Regression in both TensorFlow and PyTorch frameworks and comparison of their results

If your are new to Deep Learning and Neural Networks, then you must have come across the terms “ TensorFlow ” and “ PyTorch ”. These are two popular Deep Learning frameworks that are used in the field of Data Science.

In this exercise, I will be showing you the implementation of the most simple Neural Network ( Linear Regression ) using both the frameworks and compare their results.

Origin-

PyTorch is an open source machine learning library based on the Torch library. PyTorch was primarily developed by Facebook’ s AI Research lab (FAIR). It is a free and open-source software.

On the other hand, TensorFlow was developed by the Google Brain team for internal Google research purpose. It is widely used for machine learning applications such as neural networks. It is also a free and open-source software.

TensorFlow vs PyTorch — Linear Regression

TensorFlow vs PyTorch (Image from Source )

The most productive way of comparing two frameworks is to solve the same problem using both of them and analyzing their results. In this exercise, we shall perform Linear Regression using both TensorFlow and PyTorch frameworks and compare their results.

Problem-

We will be using a very simple example in this exercise. Here, we are given an array of numbers, x= [-1.0, 0.0, 1.0, 2.0, 3.0, 4.0] and y= [-3.0, -1.0, 1.0, 3.0, 5.0, 7.0] . The formula used in this is y = 2*x -1 , which is a Linear Regression.

x= [-1.0, 0.0, 1.0, 2.0, 3.0, 4.0]
y= [-3.0, -1.0, 1.0, 3.0, 5.0, 7.0]y = 2*x -1

On training a Linear Regression model using both the frameworks, we shall input a new value for x=10 and see what the model predicts for y.

TensorFlow framework-

First, we shall go through the TensorFlow framework.

TensorFlow — Linear Regression

This is the code to perform Linear Regression with TensorFlow using keras library. Let us go through each block of code in the above program.

In the first step, we will import the libraries.

import tensorflow as tf
import numpy as np
from tensorflow import keras

In the next step, we design our model using the Sequential, which is a linear stack of layers. In this model, we use only one layer(neuron).

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

In the second step, we define our optimizer and loss functions to train our Neural Network model. In this, we use the Stochastic Gradient Descent ( SDG ) optimizer and the Mean Squared Error ( MSE ) as our loss function.

model.compile(optimizer='sgd', loss='mean_squared_error')

After this step, we initialize our numbers with two variables “ xs ” and “ ys ”.

xs = np.array([-1.0,  0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

In the last step, we fit our model to the variables “xs” and “ys”. We train the model with 500 epochs .

model.fit(xs, ys, epochs=500)>>Epoch 500/500
1/1 [==============================] - 0s 1ms/step - loss: 5.1584e-05

In this final step, we predict the value for a new xs = 10 . According to the formula, y=2*x-1, for xs=10, we get a value of 19 . Let us now see what value our model created using the TensorFlow framework predicts.

print(model.predict([10.0]))>>[[18.979048]]

We see that, we get a value close to 19 using the Linear Regression model designed using the TensorFlow Framework.

PyTorch Framework-

Let us now see the Linear Regression Model designed using PyTorch framework.

PyTorch — Linear Regression

The PyTorch application of Linear Regression is indeed large and complex in comparison to the TensorFlow model. Let us analyze each step of the model.

In the first step, We import the required libraries for designing the Linear Regression model.

import torch
from torch.autograd import Variable

In the next step, we initialize the same values of “ xs ” and “ ys ” as defined in the TensorFlow model. For the PyTorch application, we convert the list to a Tensor using the appropriate functions.

xs = [[-1.0],  [0.0], [1.0], [2.0], [3.0], [4.0]]
ys = [[-3.0], [-1.0], [1.0], [3.0], [5.0], [7.0]]
xs = Variable(torch.Tensor(xs))
ys = Variable(torch.Tensor(ys))

After this, we define a class ‘ LinearRegressionModel ’ that we will use to define our model. Since this is a Simple Linear Regression with 1 input and 1 output, we use a Linear model with both the input and output dimension equal to 1. Finally, we create a “ model ” using the above-defined class.

class LinearRegressionModel(torch.nn.Module): 

def __init__(self):
super(LinearRegressionModel, self).__init__()
self.linear = torch.nn.Linear(1, 1) # One in and one out

def forward(self, x):
y_pred = self.linear(x)
return y_pred

model = LinearRegressionModel()

Next, we choose our optimizer and loss criterion. We chose the same functions as used for the TensorFlow application, i.e, the SDG function for optimizer and MSE for the loss function. Additionally, we arbitrarily fix a learning rate of 0.01.

criterion = torch.nn.MSELoss(size_average = False) 
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)

We now arrive at our training step. In this stage, we perform three tasks for 500 iterations as we set the epoch value as 500.

  1. Do a Forward pass by passing data and predicting the value of ys for each xs.
  2. Computing the loss using MSE loss function.
  3. Reset all gradients to 0, perform back-propagation finally updating the weights.
for epoch in range(500): 

# Forward pass: Compute predicted y by passing
# x to the model
pred_y = model(xs)

# Compute and print loss
loss = criterion(pred_y, ys)

# Zero gradients, perform a backward pass,
# and update the weights.
optimizer.zero_grad()
loss.backward()
optimizer.step()
print('epoch {}, loss {}'.format(epoch, loss.item()))
>>epoch 499, loss 5.151434834260726e-13

Finally, we predict the value for a new xs=10 using this model. As described earlier, we must get a value close to 19. Let us now see what the PyTorch model outputs.

new_var = Variable(torch.Tensor([[10.0]])) 
pred_y = model(new_var)
print(model(new_var).item())
>>18.999998092651367

We see the the Linear Regression model built using the PyTorch framework also gives us a value that is close to 19.

Comparision-

On visualizing the results obtained from both TensorFlow and PyTorch models, we see that the TensorFlow model gave us a result of 18.979048 and the PyTorch model gave us a result of 18.999998092651367 .

TensorFlow Model — 18.979048

PyTorch Model — 18.999998092651367

It is clearly seen that a very simple Neural Network built using the PyTorch framework has more accuracy than the model built using the TensorFlow framework. However, the PyTorch model is more complex in nature and difficult to understand for a beginner.

If you are completely new to Deep Learning and Neural Networks, I would suggest you all to start with the TensorFlow framework and then move to the PyTorch framework once you gain experience in the former.

I have attached a detailed version of the codes (.ipynb) for both the frameworks in my Github profile for your reference.

I hope that I was able to explain and demonstrate the implementation of a simple neural network (Linear Regression Model) using the two most popular frameworks that are used today in Deep Learning. Till then, Happy Machine Learning!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

劫持

劫持

玛丽•K. 斯温格尔(Mari K. Swingle) / 邓思渊 / 中信出版集团股份有限公司 / 2018-5-1 / CNY 59.00

《劫持》是一本探讨人与科技的关系的书,基于一位心理学博士20年的临床经验及其作为神经认知科学研究者的脑—电研究成果。在这本面向大众的科普书中,作者以深入浅出的方式,探讨了手机、电脑等便携式数字设备及让人“永不下线”的互联网对现代人尤其是青少年大脑的影响,从神经认知科学和精神分析的角度,有力地证明了数字媒介与大脑和人类行为的关系,探讨了手机等如何对人的大脑进行劫持或操控,并给出了自己作为从业医师的实......一起来看看 《劫持》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具