卷积神经网络08(数据及加载)

43 篇文章 3 订阅
18 篇文章 1 订阅

Batch-Size
在这里插入图片描述
所有样本都参与训练称为一个epoch
每次训练用的样本数量叫做batch-size
迭代

数据及进行打乱(shuffle)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Dataset是一个抽象类,是不能直接实例化的
而DataLoader是可以直接实例化的
在这里插入图片描述
在这里插入图片描述
用到的loader函数,需要改写成,在0.4版本下会出现这样的问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还是4步,准备数据集,设计模型,建立模型和优化,训练
在这里插入图片描述
例如minist数据集
在这里插入图片描述

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

class DiabetesDataset(Dataset):
    def __init__(self,filepath):
        xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32)  # delimiter分割 dtype=np.float32一般都使用32位的浮点数
        self.len = xy.shape[0]  #可以取得输入的个数
        self.x_data = torch.from_numpy(xy[:, :-1])
        self.y_data = torch.from_numpy(xy[:, [-1]])  # [-1]拿出来的是一个矩阵而不是向量,要保证在计算的时候是矩阵

    def __getitem__(self, index):   #魔方函数
        return self.x_data[index],self.y_data[index]  #返回元祖类型,分开,便于后面使用和处理

    def __len__(self):  #可以返回数据(数据的数量拿出来)
        return self.len

dataset = DiabetesDataset('diabetes.csv.gz')

train_loader = DataLoader(
    dataset = dataset,  # 数据集
    batch_size= 32, # 小批量大小
    shuffle=True, # 打乱
    num_workers=2 # 是否需要多进程
)


class Model(torch.nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        self.linear1 = torch.nn.Linear(8,7)
        self.linear2 = torch.nn.Linear(7,6)
        self.linear3 = torch.nn.Linear(6,5)
        self.linear4 = torch.nn.Linear(5,4)
        self.linear5 = torch.nn.Linear(4,3)
        self.linear6 = torch.nn.Linear(3,2)
        self.linear7 = torch.nn.Linear(2,1)
        self.sigmoid = torch.nn.Sigmoid()  # nn下的sigmoid pytorch激活函数很多,可以都试试,例如:rule...torch.nn.Rule() //取值0-1
        # self.activate = torch.nn.Sigmoid()

    def forward(self,x):
        # x = self.sigmoid(self.linear1(x))
        # x = self.sigmoid(self.linear2(x))
        # x = self.sigmoid(self.linear3(x))
        x = self.sigmoid(self.linear1(x))
        x = self.sigmoid(self.linear2(x))
        x = self.sigmoid(self.linear3(x))
        x = self.sigmoid(self.linear4(x))
        x = self.sigmoid(self.linear5(x))
        x = self.sigmoid(self.linear6(x))
        x = self.sigmoid(self.linear7(x))
        return x



model = Model()

# 损失函数和优化器
criterion = torch.nn.BCELoss(reduction='sum')

optimizer = torch.optim.SGD(model.parameters(),lr = 0.01)

epoch_l = []
loss_l = []

if __name__ == '__main__':
# data是从上面拿到的(x,y) return self.x_data[index],self.y_data[index] ,从数据集中拿出
    for epoch in range(20):
        for i,data, in enumerate(train_loader,0):  # 0是下标从0开始计数
            # 1 prepare data
            inputs, labels = data  # data是x,y元组

            # 2 Forward
            y_pred = model(inputs)
            loss = criterion(y_pred,labels)
            print(epoch,i,loss.item())

            # 3 Backward
            optimizer.zero_grad()
            loss.backward()

            # 4 updata
            optimizer.step()
        epoch_l.append(epoch)
        loss_l.append(loss.item())

    plt.plot(epoch_l,loss_l,c='r')
    plt.show()


不知道跑出来是个什么鬼,哈哈哈,你们自己试试吧,这个是在上一篇博文上扩展的一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值