刘二大人 《PyTorch深度学习实践》P2 线性模型

线性模型

深度学习过程

  1. DataSet:准备数据集
  2. Model:进行模型的设计/选择
  3. Training:训练确定权重
  4. inferring:应用

基本概念

监督学习:通过训练已知数据集结果的模型进行训练,然后用训练好的模型来预测未知测试集的结果达到某一功能的过程。
在这里插入图片描述

在这里插入图片描述
过拟合:由于模型过于复杂,模型学习能力过强,因此模型会去学习数据中隐含的噪声,导致模型学习不到数据集的真正分布。导致的结果是模型在训练集上的准确率很高,但在测试集上的准确率却很低

泛化:说白了就是在未见过的测试数据上也能进行预测。

将训练集再进行划分,一份用来训练,另一份用来评估(成为开发集),之后再做测试,可以提高泛化能力。
在这里插入图片描述

线性模型的案例

在这里插入图片描述
首先选择一个模型y = wx + b ==简化==> y = wx,对于参数一般开始是随机选择一个随机数。
在这里插入图片描述
比较随机权重得到的y与实际的y的平方差,计算损失,取w使得损失最小。
在这里插入图片描述
一个样本的损失和一个训练集上的平均平方误差MSE
在这里插入图片描述
该案例(y = w * x)代码实现

import numpy as np
import matplotlib.pyplot as plt

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


def forward(x):
    return x * w


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


w_list = []
mse_list = []
for w in np.arange(0.0, 4.1, 0.1):
    l_sum = 0
    print('w = ', w)
    for x_val, y_val in zip(x_data, y_data):
        y_pre_data = forward(x_val)
        loss_data = loss(x_val, y_val)
        l_sum += loss_data
        print('\t', x_val, y_val, y_pre_data, loss_data)

    print('MSE = ', l_sum / len(y_data))
    w_list.append(w)
    mse_list.append(l_sum/len(y_data))
plt.plot(w_list, mse_list)
plt.ylabel("loss")
plt.xlabel("w")
plt.show()

输出的画布:
在这里插入图片描述
可见当w = 2.0 时,损失最小,模型最精确

将来在测试时真实的坐标是Epoch,需要人工观察一下收敛的伦次
在这里插入图片描述
作业:实现线性模型(y = wx + b)并输出loss的3D图像
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

# 定义数据集
x_data = [1.0, 2.0, 3.0]
y_data = [1.9, 3.9, 5.9]

# 生成矩阵坐标
W, B = np.arange(0.0, 4.1, 0.1), np.arange(-2.0, 2.1, 0.1)
w, b = np.meshgrid(W, B)
# print(w)
# print('----------')
# print(b)


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


# 损失函数
def loss(y_pre, y):
    return (y_pre - y) ** 2


l_sum = 0  # 计算损失之和
for x_val, y_val in zip(x_data, y_data):
    y_pre = forward(x_val)
    loss_val = loss(y_pre, y_val)
    l_sum += loss_val
mse = l_sum / len(x_data)

# 定义figure
fig = plt.figure()

# 画3D图
ax = plt.axes(projection='3d')
surf = ax.plot_surface(w, b, mse,
                       rstride=1,  # 指定行的跨度
                       cstride=1,  # 指定列的跨度
                       cmap='rainbow')  # 设置颜色映射

# 设置z轴
ax.set_zlim(0, 40)

# 设置图标
ax.set_xlabel('w')
ax.set_ylabel('b')
ax.set_zlabel('Loss')
# ax.text(0.2, 2, 43, 'Cost Value', color='black')
ax.set_title("Cost Value")

# 增加颜色条
# fig.colorbar(surf, shrink=0.5, aspect=5)
fig.show()

plt.pause(0)

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李闪火

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

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

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

打赏作者

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

抵扣说明:

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

余额充值