深度学习(多层数据集的处理)

        最近刚接触的深度学习,直接就被迷“五迷三道”,就当笔记来整理一下基础模型的构造,也方便之后的学习(幸亏之前有点算法基础,高数还算的过去,真的一开始就和听天书一样)。

        只是基础的模型处理,有一定的参考价值

import torchvision
from torchvision.transforms import ToTensor
import torch
import matplotlib.pyplot as plt
import numpy as np
from torch import nn
#本人用的MNIST进行的模拟
train_ds = torchvision.datasets.MNIST('data',
                                      train=True,#进行测试的数据
                                      transform=ToTensor(),#转换成这个格式
                                      download=True)
test_ds = torchvision.datasets.MNIST('data',
                                      train=False,
                                      transform=ToTensor(),

#内置数据集中提供了torch.utils.data.DataLoader转换数据类型                                      
train_dl = torch.utils.data.DataLoader(train_ds, 
                                       batch_size=64,#进行小批次训练
                                       shuffle=True)#乱序才能够保证数据的更加准确
test_dl = torch.utils.data.DataLoader(test_ds, 
                                       batch_size=64)#检测数据不需要过多的进行分析与处理,减少计算的次数
class Model(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear_1 = nn.Linear(28*28, 120)
        self.linear_2 = nn.Linear(120, 84)
        self.linear_3 = nn.Linear(84, 10)
    def forward(self, input):
        x = input.view(-1, 1*28*28)
        x = torch.relu(self.linear_1(x))
        x = torch.relu(self.linear_2(x))#relu激活函数,自己去查是啥样的
        logits = self.linear_3(x)#直接返回了,没有激活
        return logits    # 未激活的输出,叫做logits
# 定义损失函数
loss_fn = torch.nn.CrossEntropyLoss()#因为没有激活,所以使用了交叉熵计算

#优化器
opt = torch.optim.SGD(model.parameters(), lr=0.001)#SGD是随机梯度下降

#cpu的预处理
device = 'cuda' if torch.cuda.is_available() else 'cpu'

#实例化对象
model = Model().to(device)   # 初始化模型   # 初始化模型(这样会比直接初始化模型更好)
#两个函数,训练函数,以及测试函数
def train(dl,model,loss_fn,optimizer):#dl所有数据进行处理,model模型,loss损失,op是优化器
    size=len(dl.dataset)#先将数据进行转换求个数
    num_batches=len(dl)#一共有多少层数
    train_loss,correct=0,0
    for x,y in dl:
        x,y=x.to(device),y.to(device)
        pred=model(x)
        loss=loss_fn(pred,y)#计算损失函数
        optimizer.zero_grad()#梯度重新为0
        loss.backward()#反向计算
        optimizer.step()#更新权重
        with torch.no_grad():
            correct += (pred.argmax(1) == y).type(torch.float).sum().item()#求总的正确率v
            train_loss += loss.item()
    correct/=size#计算现有的正确性
    train_loss/=num_batches#平均的误差值
    return correct,train_loss
# 测试函数
def test(test_dl, model, loss_fn):
    size = len(test_dl.dataset)    
    num_batches = len(test_dl)
    test_loss, correct = 0, 0
    with torch.no_grad():
        for x, y in test_dl:
            x, y = x.to(device), y.to(device)
            pred = model(x)
            loss = loss_fn(pred, y)
            #测试函数不需要重置
            test_loss += loss.item()
            correct += (pred.argmax(1) == y).type(torch.float).sum().item()
        correct /= size
        test_loss /= num_batches
        return correct, test_loss#返回了还是两个参数,一个是在准确率,一个是平均误差

#最重要的函数来了,考验cpu的时刻
#fit进行训练的函数
def fit(epochs,train_dl,test_dl,model,opt):#epochs训练的次数
    train_loss = []
    train_acc = []
    test_loss = []
    test_acc = []
    for epoch in range(epochs):
        epoch_acc, epoch_loss = train(train_dl, model, loss_fn, opt)#训练的的数据集
        epoch_test_acc, epoch_test_loss = test(test_dl, model, loss_fn)#测试的数据集
        train_acc.append(epoch_acc)#将元素添加进列表里面去,这是正确率
        train_loss.append(epoch_loss)#这是平均损失
        test_acc.append(epoch_test_acc)
        test_loss.append(epoch_test_loss)
    
        template = ("epoch:{:2d}, train_Loss:{:.5f}, train_acc:{:.1f},test_Loss:{:.5f}, test_acc:{:.1f}")
    
        print(template.format(epoch, epoch_loss, epoch_acc*100, epoch_test_loss, epoch_test_acc*100))
    print('结束')
    return train_loss,train_acc,test_loss,test_acc

#使用fit函数
(train_loss,train_acc,test_loss,test_acc)=fit(100,train_dl,test_dl,model,opt)
#然后就是画图观察数据了(这里其实看模拟出来的数据也是可以看出来的,画图的话就可以更直接的看出来,主要是为了防止过拟合的现象出现)
#误差的函数
epochs=100
plt.plot(range(epochs), train_loss, label='train_loss')
plt.plot(range(epochs), test_loss, label='test_loss')
plt.legend()
#准确率的函数
plt.plot(range(epochs), train_acc, label='train_acc')
plt.plot(range(epochs), test_acc, label='test_acc')
plt.legend()
#如果发生了过拟合现象就要及时处理激活函数,误差函数,以及优化器

改内容借鉴于日月光华。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip深度学习的资料合集(迁移学习、卷积神经网络、多层感知器).zip 【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!
深度学习是一种非常强大的技术,可以在处理表格数据时起到重要的作用。在python中,我们可以使用各种框架和库来应用深度学习技术,例如tensorflow、pytorch等。 在处理表格数据时,我们需要首先准备数据。数据准备包括数据的收集、清理、转换、划分和归一化等过程。在数据准备完成后,我们需要将数据划分成训练集和测试集,以便评估模型的性能。 接下来我们使用python中的深度学习框架来构建模型。模型的构建包括模型的选择、参数的设置和网络结构的搭建等过程。我们可以选择适合表格数据的模型结构,例如多层感知器(MLP)或卷积神经网络(CNN)等。同时,我们根据数据的特点来设置不同的模型参数,例如学习率、优化器和正则化等。 构建好模型后,我们需要对模型进行训练。训练模型包括数据的输入、前向计算、反向传播、参数更新等过程。在训练过程中,我们需要监控模型的性能,并不断调整模型的参数以提高性能。 最后,我们需要对模型进行测试以验证其性能。在测试过程中,我们需要使用测试集来评估模型的准确率、召回率、F1值等指标。如果模型的性能不够理想,我们需要回过头来重新调整模型的参数和结构,不断迭代优化,直到获得满意的结果。 综上所述,深度学习可以很好地处理表格数据,提高数据处理和分析的效率和准确性。使用python中的各种工具和技术来应用深度学习来解决实际问题,将能够为我们带来巨大的收益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

钟一淼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值