本博客学习视频链接:刘二大人
数据集的准备
深度学习四大步骤:
- 数据集预处理
- 选择模型
- 模型训练
- 模型预测
对于数据集,首先假设一个学生每周的学习时长与期末考试的数据集Dataset
如下:
x(hours) | y(points) |
---|---|
1 | 2 |
2 | 4 |
3 | 6 |
4 | ? |
我们深度学习的任务就是根据已知的数据集,来预测结果
上表中学习时长为 4 h 4h 4h对应的样本为测试集,即 T e s t S e t Test \ Set Test Set,在训练过程中,为了保证我们模型具有更好的泛化能力,防止过拟合,测试集的 y y y是隐藏起来的。
因此,一般而言,还会对训练集进行再划分:
- 训练集
- 开发集
即将开发集用来评估模型每一步训练后的效果,在训练过程中不断调整各种参数,当训练全部完成后,再放到测试集中去进行测试,评估模型整体的好坏。
- 训练集就相当于平时做的练习册
- 开发集就相当于每次的周考和月考
- 测试即就相当于最终的期末考试
线性模型
定义线性模型的公式:
y
^
=
x
∗
ω
+
b
\hat y = x*\omega + b
y^=x∗ω+b
在很多的任务里面,一般会先用线性模型放在问题里试一下,观察其是否能够满足我们的任务需求
在训练过程中,我们所追求的目标就是,求出来模型中的 ω \omega ω 和 b b b
误差的定义
在训练过程中,我们要时刻评估当前模型和数据集之间存在的误差,如下图
将所有数据点上的误差相加得到,同时为了防止误差之间的正负相消,因此引入误差平方和,作为评估我们模型的方法
一个样本的误差(损失——针对于样本):
l
o
s
s
i
=
(
y
^
i
−
y
i
)
2
=
(
x
∗
ω
−
y
i
)
2
loss_i = (\hat y_i - y_i)^2 = (x*\omega - y_i)^2
lossi=(y^i−yi)2=(x∗ω−yi)2
模型的误差(每个样本的误差平方和再求平均):
c
o
s
t
(
M
S
E
)
=
1
n
∑
i
=
1
n
l
o
s
s
i
cost(MSE) = \frac{1}{n}\sum _{i=1}^{n}loss_i
cost(MSE)=n1i=1∑nlossi
权重(模型参数)的确定
穷举法
对权重进行穷举遍历采样,保存每一次穷举时的误差,找出误差 c o s t cost cost最小时对应的参数值
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 x * w
## 定义损失函数
def loss(x,y):
y_pred = forward(x)
return (y_pred - y)**2
w_list = []
mse_list = []
for w in np.arange(0.0,4.1,0.1): # 0--4.0 间隔0.1
print("w=",w)
loss_sum = 0
# 使用zip()函数将x_data和y_data拼接成(x,y)类型
for x_val, y_val in zip(x_data, y_data):
y_pred_val = forward(x_val)
loss_val = loss(x_val,y_val)
loss_sum += loss_val
print("MSE=",loss_sum/len(x_data))
w_list.append(w)
mse_list.append(loss_sum/len(x_data))
plt.plot(w_list,mse_list)
plt.ylabel("Loss")
plt.xlabel("w")
plt.show()
因此,最终可以确定,当 ω = 2.0 \omega = 2.0 ω=2.0 时,效果最好
模型训练阶段可视化常用工具 Visdom