🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏:pytorch深度学习
🎀CSDN主页 发狂的小花
🌄人生秘诀:学习的本质就是极致重复!
《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili
目录
1 深度学习
2 Linear Model
3 代码
1 深度学习
监督学习(supervised learning):打标签的数据
无监督学习:无标注数据,模型自己去学习数据的特征,输出参数,然后推理输出
2 Linear Model
线性模型:线性回归
(1)给定x为学习时间,y为最终输出的绩点,这些训练数据
利用数据建立模型、前向传播、建立loss,求的loss在满足精度下的线性模型的参数weights,bias,然后将待推理的数据带入模型中,得到推理结果
(2)数据集
- 训练集(Training Set):训练模型
- 训练集使用多次
- 确定模型权重(weights)、偏置(bias)等学习参数
- 训练出模型
- 验证集(Validation Set):验证模型性能,手动调参多次可能只代表一部分非训练集,导致模型泛化能力不够
- 验证集使用多次
- 调整并选择模型参数和超参数
- 选择模型(验证模型性能)
- 测试集(Test Set):评估模型性能的数据集
- 不参与学习参数过程、也不参与超参数选择过程
- 测试集仅使用一次,完全独立、测试集未参与过训练或者验证
- 评价最终的模型
- 交叉验证
- 将数据集单纯划分为训练集、验证集和测试集时,并不是所有数据都参与了训练,存在数据信息利用不全的弊端,由于验证集只代表一部分非训练数据集,导致最终训练好的模型测试时的泛化能力并不好,所以为了保证泛化误差的稳定性,得到理想的模型,可以使用交叉验证
- K折验证法
1.将数据集分为训练集和测试集,测试集放在一边。
2.将训练集分为 k 份,每次使用 k 份中的1 份作为验证集,其他全部作为训练集。
3.通过 k 次训练后,得到了 k 个不同的模型。
4.评估 k 个模型的效果,从中挑选效果最好的超参数。
5.使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终所需模型,最后再到测试集上测试。
-
- 参数和超参数
- 模型参数: 参数属于模型内部的配置变量,它们通常在建模过程自动学习得出。如:线性回归或逻辑回归中的系数、支持向量机中的支持向量、神经网络中的权重、偏置
- 超参数属于模型外部的配置变量,他们通常由研究员根据自身建模经验手动设定。如学习速率,迭代次数,层数、K近邻中的K值
- 参数和超参数
训练集、验证集和测试集_训练集 测试集 验证集-CSDN博客
(3)Linear Model(Linear Regression)
(4)Linear Regression 步骤
- 数据集准备:训练集、测试集、验证集
- 建立模型:简单的线性模型、做前向传播,求出预测值
- 计算损失函数(loss):平方差
- 计算代价函数:MSE,均方差Mean Square Error
- 损失loss和 模型参数的关系图(这里只有w)
3 代码
import numpy as np
import matplotlib.pyplot as plt
# y = 2 * x ,dataset
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# model y = x * w,w is weight
def forward(x,w):
return x*w
# loss
def loss(x, y,w):
y_pred = forward(x,w)
return (y_pred - y)**2
# 穷举法
w_list = []
mse_list = []
# iteration times
iteration = 0
# mean square error
MSE = -1
for w in np.arange(0.0, 4.1, 0.1):
iteration = iteration+1
print("w=", w)
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
# model to train
y_pred_val = forward(x_val,w)
loss_val = loss(x_val, y_val,w)
l_sum += loss_val
print('\t', x_val, y_val, y_pred_val, loss_val)
MSE = l_sum/3
print('MSE=', MSE)
w_list.append(w)
mse_list.append(MSE)
if (MSE < 1e-5):
print('iteration: ',iteration,'loss: ',MSE,'weight:',w)
break
plt.plot(w_list,mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
# plt.show()
plt.savefig('./data/loss_w.png')
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 这里设函数为y=3x+5
x_data = np.array([1.0, 2.0, 3.0])
y_data = np.array([8.0, 11.0, 14.0])
def forward(x, w, b):
return x * w + b
def loss(x, y, w, b):
y_pred = forward(x, w, b)
return (y_pred - y) ** 2
W = np.arange(0.0, 5.1, 0.1)
B = np.arange(0.0, 5.1, 0.1)
w, b = np.meshgrid(W, B)
MSE = -1
iteration = 0
loss_values = np.zeros_like(w)
for i in range(len(W)):
for j in range(len(B)):
iteration = iteration +1
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
loss_val = loss(x_val, y_val, W[i], B[j])
l_sum += loss_val
loss_values[i, j] = l_sum / 3
MSE = l_sum / 3
if (MSE < 1e-5):
print('iteration: ',iteration,'loss: ',MSE,'weight:',W[i],'b: ',B[j])
# break
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(w, b, loss_values, cmap='viridis')
ax.set_xlabel('w')
ax.set_ylabel('b')
ax.set_zlabel('Loss')
plt.show()
plt.savefig('./data/loss_w_b.png')
🌈我的分享也就到此结束啦🌈
如果我的分享也能对你有帮助,那就太好了!
若有不足,还请大家多多指正,我们一起学习交流!
📢未来的富豪们:点赞👍→收藏⭐→关注🔍,如果能评论下就太惊喜了!
感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!欢迎关注、关注!