【pytorch深度学习实践】笔记—02.线性模型

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【pytorch深度学习实践】笔记—02.线性模型

需求背景

Suppose that students would get y points in final exam, if they spent x hours in paper PyTorch Tutorial.

The question is what would be the grade if I study 4 hours?

有一组数据,关系如下表所示。记录了班级同学课程学习时间x和取得分数y的关系,(即:某学生学习了X小时即可取得Y分数),题设是:若某学生学习了4小时,可以取得分数为多少分?


【分析】这道题数据比较简单,我们通过人工推理即可完成。我们可以一眼看出,x和y有如下关系:y=2x。所以,当x=4时,y的值为8。

但是但是但是!实际中,可能数据不会这么显而易见的被观察出y和x的关系,那该如何求解呢?

X Y 备注
1.0 2.0 训练集
2.0 4.0 训练集
3.0 6.0 训练集
4.0 ? 测试集

分析思路

【思路1:如何建模?】

1.先假设y和x存在某种关系(可以是线性的,如:y=kx+b,也可以是非线性的,如:y=ax²+bx+c),再把已知的三组数据带入求得预测的y值(y_pred),计算真实值y和预测值(y_pred)误差,误差最小的,说明假设的正确性越高。

2.通常假设y和x存在某种关系时,一定先从简单地线性模型下手,若线性模型解决不了再使用非线性模型。(先易后难)


【概念梳理】

①真实值y:上述例子中,y=2是x=1时的真实值;y=4是x=2时的真实值;y=6是x=3时的真实值。

②预测值y_pred:我们会假设y和x存在某种关系,如y=wx。那把x=1,x=2,x=3带入公式后,会求得相应的y(x=1)的值,y(x=2)的值,y(x=3)的值,此时y的值即预测值,用y_pred表示。


【思路2:如何确定模型是否正确?】

b09b9c7c0917a78e635987dc8219721e_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDY4ODc2,size_16,color_FFFFFF,t_70#pic_center.png

1.根据三组数据得到的真实值曲线如图中红线所示。

2.我们假设y=wx(y和x存在线性关系),且先假设一个w的值,画出相应的图像(如蓝线所示),根据y_pred(x=i)和y(x=i)的差值来判断,我们假设的关系是否是正确的。定义loss=y_pred-y表示两点之间的距离。loss越小,说明预测值跟真实值越接近。(当loss0时,即y_pred-y=0时,预测值曲线和真实值曲线重合,可以理解为“完美预测”)

3.因为图像,y_pred可能在y的上方(y_pred>y),也可能在y的下方(y_pred<y)。所以我们用平方定义loss = (y_pred-y)²(用平方定义的好处是不需要去考虑正负号的问题)

4.我们在3的基础上,对loss进行进一步调整。因为对于每个w,我们把x=1,y=2;x=2,y=4;x=3、y=6这三组数据带入之后,会得到3个loss的值。我们对3个loss求均值作为cost损失。由此,每个w会对应唯一一个值,cost最终的形态为:

1.png

【概念梳理】

1.loss,称作损失,即为数学中的“误差”。loss越小,说明预测值和真实值越接近;loss越大,说明预测值偏离了真实值。

2.我们对loss取均值得到cost的方法,称之为MSE(均方误差/均方损失)。常用于衡量线性模型计算预测值和真实值之间的误差。

3.cost和loss区别:loss是单次损失;cost是对loss求均值之后得到的损失。


【思路3:如何预测w】

我们预测y和x之间存在线性关系,假设y=wx。确定了y和x采用的模型之后,需要对w的值进行预测,到底w取何值呢?该如何预测呢?

本实验中采用了最简单的预测方式:穷举。

把w在[1.0,4.0]之间的值依次取出进行预测,画出损失cost和w的图像,判断w取何值时,cost最小。


代码实践

1.准备数据集

根据题意,准备数据集

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

2.定义模型

使用最最最简单的线性模型y=wx来定义

def forward(x):
    return x * w

3.定义损失函数

loss=(y_pred-y)²

def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) * (y_pred - y)

4.训练模型(附整套代码)

import numpy as np  #numpy用于计算
import matplotlib.pyplot as plt  # matplotlib是绘制图像的包
# 定义训练集
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 定义模型
def forward(x):
    return x * w
