【PyTorch】深度学习实践之线性模型Linear Model


课堂练习

线性模型试图学得一个通过属性的线性组合来进行预测的函数,即:
在这里插入图片描述
我们的目标是让输出f(x)和真实值y相比尽可能的小,采用均方误差(Mean Square Error, MSE)作为loss函数,即:
在这里插入图片描述

课堂例子:
拟合如下数据:
在这里插入图片描述

实现代码:

import numpy as np
import matplotlib.pyplot as plt

# 数据集,相同索引x,y为一个样本
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_pred
    return (y_pred - y) * (y_pred - y)

w_list = [] # 权重
mse_list = [] # 权重对应的损失
for w in np.arange(0.0, 4.1, 0.1): # 穷举w
    print('w=', w)
    l_sum = 0

    # 从x_data,y_data去除x_val,y_val
    for x_val, y_val in zip(x_data, y_data):
        y_pred_val = forward(x_val)
        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)
    
# 画图
plt.plot(w_list,mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()

结果:

在这里插入图片描述
在这里插入图片描述

课后练习

使用y ^ = x ∗ w + b拟合数据,并画出损失函数图

参考资料:https://blog.youkuaiyun.com/qq_36271858/article/details/115868825?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1-115868825-blog-126074917.pc_relevant_aa&spm=1001.2101.3001.4242.2&utm_relevant_index=4

代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from pylab import *
# 解决图像无法现实中文问题
mpl.rcParams['font.sans-serif'] = ['SimHei'] 

#这里设模型函数为y=2x+2
x_data = [1.0,2.0,3.0]
y_data = [4.0,6.0,8.0]

# 定义模型
def forward(x):
    return x * w + b

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

mse_list = []
W=np.arange(0.0,4.1,0.1)
B=np.arange(0.0,4.1,0.1)
w,b=np.meshgrid(W,B)

l_sum = 0
for x_val, y_val in zip(x_data, y_data):
    y_pred_val = forward(x_val)
    loss_val = loss(x_val, y_val)
    print('x_val==', x_val,'\ny_val==', y_val,'\ny_pred_val==', y_pred_val, '\nloss_val==',loss_val)
    # 计算同一个w和b下的loss总和
    l_sum += loss_val

# 查找loss最低的w,b取值
target = {'loss': float('inf'), 'w':0, 'b':0}
for i in range(l_sum.shape[0]):
    for j in range(l_sum.shape[1]):
       if l_sum[i][j] < target['loss']:
            target['loss'] = l_sum[i][j]
            target['w'] = w[i][j]
            target['b'] = b[i][j]

print('target linear model is y = %.2f * x + %.2f' % (target['w'], target['b']))

# 定义三维坐标轴
fig = plt.figure()
ax = Axes3D(fig,auto_add_to_figure=False)
fig.add_axes(ax)
# 作图
ax.plot_surface(w, b, l_sum/3,rstride=1,cstride=1,cmap=plt.cm.coolwarm) #rstride:行之间的跨度;cstride:列之间的跨度;cmap:颜色映射表
ax.set_xlabel("权重 W")
ax.set_ylabel("偏置项 B")
ax.set_zlabel("损失值")
plt.show()

结果:

Target liner model为 y = 2.00*x+ 2.00

在这里插入图片描述


系列文章索引

教程指路:【《PyTorch深度学习实践》完结合集】 https://www.bilibili.com/video/BV1Y7411d7Ys?share_source=copy_web&vd_source=3d4224b4fa4af57813fe954f52f8fbe7

  1. 线性模型 Linear Model
  2. 梯度下降 Gradient Descent
  3. 反向传播 Back Propagation
  4. 用PyTorch实现线性回归 Linear Regression with Pytorch
  5. 逻辑斯蒂回归 Logistic Regression
  6. 多维度输入 Multiple Dimension Input
  7. 加载数据集Dataset and Dataloader
  8. 用Softmax和CrossEntroyLoss解决多分类问题(Minst数据集)
  9. CNN基础篇——卷积神经网络跑Minst数据集
  10. CNN高级篇——实现复杂网络
  11. RNN基础篇——实现RNN
  12. RNN高级篇—实现分类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoetu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值