1. 程式人生 > >PyTorch筆記6-mini batch

PyTorch筆記6-mini batch

概要

Torch 中提供了一種整理資料結構的好東西,叫做 DataLoader,可以用來包裝自己的資料,進行批訓練,而且批訓練可以有多種途徑

import torch
import torch.utils.data as Data

torch.manual_seed(1)     # reproducible
<torch._C.Generator at 0x106f673d8>

DataLoader

DataLoader 是 Torch 用來包裝資料的工具,如將 numpy array 等資料形式轉成 Tensor,然後放進該包裝器中。使用 DataLoader 可以有效迭代資料。
Data loader. Combines a dataset and a sampler, and provides single- or multi-process iterators over the dataset.

參見
下面演示

MINIBATCH_SIZE = 5    # mini batch size
x = torch.linspace(1, 10, 10)  # torch tensor
y = torch.linspace(10, 1, 10)

# first transform the data to dataset can be processed by torch
torch_dataset = Data.TensorDataset(data_tensor=x, target_tensor=y)
# put the dataset into DataLoader
loader = Data.DataLoader(
    dataset=torch_dataset,
    batch_size=MINIBATCH_SIZE,
    shuffle=True
, num_workers=2 # set multi-work num read data ) for epoch in range(3): # 1 epoch go the whole data for step, (batch_x, batch_y) in enumerate(loader): # here to train your model print('\n\n epoch: ', epoch, '| step: ', step, '| batch x: ', batch_x.numpy(), '| batch_y: '
, batch_y.numpy())
 epoch:  0 | step:  0 | batch x:  [  4.   2.  10.   7.   3.] | batch_y:  [ 7.  9.  1.  4.  8.]


 epoch:  0 | step:  1 | batch x:  [ 1.  8.  6.  9.  5.] | batch_y:  [ 10.   3.   5.   2.   6.]


 epoch:  1 | step:  0 | batch x:  [ 10.   2.   7.   3.   4.] | batch_y:  [ 1.  9.  4.  8.  7.]


 epoch:  1 | step:  1 | batch x:  [ 5.  6.  9.  1.  8.] | batch_y:  [  6.   5.   2.  10.   3.]


 epoch:  2 | step:  0 | batch x:  [  7.   1.   4.   3.  10.] | batch_y:  [  4.  10.   7.   8.   1.]


 epoch:  2 | step:  1 | batch x:  [ 5.  8.  2.  6.  9.] | batch_y:  [ 6.  3.  9.  5.  2.]

可以看出,每個 step 取出 MINIBATCH_SIZE(這裡為5)個數據進行處理,而且每次 epoch 都是不一樣的,可知資料進行了 shuffle

資料經過 mini-batch 後,比每次迭代只訓練一個樣本要快,因為這樣可以利用 CPU 或 GPU 進行平行計算來 speed up,同時也比每次迭代全體樣本要好,因為如果一次迭代全體樣本來訓練的話,那麼每次迭代只能進行一次 forward propagation 和 backword propagation,會比較耗時,特別是對於資料量比較大時,會更糟糕

如果資料不能被 MINIBATCH_SIZE 整除會怎樣呢?最後的 step 返回剩餘的就好了,下面演示說明

MINIBATCH_SIZE = 8
# put the dataset into DataLoader
loader = Data.DataLoader(
    dataset=torch_dataset,
    batch_size=MINIBATCH_SIZE,
    shuffle=True,
    num_workers=2           # set multi-work num read data
)

for epoch in range(3):
    for step, (batch_x, batch_y) in enumerate(loader):
        print('\n\n epoch: ', epoch, '| step: ', step, '| batch x: ', batch_x.numpy(), '| batch y: ', batch_y.numpy())
 epoch:  0 | step:  0 | batch x:  [ 9.  1.  3.  8.  6.  7.  4.  2.] | batch y:  [  2.  10.   8.   3.   5.   4.   7.   9.]


 epoch:  0 | step:  1 | batch x:  [ 10.   5.] | batch y:  [ 1.  6.]


 epoch:  1 | step:  0 | batch x:  [  7.   1.   8.   3.   9.   2.   5.  10.] | batch y:  [  4.  10.   3.   8.   2.   9.   6.   1.]


 epoch:  1 | step:  1 | batch x:  [ 4.  6.] | batch y:  [ 7.  5.]


 epoch:  2 | step:  0 | batch x:  [  3.   1.   9.   6.   5.   7.  10.   2.] | batch y:  [  8.  10.   2.   5.   6.   4.   1.   9.]


 epoch:  2 | step:  1 | batch x:  [ 4.  8.] | batch y:  [ 7.  3.]

相關推薦

PyTorch筆記6-mini batch

概要 Torch 中提供了一種整理資料結構的好東西,叫做 DataLoader,可以用來包裝自己的資料,進行批訓練,而且批訓練可以有多種途徑 import torch import torch.utils.data as Data torch.

【學習筆記】Hands-on ML with sklearn&tensorflow [TF] [2]placeholder nodes實現mini-batch

為了實現mini-batch,需要一種節點,在每次迭代使用一個新的batch,可以用placeholder node實現這個功能。 >>>A = placeholder(tf.float32, shape=(None, 3)) >>>B = A + 5 #這裡

pytorch筆記-batch

在學習莫煩大神的pytorch視訊的batch部分,由於pytorch版本更新,產生了一些不相容的情況。原始碼如下: import torch import torch.utils.data as Data torch.manual_seed(1) # 設定隨機

吳恩達深度學習筆記(39)-更進一步理解mini-batch梯度下降法