# 定义损失函数,用MSE
def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) * (y_pred - y)
w_list = []  # 保存权重w
mse_list = []  # 保存每个w的损失值loss
for w in np.arange(0.0, 4.1, 0.1):  # 从0.0~4.1,设置步长为0.1,枚举w的值。即0.0,0.1,0.2,0.3,0.4,0.5……4.0
    # print('w=', w)
    l_sum = 0  # 计算每个w的loss损失总值(假设w=1,l_sum即为w=1时,x=1,x=2,x=3计算得到的损失总值)
    for x_val, y_val in zip(x_data, y_data):
        y_pred_val = forward(x_val)  # 对每个x_val计算对应y预测值
        loss_val = loss(x_val, y_val)
        l_sum += loss_val
        # print('\t', x_val, y_val, y_pred_val, loss_val)
    # print('MSE=', l_sum/3)
    w_list.append(w)
    mse_list.append(l_sum/3)  # 三组[x,y]数据,需要除以3
# 绘制w和LOSS图像
plt.plot(w_list, mse_list)
plt.ylabel('LOSS')
plt.xlabel('w')
plt.show()

5.展示绘制的图像(w-loss)

8a53e994944d67d2b33fd685ce62d6b4_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDY4ODc2,size_16,color_FFFFFF,t_70#pic_center.png


6.预测

通过1-5步骤,根据图像我们可知:当w=2.0时,cost损失取最小值。说明当w=2.0时,预测值和真实值最接近,误差最小。

因为我们定义的线性模型为y=wx,所以根据上述训练我们得到w=2,所以y和x的关系为:y=2x。

当x=4时,y=8,完成题目的预测。即:当某同学学习4小时,预测得到的分数为8分。


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
4天前
|
机器学习/深度学习 数据采集 自然语言处理
深入浅出深度学习:从理论到实践
【10月更文挑战第38天】本文旨在通过浅显易懂的语言和直观的代码示例,带领读者探索深度学习的奥秘。我们将从深度学习的基本概念出发,逐步深入到模型构建、训练以及应用实例,让初学者也能轻松入门。文章不仅介绍了深度学习的原理,还提供了实战操作指南,帮助读者在实践中加深理解。无论你是编程新手还是有一定基础的学习者,都能在这篇文章中找到有价值的内容。让我们一起开启深度学习之旅吧!
|
24天前
|
机器学习/深度学习 调度 计算机视觉
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
本文探讨了多种学习率调度策略在神经网络训练中的应用,强调了选择合适学习率的重要性。文章介绍了阶梯式衰减、余弦退火、循环学习率等策略,并分析了它们在不同实验设置下的表现。研究表明,循环学习率和SGDR等策略在提高模型性能和加快训练速度方面表现出色,而REX调度则在不同预算条件下表现稳定。这些策略为深度学习实践者提供了实用的指导。
33 2
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
|
6天前
|
机器学习/深度学习 自然语言处理 语音技术
深度学习的奇妙之旅:从理论到实践
【10月更文挑战第36天】在本文中,我们将一起探索深度学习的神秘世界。我们将首先了解深度学习的基本概念和原理,然后通过一个简单的Python代码示例,学习如何使用深度学习库Keras进行图像分类。无论你是深度学习的初学者,还是有一定基础的学习者,都可以从这篇文章中获得新的知识和启示。
|
11天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
32 7
|
19天前
|
机器学习/深度学习 数据采集 人工智能
深度学习的魔法:从理论到实践的探索####
【10月更文挑战第22天】 本文深入探讨了深度学习这一现代人工智能领域的璀璨明珠,通过生动实例与通俗语言,揭示了其背后的原理、发展历程及在多个行业的应用潜力。文章首先概述了深度学习的基本概念,随后详细解析了神经网络的核心构成,并探讨了当前面临的挑战与未来趋势。最终,通过实际案例展示了深度学习如何改变世界,为读者呈现一幅技术革新引领未来的画卷。 ####
24 3
|
28天前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
82 1
|
13天前
|
机器学习/深度学习 自动驾驶 大数据
深入探索深度学习:理论与实践
【10月更文挑战第29天】本文将深入探讨深度学习的理论与实践,包括其基本概念、发展历程、关键技术以及应用场景。我们将从浅入深,逐步解析深度学习的内在机制,并通过实例展示其在实际应用中的强大能力。无论你是深度学习的初学者,还是已经在该领域有所建树的研究者,都能在本文中找到有价值的信息。让我们一起踏上深度学习的探索之旅吧!
|
7天前
|
机器学习/深度学习 人工智能 测试技术
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术,尤其是卷积神经网络(CNN)在图像识别任务中的最新进展和面临的主要挑战。通过分析不同的网络架构、训练技巧以及优化策略,文章旨在提供一个全面的概览,帮助研究人员和实践者更好地理解和应用这些技术。
36 9

热门文章

最新文章