ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

刘二大人深度学习实践笔记--线性模型(Linear Model)

刘二大人深度学习实践笔记--线性模型(Linear Model) 深度学习的基本流程1、准备数据集 2、对模型进行训练 3、根据训练好的模型预测结果1、数据集x是输入y是输出这种确定y的叫做监督学习supervised learning数据集要分为训练集和测试集测试集通常只能看到x由于训练集无法完全模拟真实的全部数据有可能发生过拟合所以我们希望模型有较好的泛化能力为了让模型有较好的泛化能力在比赛中可以采用一种策略将训练集再分成两部分有一部分用于检验模型训练的效果叫做开放集2、模型设计· 什么样的模型最适合数据集· 试试线性模型可以吗训练要解决的问题就是求出w和b的值对于表格中这个数据集简化一下假设线性模型为y_hat x*w求w机器学习中一般开始取一个随机值 w random value要找一种评估模型evaluate model来评估当前线性模型和真实情况的误差有多大这个评估模型就叫做 lossloss取切平方目标找到一个w使平均损失降到最低由于loss是取平方一定是大于等于0的所以能找到等于0的w就证明达到最优了现实中很难等于0越接近0越好MSE平均平方误差也就是所有样本的平均损失该怎么确定把哪些值作为权重的候选值呢穷举法把一定范围内所有可能值都计算损失最低点就是最优的代码如下import numpy as np import matplotlib.pyplot as plt #对数据集保存x为输入y为输出对应位置为一组 x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] # 定义模型前馈网络 y_hat x * w def forward(x): return x*w # 定义损失函数 def loss(x, y): y_pred forward(x) # 计算y_hat return (y_pred - y)*(y_pred - y) # 要计算很多权重用两个列表存储每个权重和对应的损失值 w_list [] mse_list [] for w in np.arange(0.0, 4.1, 0.1): print(w,w) l_sum 0 for x_val, y_val in zip(x_data, y_data): y_pred_val forward(x_val) loss_val loss(x_val, y_val) l_sum loss_val print(\t, x_val, y_val, y_pred_val, loss_val) print(MSE, l_sum/3) w_list.append(w) mse_list.append(l_sum/3) plt.plot(w_list, mse_list, color g) plt.ylabel(Loss) plt.xlabel(w) plt.show() # 实际情况中一般不用w做横坐标而是用epoc轮次一般在训练集上loss会不断降低在开放集上loss会先降低再增加一般要找的就是这个最低点换一个模型 y x*w bimport numpy as np import matplotlib.pyplot as plt #模拟 y 2.5x3 x_data [1.0, 2.0, 3.0] y_data [5.5, 8, 10.5] # 定义模型 def forward(x): return x*wb # 定义损失函数 def loss(x, y): y_pred forward(x) return (y_pred - y)*(y_pred - y) w_list [] b_list [] mse_list [] for w in np.arange(0.0, 4.1, 0.5): m_row [] for b in np.arange(2.0, 4.5, 0.5): l_sum 0 for x_val,y_val in zip(x_data, y_data): l_sum loss(x_val, y_val) mse l_sum/len(x_data) m_row.append(mse) #print(w,w,end ) #print(b,b,end ) #print(mse, l_sum/3) w_list.append(w) mse_list.append(m_row) b_list list(np.arange(2.0, 4.5, 0.5)) mse_array np.array(mse_list) print(mse_array.shape) fig plt.figure() ax plt.axes(projection3d) plt.close(all) W,B np.meshgrid(w_list,b_list) Z mse_array.T # 绘制曲面 print(fW.shape: {W.shape}, B.shape: {B.shape}, Z.shape: {Z.shape}) surf ax.plot_surface(W, B, Z, cmaprainbow, # 颜色映射 linewidth0, # 去掉网格线 alpha0.9, # 透明度 antialiasedTrue) # 抗锯齿 # 设置坐标轴标签 ax.set_xlabel(Weight (w), fontsize12, labelpad10) ax.set_ylabel(Bias (b), fontsize12, labelpad10) ax.set_zlabel(MSE Loss, fontsize12, labelpad10) ax.set_title( (y w*x b), fontsize14) fig
返回列表