<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Pytorch實戰學習(四):加載數據集

      《PyTorch深度學習實踐》完結合集_嗶哩嗶哩_bilibili

      Dataset & Dataloader

       

      1、Dataset & Dataloader作用

      ※Dataset—加載數據集,用索引的方式取數

      ※DataLoader—Mini-Batch

      通過獲得DataSet的索引以及數據集大小,來自動得生成小批量訓練集

      DataLoader先對數據集進行Shuffle,再將數據集按照Batch_Size的長度劃分為小的Batch,并按照Iterations進行加載,以方便通過循環對每個Batch進行操作

      Shuffle=True:隨機打亂順序

       

       

       

       

      2、Mini-Batch

      利用Mini-Batch均衡訓練性能和時間

      在外層循環中,每一層是一個epoch(訓練周期),在內層循環中,每一次是一個Mini-Batch(Batch的迭代)

      for epoch in range(training_epochs):
          for i in range(total_batch):

       

      3、相關術語

      ※Epoch:所有樣本都參與了一次訓練

      ※Batch-size:進行一次訓練(前饋、反饋、更新)的樣本數

      ※Iteration:有多少個Batch,每次

      Epoch = Batch-size * Iteration

       

       

       

       4、代碼部分

      在構造數據集時,兩種對數據加載到內存中的處理方式如下:

      ①加載所有數據到dataset,每次使用getitem()讀索引,適用于數據量小的情況

      ②只對dataset進行初始化,僅存文件名到列表,每次使用時再通過索引到內存中去讀取,適用于數據量大(圖像、語音…)的情況

       

      import torch
      import numpy as np
      ## Dataset為抽象類,不能被實例化,只能被其他子類繼承
      from torch.utils.data import Dataset
      ## 實例化DataLoader,用于加載數據
      from torch.utils.data import DataLoader
      
      
      ## Prepare Data
      class DiabetesDataset(Dataset):
          def __init__(self, filepath):
              xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32)
              ## 獲取數據集長度
              self.len = xy.shape[0]
              self.x_data = torch.from_numpy(xy[:, :-1])
              self.y_data = torch.from_numpy(xy[:, [-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')
      
      ##num_workers多線程
      train_loader = DataLoader(dataset = dataset,
                                batch_size = 32,
                                shuffle = True,
                                num_workers = 0)
      
      ##Design Model
      
      ##構造類,繼承torch.nn.Module類
      class Model(torch.nn.Module):
          ## 構造函數,初始化對象
          def __init__(self):
              ##super調用父類
              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.sigmoid = 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))
              return x
      
      model = Model()
      
      
      ##Construct Loss and Optimizer
      
      ##損失函數,傳入y和y_pred,size_average--是否取平均
      criterion = torch.nn.BCELoss(size_average = True)
      
      ##優化器,model.parameters()找出模型所有的參數,Lr--學習率
      optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
      
      
      
      ## Training cycle
      ## windows環境下DataLoader的num_workers設置為多線程,需要將主程序(對數據操作的程序)封裝到函數中
      if __name__ =='__main__':
          for epoch in range(100):
               #enumerate:可獲得當前迭代的次數
              for i, data in enumerate(train_loader, 0):
                  ## 準備數據
                  inputs, lables = data
                  ##前向傳播
                  y_pred = model(inputs)
                  loss = criterion(y_pred, lables)
                  print(epoch, i, loss.item())
                  
                  ##梯度歸零
                  optimizer.zero_grad()
                  ##反向傳播
                  loss.backward()
                  ##更新
                  optimizer.step()

       

       !!兩個問題??!

      ①DataLoader的參數num_workers設置 >0

      在windows中利用多線程讀取,需要將主程序(對數據操作的程序)封裝到函數中

      ## Training cycle
      ## windows環境下DataLoader的num_workers設置為多線程,需要將主程序(對數據操作的程序)封裝到函數中
      if __name__ =='__main__':
          for epoch in range(100):
               #enumerate:可獲得當前迭代的次數
              for i, data in enumerate(train_loader, 0):

      但是運行還是報錯,只能把num_workers = 0

       

      ②運行結果:損失不會一直下降,改小了學習率也不行

       

      posted @ 2021-08-03 11:13  kuluma  閱讀(462)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲欧美综合人成在线| 日韩美女一区二区三区视频| 国产午夜福利在线观看播放| 国产美女自慰在线观看| 亚洲AV国产福利精品在现观看| 日本一区二区不卡精品| 天堂中文8资源在线8| 强奷乱码中文字幕| 国产精品自在拍在线播放| 精品国产一区二区三区av性色| 国产色a在线观看| 一个人免费观看WWW在线视频| 亚洲午夜香蕉久久精品| 久久婷婷丁香五月综合五| 国产片av在线观看国语| 中文字幕国产日韩精品| 国产精品大片中文字幕| 亚洲AV成人片在线观看| 五月综合激情婷婷六月| 日韩人妻不卡一区二区三区| 色视频在线观看免费视频| 天气| 亚洲成a人无码av波多野| 日韩在线观看精品亚洲| 丰满少妇高潮在线播放不卡| 国内久久人妻风流av免费| 亚洲精品香蕉一区二区| 久久综合亚洲色一区二区三区| 亚洲人成网站77777在线观看| 亚洲精品无码高潮喷水A| 老司机午夜精品视频资源| 无码中文字幕人妻在线一区二区三区| 久久熟女| 日韩中文字幕V亚洲中文字幕| 日本伊人色综合网| 无码中文字幕人妻在线一区| 国产成人精选视频在线观看不卡 | 国产婷婷精品av在线| 国产情侣激情在线对白| 亚洲成aⅴ人在线电影| 无码内射中文字幕岛国片 |