视频学习:2.线性模型_哔哩哔哩_bilibili
训练模型需要四步骤:准备数据集、模型选择、训练、应用推理。
数据集分为训练集和测试集。
一、线性模型
训练模型:y = x * w , 求权重w 为何值时得到与下图一致的直线
评估模型与数据集之间的误差:损失 (针对样本)
目标:寻找使损失最小的 w
对于整个训练集的损失(平均平方误差MSE):
-
穷举法计算损失
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] # 输出
# 定义一个前馈模型 y = x * w
def forward(x):
return x * w
# 定义损失函数
def loss(x,y):
y_pred = forward(x) #求 y
return ( y_pred - y ) * ( y_pred - y )
# 定义列表存储 权重w 和 对应权重的损失值mse
w_list = []
mse_list = []
for w in np.arange(0.0, 4.1, 0.1): # 生成从0-4步长为0.1的权重值
print ('w=', w )
l_sum = 0
for x_val, y_val in zip(x_data, y_data): # 将 x,y 的数值拼接成为一个元组 然后返回元组组成的列表
y_pre_val = forward(x_val) # 计算 y 的预测值
loss_val = loss(x_val, y_val) # 用内置的损失函数计算损失
l_sum += loss_val # 求和
print('\t', x_val, y_val, y_pre_val, loss_val)
print('MSE=', l_sum / 3) # 除以总数求 MSE
w_list.append(w) # 存储
mse_list.append(l_sum / 3)
# 绘图
plt.plot(w_list, mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show
-
Visdom 可视化工具包
对数据进行可视化时一个常用的工具
-
作业:实现线性模型(y=wx+b)并输出 loss 的 3D 图像
最后得到3D图像import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from pylab import * x_data = [1.0, 2.0, 3.0] # 输入 y_data = [2.0, 4.0, 6.0] # 输出 #定义一个前馈模型 yhead = x * w + b def forward(x): return x * w + b # 定义损失函数 def loss(x,y): y_pred = forward(x) #求 y return ( y_pred - y ) * ( y_pred - y ) # 构建数据 W=np.arange(0.0,4.1,0.1) B=np.arange(0.0,4.1,0.1) [w,b]=np.meshgrid(W,B) #基于向量 x 和 y 中包含的坐标返回二维网格坐标。w,b都是矩阵 # 计算 l_sum = 0 for x_val, y_val in zip(x_data, y_data): # 将 x,y 的数值拼接成为一个元组 然后返回元组组成的列表 y_pre_val = forward(x_val) # 计算 y 的预测值 loss_val = loss(x_val, y_val) # 用内置的损失函数计算损失 l_sum += loss_val # 求和 #绘制3D图 fig=plt.figure() # 创建画布 ax=Axes3D(fig) # 创建了一个 Axes3D 的子图放到 figure 画布里 ax.plot_surface(w,b,l_sum/3) # 绘制3D曲面 #显示各坐标轴的值 ax.set_xlabel("W") ax.set_ylabel("B") ax.set_zlabel("MSE") plt.show()