pytorch-TensorFlow-线性回归

简介: 笔记

在之前的简单线性回归代码中,没有用到矩阵的形式。


所以当有多个变量的时候写起来也比较复杂,今天就用矩阵来表示这些变量,以达到简化的效果。


写一个简单的神经网络,来看看tf.Keras.Dense层和pytorch.nn.Linear层里面究竟是怎样实现的,它的过程是怎样的。


如果对神经网络,以及矩阵乘法不太了解的,请去百度百科了解一下,也是非常的简单。


下面先来写一下代码 :

import tensorflow as tf
import numpy as np
x =    #假设x.shape(n,2)
y =    #假设y.shape(n,1)
w = tf.Variable(tf.random.randn([2,1],name='weight')   #w,b这里的参数与x,y的            shape对应
b = tf.Variable(tf.random.randn([1],name='bias')
def linear_regression():
  return x*w + b
def square_loss(y_pred,y_true):
  return tf.reduce_mean(tf.pow(y_pred-y_true,2).sum())
optimizer = tf.optimizers.SGD(0.01)   #应用随机梯度下降算法,是梯度下降下降算法的一种改进。
def run_optimization():
  with tf.GradientTape() as g:      #获取 梯度信息
    pred = linear_regression()
    loss = square_loss(pred,y)
  gradients = g.gradients(loss,[w,b])  #得到loss对变量w,b的梯度
  optimizer.apply_gradients(zip(gradients,[w.b])  #通过梯度信息,更新变量w,b将loss最小化
for i in range(100):
  run_optimization()

下面是pytorch代码

import torch
import numpy as np
from torch.autograd import Variable
x =   #numpy.float32数据类型  
y =   #numpy.float32数据类型
x , y = torch.from_numpy(x), torch.from_numpy(y)  #将numpy数据转换成tensor
w = Variable(torch.randn(1),requires_grad=True)
b = Variable(torch.randn(1),requires_grad=True)
def linear_regression():
    return x*w.expand_as(x) + b.expand_as(x)
for i in range(100):
    if (w.grad is not None) and (b.grad is not None):  
        w.grad.data.zero_() #因为梯度会累加 ,  所以在更新之前要先将之前的梯度信息归零
        b.grad.data.zero_() 
    pred = linear_regression()
    loss = torch.mean((pred - y) ** 2) 
    loss.backward()#方向传播 ,得到 变量的梯度
    print(loss)
    w.data.add_(- 0.01 * w.grad.data)  #利用上一步计算中得到的w的梯度信息更新w中的data数值
    b.data.add_(- 0.01 * b.grad.data)  #利用上一步计算中得到的b的梯度信息更新b中的data数值

上面没有用到形成的神经网络,下面来调用api实现线性回归

import torch
import torch.nn as nn
import torch.optim
from torch.autograd import Variable
x =    
y =
class Net(nn.Model):
  def __init__(self):
    super(Net,self).__init__()  #自动寻找基类
    self.layers = nn.Linear(1,1)   #输入输出数据的维度
  def forwadr(self,x):
    x = self.layers(x)
    return x     #进行前向传播
net = Net()
optimizer = torch.optim.SGD(0.001)
error = torch.nn.MSELoss()
for i in range(1100):
  pred = net(x)
  loss = error(pred,y)
  optimizer.zero_grad()   #清除梯度信息
  loss.backward()     #生成梯度信息
  optimizer.step()        #应用梯度信息

在用TensorFlow来实现一下,对比一下两框架的区别以便跟好的学习

import tensorflow as tf
from tensorflow.keras import Model , layers
x = 
y = 
class Net(Model):
  def __init__(self):
    super(Net,self).__init__()
    self.layers = layers.Dense(1,activation='relu')
  def forward(self,x):
    x = self.layers(x)
    return x
def square_loss(y_pred,y_true):
  return tf.reduce_mean(tf.pow(y_pred-y_true,2).sum())
optimizer = tf.optimizers.SGD(0.001)
net = Net()
def run_optimization():
  with tf.gradientTape() as g:
    pred = net(x)
    loss = square_loss(pred,y)
  trainable_cariables = net.trainable_variables
  gradients = g.gradient(loss,trainable_cariables)
  optimizer.apply_gradients(zip(gradients,trainable_cariables))

通过代码,我们已经对这两个框架的基本的使用有了一定的了解,也对利用神经网络完成线性回归任务用了一定的了解,那要实现逻辑回归呢??有没有想过?例如识别手写数字。

Thank for your reading !!!

公众号:FPGA之旅

目录
相关文章
|
4月前
|
机器学习/深度学习 分布式计算 PyTorch
Tensorflow、Pytorch、
Tensorflow、Pytorch、Horovod、Spark、JupyterLab、TF-Serving、Triton等。 是什么,怎么用,推荐demo
92 40
|
10天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
用TensorFlow实现MNIST神经网络
用TensorFlow实现MNIST神经网络
14 0
|
3月前
|
机器学习/深度学习 存储 算法
TensorFlow 卷积神经网络实用指南:6~10
TensorFlow 卷积神经网络实用指南:6~10
105 0
|
3月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
TensorFlow 卷积神经网络实用指南:1~5
TensorFlow 卷积神经网络实用指南:1~5
29 0
|
4月前
|
机器学习/深度学习 Linux TensorFlow
基于Python TensorFlow Keras的深度学习回归代码——keras.Sequential深度神经网络
基于Python TensorFlow Keras的深度学习回归代码——keras.Sequential深度神经网络
|
机器学习/深度学习 PyTorch 测试技术
|
机器学习/深度学习 TensorFlow 算法框架/工具
逻辑回归的 tensorflow 实现 | 学习笔记
快速学习逻辑回归的 tensorflow 实现
106 0
逻辑回归的 tensorflow 实现 | 学习笔记
uiu
|
机器学习/深度学习 算法 TensorFlow
TensorFlow 2 Keras实现线性回归
TensorFlow 2 Keras实现线性回归
uiu
143 0
TensorFlow 2 Keras实现线性回归
|
算法框架/工具
使用TensorFlow2.0的 Keras实现线性回归 训练模型
使用TensorFlow2.0的 Keras实现线性回归 训练模型
150 0
使用TensorFlow2.0的 Keras实现线性回归 训练模型
|
TensorFlow 算法框架/工具
斯坦福tensorflow教程(六)-tensorflow 实现线性回归
斯坦福tensorflow教程(六)-tensorflow 实现线性回归
89 0
斯坦福tensorflow教程(六)-tensorflow 实现线性回归

相关实验场景

更多