【PyTorch】深度学习——线性模型

视频学习:2.线性模型_哔哩哔哩_bilibili

训练模型需要四步骤:准备数据集、模型选择、训练、应用推理。

数据集分为训练集测试集

一、线性模型

训练模型:y = x * w , 求权重w 为何值时得到与下图一致的直线

评估模型与数据集之间的误差:损失    (针对样本)

目标:寻找使损失最小的 w

 对于整个训练集的损失(平均平方误差MSE):

  •  穷举法计算损失

import numpy as np
import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]    # 输入
y_data = [2.0, 4.0, 6.0]    # 输出

# 定义一个前馈模型  y = x * w
def forward(x):
    return x * w

# 定义损失函数
def loss(x,y):
    y_pred = forward(x)    #求 y
    return ( y_pred - y ) * ( y_pred - y ) 

# 定义列表存储 权重w 和 对应权重的损失值mse
w_list = [] 
mse_list = []  

for w in np.arange(0.0, 4.1, 0.1):    # 生成从0-4步长为0.1的权重值
    print ('w=', w )
    l_sum = 0
    for x_val, y_val in zip(x_data, y_data):    # 将 x,y 的数值拼接成为一个元组 然后返回元组组成的列表
        y_pre_val = forward(x_val)              # 计算 y 的预测值
        loss_val = loss(x_val, y_val)           # 用内置的损失函数计算损失
        l_sum += loss_val                       # 求和
        print('\t', x_val, y_val, y_pre_val, loss_val)
    print('MSE=', l_sum / 3)                    # 除以总数求 MSE
    w_list.append(w)                            # 存储
    mse_list.append(l_sum / 3)

# 绘图
plt.plot(w_list, mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show

  •  Visdom 可视化工具包

对数据进行可视化时一个常用的工具

  • 作业:实现线性模型(y=wx+b)并输出 loss 的 3D 图像

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    from pylab import *
    
    x_data = [1.0, 2.0, 3.0]    # 输入
    y_data = [2.0, 4.0, 6.0]    # 输出
    
    #定义一个前馈模型  yhead = x * w + b
    def forward(x):
        return x * w + b 
    
    # 定义损失函数
    def loss(x,y):
        y_pred = forward(x)    #求 y
        return ( y_pred - y ) * ( y_pred - y ) 
    
    # 构建数据
    W=np.arange(0.0,4.1,0.1)
    B=np.arange(0.0,4.1,0.1)
    [w,b]=np.meshgrid(W,B)   #基于向量 x 和 y 中包含的坐标返回二维网格坐标。w,b都是矩阵
    
    # 计算
    l_sum = 0
    for x_val, y_val in zip(x_data, y_data):    # 将 x,y 的数值拼接成为一个元组 然后返回元组组成的列表
        y_pre_val = forward(x_val)              # 计算 y 的预测值
        loss_val = loss(x_val, y_val)           # 用内置的损失函数计算损失
        l_sum += loss_val                       # 求和
    
    #绘制3D图
    fig=plt.figure()  # 创建画布
    ax=Axes3D(fig)    # 创建了一个 Axes3D 的子图放到 figure 画布里
    ax.plot_surface(w,b,l_sum/3)     # 绘制3D曲面
    #显示各坐标轴的值
    ax.set_xlabel("W")
    ax.set_ylabel("B")
    ax.set_zlabel("MSE")
    plt.show()
    最后得到3D图像

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值