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之旅

目录
打赏
0
0
0
0
4
分享
相关文章
【tensorflow】连续输入的线性回归模型训练代码
  get_data函数用于生成随机的训练和验证数据集。首先使用np.random.rand生成一个形状为(10000, 10)的随机数据集,来模拟10维的连续输入,然后使用StandardScaler对数据进行标准化。再生成一个(10000,1)的target,表示最终拟合的目标分数。最后使用train_test_split函数将数据集划分为训练集和验证集。
【Python机器学习】梯度下降法的讲解和求解方程、线性回归实战(Tensorflow、MindSpore平台 附源码)
【Python机器学习】梯度下降法的讲解和求解方程、线性回归实战(Tensorflow、MindSpore平台 附源码)
236 0
Python和PyTorch深入实现线性回归模型:一篇文章全面掌握基础机器学习技术
Python和PyTorch深入实现线性回归模型:一篇文章全面掌握基础机器学习技术
240 0
利用TensorFlow解决线性回归问题
【7月更文挑战第21天】利用TensorFlow解决线性回归问题。
62 2
Pytorch实现线性回归模型
在机器学习和深度学习领域,线性回归是一种基本且广泛应用的算法,它简单易懂但功能强大,常作为更复杂模型的基础。使用PyTorch实现线性回归,不仅帮助初学者理解模型概念,还为探索高级模型奠定了基础。代码示例中,`creat_data()` 函数生成线性回归数据,包括噪声,`linear_regression()` 定义了线性模型,`square_loss()` 计算损失,而 `sgd()` 实现了梯度下降优化。
109 11

热门文章

最新文章