Pytorch深度学习实践笔记2(b站刘二大人)

🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏: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')

🌈我的分享也就到此结束啦🌈
如果我的分享也能对你有帮助,那就太好了!
若有不足,还请大家多多指正,我们一起学习交流!
📢未来的富豪们:点赞👍→收藏⭐→关注🔍,如果能评论下就太惊喜了!
感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!欢迎关注、关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发狂的小花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值