理解mini-batch梯度下降法(Understanding mini-batch gradient descent) 在上一個筆記中,你知道了如何利用mini-batch梯度下降法來開始處理訓練集和開始梯度下降,即使你只處理了部分訓練集,即使你是第一次處理,本筆記中,我們將進一步學習

pytorch手動實現梯度下降法,隨機梯度法--基於logistic Regression並探索Mini batch作用

簡述 基於這次凸優化的大專案作業。 下面會圍繞著通過logistic Regression來做MNIST集上的手寫數字識別~ 以此來探索logistic Regression,梯度下降法,隨機梯度法,以及Mini batch的作用。 核心任務是實現梯度下降法和隨機梯度法。但是其他

PyTorch筆記9-Batch Normalization

概要 我們知道 normalize input(歸一化輸入)可以加速神經網路的訓練,那我們是否可以 normalize activation function 並 speed up 網路訓練呢,這就是 Batch Normalization(B

C++筆記(6):標準模板庫STL:容器、叠代器和算法

strong 並且 pty 優先級隊列 決定 image left sig 樹結構 STL(Standard Template Library)是C++標準庫的一部分。STL的代碼從廣義上講分為三類:容器、叠代器和算法。 1.容器 2.叠代器 3.算法 ---------

《java並發編程實戰》讀書筆記6--取消與關閉

特殊 指令 1.5 搶占 用法 tor wid cto hook 這章的主要內容是關於如何使任務和線程安全,快速,可靠的停止下來。 7.1 任務取消 在Java中沒有一種安全的搶占方式來停止線程,但是可以使用一些協作機制,比如: 讓素數生成器運行1秒後取消(並不會剛好在運

ThinkPHP5學習筆記(6)請求和響應

thinkphp在線視頻課程:http://www.kancloud.cn/tpshop/thinkphp5/220692Request請求對象和Response響應對象$_GET、$_POST、$_REQUEST、$_COOKIE調用請求對象$request=Request::instance()$this

CI框架源代碼閱讀筆記6 擴展鉤子 Hook.php

cti enable blog have 子列 rmi 是否 lap tool CI框架同意你在不改動系統核心代碼的基礎上加入或者更改系統的核心功能(如重寫緩存、輸出等)。比如,在系統開啟hook的條件下(config.php中$config[‘enable_hooks

QT筆記 -- (6) opengl

ini ref func demo correct ptr csdn entity eap 參考 http://blog.csdn.net/myths_0/article/details/24431597 用glut繪制一個茶壺 一句話,繼承QGLWidget,實現下

筆記6 壓縮工具、安裝軟件包(rpm、yum、源碼包)、shell。

yum、shell壓縮打包常見的壓縮文件windows:rar、zip、7zLinux:.zip、.gz、.bz2、.xz、.tar、.gz、.tar.bz2、.tar.xzgzip壓縮工具它壓縮後邊直接跟文件名就可以命令:gzip -d 解壓的意思命令gzip -數字 表示它的壓縮級別,1——9,數字越大

金典 SQL筆記(6)

test 出身 信息 這樣的 n) 需求 ima 都是 鏈接 page223-索引 --利用SQL 語句創建索引 --CREATE INDEX 索引名稱on 表名(字段 ,字段, 字段字段n) --索引名稱必須為唯一的,字段 ,字段, 同意一個到多個 -

JavaScript筆記6-數組新方法

ray javascrip 類型 sum pre lastindex each clas reduce 七.ECMAScript5關於數組的新方法 1.forEach():遍歷數組,並為每個元素調用傳入的函數; 舉例: 1 var a = [1,2,3

[javase學習筆記]-6.5 類類型參數與匿名對象

需要 public num trac article 我們 品牌 類類型 color 這一節我們來說說類類型參數和匿名對象. 我們繼續用之前的小汽車類吧 class Car { int num;//這是輪胎數屬性 String color;//這是顏色屬性

ESP8266學習筆記6:ESP8266規範wifi連接操作

.text n) 梳理 pri his tail 周期性 官方 esp 一、前言 我整理了從2015年至今關於ESP8266的學習筆記,梳理出來了開發環境、基礎功能、進階學習三大部分。方便自己和他人。可點此查看,歡迎交流。 之前在筆記4《ES

[javase學習筆記]-6.6 基本數據類型參數與引用數據類型參數的傳遞過程

img 兩個 數據類型 語句 hang .net 全部 pre 進棧 這一節基本數據類型參數和引用數據類型參數的傳遞過程。 數據類型參數和引用參數我們在前面章節中都已涉及到了,那麽我們來看看以下的兩段代碼: //基本數據類型參數傳遞 class Demo

java學習筆記(6)

brush 本質 運行 == scanner 私有 定義 bool 調用 java基礎知識: 1:形式參數和返回值的問題 (1)形式參數: 類名:需要該類的對象 抽象類名:需要該類的子類對象 接口名:需要該接口的實現類對象 (2)返回值類型: 類名:返

<C和指針---讀書筆記6>

返回值 log enter val 其他 9.png 筆記 align eight 指針 指針是一種變量,和int、float、char一樣,是一種基本的變量。只不過它比較抽象一些。 我們知道在C語言中,聲明一個變量a、b,編譯器會為其分配一個物理地址 addr_1 、ad

數學筆記6——線性近似和二階近似

left 無需 斜率 .cn 簡化 精度 com 轉載 mar 線性近似   假設一般函數上存在點(x0, f(x0)),當x接近基點x0時,可以使用函數在x0點的切線作為函數的近似線。函數f(x)≈f(x0)+f‘(x0)(x- x0)即稱為函數f在x0點的線性近似或切線