一、线性模型
课程链接:Pytorch深度学习实践——线性模型
1、深度学习的步骤
-
DataSet:找到数据集
训练数据集:train dataset、验证数据集dev dataset(避免过拟合,提升泛化性能)、测试数据集:test dataset
-
Model:模型的选择和设计
-
Training:训练
-
Infering:推理
2、线性模型(Linear Model): y ^ = w ∗ x + b \hat{y}=w*x+b y^=w∗x+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(w∗x+b−y)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=N1∑n=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()