使用Tensorflow2和Pytorch实现线性回归

  • 步骤
  • Tensorflow2代码
    • 效果
  • Pytorch代码
    • 效果

步骤

准备步骤:
1. 创建数据集
2. 设置超参数
3. 创建模型(函数)
4. 选择损失函数
5. 选择优化器

训练步骤:
6. 通过模型(函数)前向传播
7. 计算损失
8. 对超参数求梯度
9. 使用优化器利用梯度调整超参数

测试步骤:
10. 创建测试集
11. 通过模型得到预测结果
12. 画出散点图和曲线图

Tensorflow2代码

import tensorflow as tf
import numpy as np
from tensorflow.keras import Model
from tensorflow.keras.losses import MeanSquaredLogarithmicError
from tensorflow.keras.optimizers import SGD
import matplotlib.pyplot as plt#初始化参数
x=tf.reshape(tf.range(0,15,dtype=tf.float32),[15,1])
y=3*x+tf.constant(np.random.randn(15,1).astype(np.float32))+4
w=tf.Variable(np.random.rand(),dtype=tf.float32)
b=tf.Variable(np.random.rand(),dtype=tf.float32)print('x=',np.reshape(x,[1,15]),'\ny=',np.reshape(y,[1,15]),'\nw=',w,'\nb=',b)#创建模型
class My_model(Model):def __init__(self):super().__init__()# 构建一个线性层def linear(self,x):return w*x+bdef call(self,x):x=self.linear(x)return x#定义超参数
epoch=1500 #迭代次数
Ir=0.01 #学习率
model=My_model() #初始化模型
optimizer=SGD(learning_rate=Ir) #初始化优化器
losser=MeanSquaredLogarithmicError() #初始化损失函数
all_loss=[] #用于存储lossprint('--------------训练------------------------------------------------------------------')for i in range(1,epoch+1):with tf.GradientTape() as tape:cy = model(x)  # 前向传播,获得预测值loss = losser(cy, y) #计算lossgrad=tape.gradient(loss,[w,b]) #求出w,b的梯度optimizer.apply_gradients(zip(grad,[w,b]))if i%10==0:all_loss.append(loss) #添加lossprint('epoch:',i,'loss:',loss) #打印loss值print('w:',w,'\nb:',b)
print('--------------测试------------------------------------------------------------------')
#画图
plt.rcParams['font.sans-serif']=['SimHei'] #载入字体
px=tf.reshape(tf.range(0,15,0.1,dtype=tf.float32),[150,1])
py=model(px)
plt.subplot(121)
plt.title('结果图')
plt.scatter(x,y)
plt.plot(px.numpy(),py.numpy())
plt.subplot(122)
plt.title('loss图')
plt.plot(px.numpy(),all_loss)
plt.show()

效果

效果如图:
随着迭代次数的增加,loss逐渐减小。

Pytorch代码

import torch as th
from torch.nn import Module,Linear,MSELoss
from torch.optim import SGD
import matplotlib.pyplot as plt#初始化参数
x=th.arange(0,15,1,dtype=th.float32).view(15,1)
y=3*x+th.randn(15,1,dtype=th.float32)+4
w=th.rand(1)
b=th.rand(1)
print('x=',x.view(1,15),'\ny=',y.view(1,15),'\nw=',w,'\nb=',b)
print('--------------训练------------------------------------------------------------------')
#创建模型
class My_model(Module):def __init__(self,input_shape,output_shape):super().__init__()self.linear=Linear(input_shape,output_shape)def forward(self,x):x=self.linear(x)return x#定义超参数
epoch=1500 #迭代次数
Ir=0.01 #学习率
model=My_model(1,1) #初始化模型
optimizer=SGD(model.parameters(),Ir) #初始化优化器
losser=MSELoss() #初始化损失函数
all_loss=[] #用于存储lossfor i in range(1,epoch+1):optimizer.zero_grad() #将优化器的梯度清零,防止叠加cy=model(x)  #前向传播,获得预测值loss=losser(cy,y)loss.backward() #计算loss和反向传播optimizer.step() #更新权重if i%10==0:all_loss.append(loss)print('epoch:',i,'loss:',loss) #打印loss值print(optimizer.state)
print('--------------测试------------------------------------------------------------------')
#画图
plt.rcParams['font.sans-serif']=['SimHei'] #载入字体
px=th.arange(0,15,0.1,dtype=th.float32,requires_grad=False).view(150,1)
py=model(px)
plt.subplot(121)
plt.title('结果图')
plt.scatter(x,y)
plt.plot(px.detach().numpy(),py.detach().numpy())
plt.subplot(122)
plt.title('loss图')
plt.plot(px.detach().numpy(),all_loss)
plt.show()

