torch学习笔记——利用DataSet和DataLoader加载数据集

目录

一:背景

二:准备数据集

        1:初始化Dataset

        2:定义getitem函数

        3:Dataloader的配置

三:构造模型

四:循环搭建

 五:整体代码


一:背景

        为什么不用上一篇笔记中所用到的np.txtload()直接加载,是因为1、简化计算量,DataLoader中可以将整个batch分解为mini-bach(因为minibatch)的出现,引出了iteration来并行计算(利用CPU、GPU);2、DataSet可以将数据集中的元素按照索引取出。

        整体思路:①准备数据集②构造模型③损失函数与优化器的选择④训练周期的设定

二:准备数据集

        还是利用上一篇的糖尿病数据集。这个阶段我们需要定义Dataset和Dataloader

        1:初始化Dataset

                

    def __init__(self,filepath):
        z = np.loadtxt(filepath,dtype=np.float32,delimiter=',')
        self.x_data = torch.from_numpy(z[:,:-1])
        self.y_data = torch.from_numpy(z[:,[-1]])
        self.len = z.shape[0]

                self.len的目的是为了可以知道数据集的个数(759条数据)

        2:定义getitem函数

                目的:可以将数据集其中的一条信息按照索引取出

    def __getitem__(self, item):
        return self.x_data[item],self.y_data[item]

        3:Dataloader的配置

dataset1 = dataset('diabetes.csv')
dataloader = DataLoader(dataset=dataset1,batch_size=32,shuffle=True,num_workers=2)

                DataLoader的参数:

                        dataset = :使用哪个数据集

                        batch_size=:将数据集拆成一组多少个进行训练

                        shuffle=:是否需要打乱数据

                        num_workers=:几个mini_batch并行计算,一般<=你的电脑cpu数目

三:构造模型

        与上一篇一样

class Model(torch.nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear1 = torch.nn.Linear(8,6)
        self.linear2 = torch.nn.Linear(6,4)
        self.linear3 = torch.nn.Linear(4,1)
        self.activate = torch.nn.Sigmoid()
    def forward(self,x):
        x = self.activate(self.linear1(x))
        x = self.activate(self.linear2(x))
        x = self.activate(self.linear3(x))
        return x
model = Model()
loss = torch.nn.BCELoss(reduction='mean')
optim = torch.optim.SGD(model.parameters(),lr=0.01)

四:循环搭建

        因为引入了mini-batch所以在epoch循环的架构里还要嵌套每一个mini-batch的训练

if __name__ == '__main__':
    for epoch in range(1000):
        for i,data in enumerate(dataloader,0):
            input,result = data
            print(epoch,i,data)

     ①:第一行代码是因为windows和linux环境的接口不一样

     ②:引入iteration,data来在循环中记录小循环次数(多少次能跑完一个epoch)和datal用来存储每个mini-batch

对于enumerate(a,b)函数,a表示遍历谁,b表示起始位置,enumerate函数可以遍历多个目标

 五:整体代码

import numpy as np
import torch
import matplotlib.pyplot as plt
from torch.utils.data import Dataset
from torch.utils.data import DataLoader

class dataset(Dataset):
    def __init__(self,filepath):
        z = np.loadtxt(filepath,dtype=np.float32,delimiter=',')
        self.x_data = torch.from_numpy(z[:,:-1])
        self.y_data = torch.from_numpy(z[:,[-1]])
        self.len = z.shape[0]

    def __len__(self):
        return self.len
    def __getitem__(self, item):
        return self.x_data[item],self.y_data[item]
dataset1 = dataset('diabetes.csv')
dataloader = DataLoader(dataset=dataset1,batch_size=32,shuffle=True,num_workers=3)
class Model(torch.nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear1 = torch.nn.Linear(8,6)
        self.linear2 = torch.nn.Linear(6,4)
        self.linear3 = torch.nn.Linear(4,1)
        self.activate = torch.nn.Sigmoid()
    def forward(self,x):
        x = self.activate(self.linear1(x))
        x = self.activate(self.linear2(x))
        x = self.activate(self.linear3(x))
        return x
model = Model()
loss = torch.nn.BCELoss(reduction='mean')
optim = torch.optim.SGD(model.parameters(),lr=0.01)
x_list = []
y_list = []
if __name__ == '__main__':
    for epoch in range(1000):
        for i,data in enumerate(dataloader,0):
            input,result = data
            y_pred = model(input)
            loss1 = loss(y_pred,result)
            print(epoch,i,loss1.item())
            optim.zero_grad()
            loss1.backward()
            optim.step()

 问题

如何加入测试数据,和将整体过程可视化

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
音频文件并将其转换为图像文件需要经过以下几个步骤: 1. 使用音频处理库(如librosa)音频文件并读取其数据。 2. 对音频数据进行预处理,例如进行STFT(短时傅里叶变换)将音频数据转换为频谱图。 3. 将预处理后的数据保存为图像文件。 下面是一个示例代码,演示如何使用torch.utils.data.dataloader音频文件并将其转换为图像文件: ```python import torch import librosa import numpy as np from PIL import Image from torch.utils.data import DataLoader, Dataset class AudioImageDataset(Dataset): def __init__(self, audio_files): self.audio_files = audio_files def __len__(self): return len(self.audio_files) def __getitem__(self, idx): # Load audio file audio, sr = librosa.load(self.audio_files[idx], sr=16000) # Preprocess audio data spec = np.abs(librosa.stft(audio, hop_length=512, n_fft=2048)) # Convert to image img = Image.fromarray(spec) # Return image tensor return torch.from_numpy(np.array(img)).unsqueeze(0) # Test the dataset dataset = AudioImageDataset(['audio1.wav', 'audio2.wav']) dataloader = DataLoader(dataset, batch_size=1) for i, batch in enumerate(dataloader): print(batch.shape) # (1, 1025, 32) ``` 在这个示例中,我们使用librosa库来音频文件并读取其数据。然后,我们对音频数据进行预处理,使用短时傅里叶变换将音频数据转换为频谱图。最后,我们将频谱图转换为图像并返回图像的PyTorch张量表示。最终,我们可以使用torch.utils.data.dataloader数据到内存中,并可以对其进行批处理和其他操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值