Pytorch 深度学习实践 第2讲

一、线性模型

课程链接:Pytorch深度学习实践——线性模型

1、深度学习的步骤

  1. DataSet:找到数据集

    训练数据集:train dataset、验证数据集dev dataset(避免过拟合,提升泛化性能)、测试数据集:test dataset

  2. Model:模型的选择和设计

  3. Training:训练

  4. Infering:推理

2、线性模型(Linear Model): y ^ = w ∗ x + b \hat{y}=w*x+b y^=wx+b

1、权重w、偏置b 取值随机化:random value
2、Forward、predict预测值
3、得到损失值loss: l o s s = 1 m ( y ^ − y ) 2 = 1 m ( w ∗ x + b − y ) 2 loss=\frac{1}{m}(\hat{y}-y)^2=\frac{1}{m}(w*x+b-y)^2 loss=m1(y^y)2=m1(wx+by)2

最小均方误差MSE(Mean Square Error): c o s t = 1 N ∑ n = 1 N ( y ^ − y ) 2 cost=\frac{1}{N}\sum_{n=1}^{N}{(\hat{y}-y)^2} cost=N1n=1N(y^y)2

4、反向传播BP:计算梯度
5、梯度下降:减少loss

3、学习过程可视化:matplotlib.pyplot、3d绘图Axes3D+np.meshgrid()、Visdom

4、作业

Ⅰ、课程作业:使用穷举法来实现线性模型(y=w*x),并绘制权值w和损失值loss的2D图像

代码实现

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]

def forward(x):
    return w * x

def loss(y_pred, y):
    return (y_pred - y) ** 2

#穷举法
w_list = []
mse_list = []

for w in np.arange(0.0, 4.1, 0.1):
    print("w = ", w)
    loss_sum = 0
    for x_val, y_val in zip(x_data, y_data):
        y_pred_val = forward(x_val)
        loss_val = loss(y_pred_val, y_val)
        loss_sum += loss_val
        print('\t', x_val, y_val, y_pred_val, loss_val)
    print('MSE = ', loss_sum / 3)
    w_list.append(w)
    mse_list.append(loss_sum / 3)

plt.plot(w_list, mse_list)
plt.xlabel('w')
plt.ylabel('loss')
plt.show()
Ⅱ、课后作业:实现线性模型(y=wx+b)并输出loss的3D图像。
# 作业题目:实现线性模型(y=wx+b)并输出loss的3D图像。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#这里设函数为y=3x+2
x_data = [1.0, 2.0, 3.0]
y_data = [5.0, 8.0, 11.0]

def forward(x):
    return w * x + b

def loss(y_pred, y):
    return (y_pred - y) ** 2

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)#w,b都是坐标矩阵,两个矩阵维度相同,两个矩阵的对应元素组成一个坐标:(w11, b11)、(w12, b12)、...
print(w)
print(b)

l_sum = 0
for x_val, y_val in zip(x_data, y_data):
    y_pred_val = forward(x_val)
    print(y_pred_val)
    loss_val = loss(y_pred_val, y_val)#此时也是一个二维矩阵
    l_sum += loss_val#此时也是一个二维矩阵
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(w, b, l_sum/3)
plt.show()


结果展示

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值