当前位置: 首页 > news >正文

Pytorch线性模型(Linear Model)

基本步骤

①首先准备好数据集(DataSet)

②模型的选择或者设计(Model)

③进行训练(Train)大部分模型都需要训练,有些不需要。这一步后我们会确定不同特征的权重

④推理(inferring)

1,2,3hours会有一个结果2,4,6points。这个就是训练过程,把x和y都给模型,让他自己学。5hours这个没有一个对应的y,这个就是我们的预测过程(相当于上面的题目学完了后,现在写这个题,看能不能写对)。

对应的就是下图,表格中的就是DataSet,给机器学习后,传入4hours(Input)最后得到一个预测结果Output。

数据集DataSet

当然,其实在训练表中这个4hours其实可以为testSet测试集。在训练过程中这个对应的y看不见(引用我一位师兄的话,这个其实就是小测验,最后需要我们预测的那个过程才是期末考试)。因为不能训练完就直接用,因为这个太不够准确,需要test进行测试。

所以我们通常在训练的过程中,通常不会把我们所有的DataSet全部设置为训练集,还有一部分设测试集。

接下来有一个很大的问题就是数据集,如果我们给定的数据集很片面,不够完全,我们可能在训练后出现过拟合的现象(只认识这些训练的内容),我们希望最终可以有一个比较泛化的能力,在遇到没见过的图也可以识别我们学习的内容(也就是我们学习时常说的掌握方法,举一反三)。

设计模型(Design Model)

什么是一个比较好的模型?

先用线性模型先试试,因为这个比较基本且简单。如果效果不好再换其他模型。对于我们上面表格中的几个数据,我们看出,其实比较符合线性的规则。

上面这条线是我们真实值的线。

 由于我们给的数据比较简单,但是现实是很少会出现这样的情况的。所以通常来说会线随机预测一个w(权重weight),然后通过在1,2,3hours对应的points与真实值进行对比,evaluate Model Error 。我们就把这个评估模型称为损失loss。

如果我们现在假设这个w为3,按照我们loss的公式。  分别计算出loss值,最后测得平均的loss值。

当然你也可以假设不同的w,看看哪一种的loss最小。

这个是两个可能会使用的公式。

通过计算得到这样的结果,当然通常很难算出0这个值,所以在找w的时候可以使用穷举法。也就是如下图,把在0-4之间的每个值都算一下,找到最小的loss。

但是我们无法在实数域中把所有的值都找出来,所以实现上图采用的代码如下。 

import numpy as np
import matplotlib.pyplot as pltx_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]def forword(x):return x*wdef loss(x,y):y_pred = forword(x)return (y_pred-y)*(y_pred-y)w_list = []
mse_lis = []for w in np.arange(0.0,4.0,0.1):print('w',w)l_sum = 0for x_val,y_val in zip(x_data,y_data):y_pred_val = forword(x_val)loss_val = loss(x_val,y_val)l_sum+=loss_valprint('\t',x_val,y_val,y_pred_val,loss_val)print('MSE=',l_sum/3)w_list.append(w)mse_lis.append(l_sum/3)

运行结果为:

 画图:

plt.plot(w_list,mse_lis)
plt.ylabel('Lose')
plt.xlabel('W')
plt.show

 

但是这里需要提一下,通常我们的横坐标不是w,我们训练通常让横坐标为epoch(训练几轮)

下面这张图是昨天刚训练完的一个结果,注意在训练过程中一定要注意存盘,因为往往训练时间很长,如果出错就要重新训练,所以我们要记住定时存盘。还有要注意可视化问题,希望在训练过程中得到的结果可视化出来,让我们更好去判断结果。

相关文章:

  • 引流500+创业粉,抖音口播工具
  • three.js判断物体在人的前面,还是后面
  • Parquet文件格式详解(含行、列式存储区别)
  • react通过上下文深入传递数据
  • 嵌入式进阶——LED呼吸灯(PWM)
  • 封装 UpdateManager 实现启动微信小程序时自动强制更新
  • Python | 一文搞定列表推导式
  • 微信小程序源码-基于Java后端的小区租拼车管理信息系统毕业设计(附源码+演示录像+LW)
  • web学习笔记(五十六)
  • windows 7 10 11快捷键到启动页面
  • 对systemverilog/verilog中forever语法的理解
  • 【实战JVM】-基础篇-03-Java内存结构
  • mybatis 注解式 XML式 通用mapper(tk-mybatis)使用
  • Spring AOP源码分析
  • 基于MetaGPT构建LLM多智能体
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Angular4 模板式表单用法以及验证
  • CSS实用技巧
  • java概述
  • java正则表式的使用
  • Mithril.js 入门介绍
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • React+TypeScript入门
  • select2 取值 遍历 设置默认值
  • Vue UI框架库开发介绍
  • 回顾 Swift 多平台移植进度 #2
  • 面试总结JavaScript篇
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 一起参Ember.js讨论、问答社区。
  • 再谈express与koa的对比
  • hi-nginx-1.3.4编译安装
  • puppet连载22:define用法
  • ​业务双活的数据切换思路设计(下)
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (2)空速传感器
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (补)B+树一些思想
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)甲方乙方——赵民谈找工作
  • .gitignore文件忽略的内容不生效问题解决
  • .NET 指南:抽象化实现的基类
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 使窗口永不获得焦点
  • .Net7 环境安装配置
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • @Data注解的作用
  • @Query中countQuery的介绍