效果

效果如下:
随着迭代次数的增加,loss逐渐减小。

使用Tensorflow2和Pytorch实现线性回归相关推荐

  1. pytorch:一维线性回归(二)

    首先,这是对上一篇文章(pytorch:一维线性回归(一))的改进. 其次,为什么想要改进上一篇文章嘞? 答案:我使用这个写好的模型后,想着既然参数已经训练出来了,那么预测的时候,就只需要直接根据参数 ...

  2. (pytorch-深度学习系列)pytorch实现线性回归

    pytorch实现线性回归 1. 实现线性回归前的准备 线性回归输出是一个连续值,因此适用于回归问题.回归问题在实际中很常见,如预测房屋价格.气温.销售额等连续值的问题. 与回归问题不同,分类问题中模 ...

  3. 深度学习day05 用Pytorch实现线性回归

    深度学习day05 用Pytorch实现线性回归 代码模板 四个主要流程 代码中的一些重点 其他的优化器 代码模板 import torch# 步骤一:Prepare dataset # x,y是矩阵 ...

  4. L05_用pytorch实现线性回归

    用pytorch实现线性回归 0.导入所需要的库 import torch 1.准备数据 x_data = torch.Tensor([[1],[2],[3]]) y_data = torch.Ten ...

  5. 深度学习练手项目(二)-----利用PyTorch进行线性回归

    前言 深度学习并没有想象的那么难,甚至比有些传统的机器学习更简单.所用到的数学知识也不需要特别的高深.这篇文章将利用PyTorch来实现线性回归这个经典的模型. 一.线性回归理论 线性回归时利用数理统 ...

  6. 从零开始学Pytorch之线性回归

    线性回归 主要内容包括: 线性回归的基本要素 线性回归模型从零开始的实现 线性回归模型使用pytorch的简洁实现 线性回归的基本要素 模型 为了简单起见,这里我们假设价格只取决于房屋状况的两个因素, ...

  7. pytorch 实现线性回归

    实现线性回归 线性回归是机器学习入门知识,应用十分广泛.线性回归利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的,其表达形式为 y = w x + b + e y = wx+b+ ...

  8. PyTorch基础-线性回归以及非线性回归-02

    线性回归 import torch import numpy as np import matplotlib.pyplot as plt %matplotlib inline from torch i ...

  9. pytorch:一维线性回归(一)

    # -- coding:utf-8 -- import torch import numpy as np from torch import nn, optim import matplotlib.p ...

最新文章

  1. iOS常用第三方开源框架和优秀开发者博客等
  2. 为你的android App实现自签名的ssl证书
  3. powershell新建python文件_powershell如何打开Python
  4. poj 1860 Currency Exchange (最短路bellman_ford思想找正权环 最长路)
  5. 《Python Cookbook 3rd》笔记(3.14):计算当前月份的日期范围
  6. 视频流传输协议RTP/RTCP/RTSP/HTTP的区别
  7. 网络电话---异常处理01
  8. ASP.NET页面——页面事件
  9. 充满艺术范儿!艺术感在线的界面欣赏
  10. libusb获取usb设备的idVendor(vid),idProduct(pid),以及Serial Number
  11. git克隆权限_git clone权限被拒绝
  12. vue省市区三级联动(行政区划代码)
  13. WINDOWS10系统出现耳机插入没有声音,怎么解决?
  14. android仿微信播放视频播放器,vue DPlayer 仿微信朋友圈视频播放效果
  15. 51单片机led灯依次点亮
  16. sqli-labs(18-22)
  17. 什么是web app
  18. Sencha Cmd的简介
  19. HFDS 常用命令 fsck 查看文件信息和block位置信息
  20. camera 成像原理

热门文章

  1. 怎么才能画出漂亮的思维导图
  2. 控制台基于Quartz.Net组件实现定时任务调度(一)
  3. 网络画板的文本编辑器也是markdown编辑器吗?
  4. 解决win10访问xp服务器共享文件出现smb1问题
  5. 使用云服务器上线网站流程
  6. css之@media网页适配
  7. SQL SERVER(32)Transact-SQL概述
  8. 执行Transact-SQL语句或批处理时发生异常
  9. 浏览器快速打开一个可编辑的文本输入域
  10. spring启动流程(一):启动流程概览