Pytorch教程 批訓練

2021-10-18 09:27:22 字數 4709 閱讀 8392

torch and numpy

變數 (variable)

激勵函式

關係擬合(回歸)

區分型別 (分類)

快速搭建法

批訓練加速神經網路訓練

optimizer優化器

卷積神經網路 cnn

卷積神經網路(rnn、lstm)

rnn 迴圈神經網路 (分類)

rnn 迴圈神經網路 (回歸)

自編碼 (autoencoder)

dqn 強化學習

生成對抗網路 (gan)

為什麼 torch 是動態的

gpu 加速運算

過擬合 (overfitting)

批標準化 (batch normalization)

torch 中提供了一種幫我們整理資料結構的好東西, 叫做 dataloader, 我們能用它來包裝自己的資料, 進行批訓練. 而且批訓練可以有很多種途徑。

dataloadertorch用來包裝資料的工具. 所以你要講自己的 (numpy array 或其他) 資料形式裝換成 tensor, 然後再放進這個包裝器中.

使用 dataloader 有什麼好處呢? 就是他們幫你有效地迭代資料, 舉例:

import torch

import torch.utils.data as data

torch.manual_seed(1)

# reproducible

batch_size =

5# 批訓練的資料個數

x = torch.linspace(1,

10,10)

# x data (torch tensor)

y = torch.linspace(10,

1,10)

# y data (torch tensor)

# 先轉換成 torch 能識別的 dataset

torch_dataset = data.tensordataset(data_tensor=x, target_tensor=y)

# 把 dataset 放入 dataloader

loader = data.dataloader(

dataset=torch_dataset,

# torch tensordataset format

batch_size=batch_size,

# mini batch size

shuffle=

true

,# 要不要打亂資料 (打亂比較好)

num_workers=2,

# 多執行緒來讀資料

)for epoch in

range(3

):# 訓練所有!整套!資料 3 次

for step,

(batch_x, batch_y)

inenumerate

(loader)

:# 每一步 loader 釋放一小批資料用來學習

# 假設這裡就是你訓練的地方...

# 打出來一些資料

print

('epoch: '

, epoch,

'| step: '

, step,

'| batch x: '

, batch_x.numpy(),

'| batch y: '

, batch_y.numpy())

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

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

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

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

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

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

"""

可以看出, 每步都匯出了5個資料進行學習. 然後每個epoch的匯出資料都是先打亂了以後再匯出.

真正方便的還不是這點. 如果我們改變一下batch_size = 8, 這樣我們就知道,step=0會匯出8個資料, 但是,step=1時資料庫中的資料不夠 8個, 這時怎麼辦呢:

batch_size =

8# 批訓練的資料個數..

.for..

.:for...

:...

print

('epoch: '

, epoch,

'| step: '

, step,

'| batch x: '

, batch_x.numpy(),

'| batch y: '

, batch_y.numpy())

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

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

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

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

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

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

"""

這時, 在 step=1 就只給你返回這個 epoch 中剩下的資料就好了.

import torch

import torch.utils.data as data

torch.manual_seed(1)

# reproducible

batch_size =

5# batch_size = 8

x = torch.linspace(1,

10,10)

# this is x data (torch tensor)

y = torch.linspace(10,

1,10)

# this is y data (torch tensor)

torch_dataset = data.tensordataset(x, y)

loader = data.dataloader(

dataset=torch_dataset,

# torch tensordataset format

batch_size=batch_size,

# mini batch size

shuffle=

true

,# random shuffle for training

num_workers=2,

# subprocesses for loading data

)def

show_batch()

:for epoch in

range(3

):# train entire dataset 3 times

for step,

(batch_x, batch_y)

inenumerate

(loader)

:# for each training step

# train your data...

print

('epoch: '

, epoch,

'| step: '

, step,

'| batch x: '

, batch_x.numpy(),

'| batch y: '

, batch_y.numpy())

if __name__ ==

'__main__'

: show_batch(

)

pytorch(五) 批訓練

import torch import torch.utils.data as data 虛構要訓練的資料 x torch.linspace 11,20,10 在 11,20 裡取出10個間隔相等的數 torch tensor y torch.linspace 20,11,10 batch size...

莫煩pytorch批訓練

import torch import torch.utils.data as data 包裝資料類 tensordataset 包裝資料和目標張量的資料集,通過沿著第乙個維度索引兩個張量來 class torch.utils.data.tensordataset data tensor,targe...

pytorch批訓練資料構造

這是對莫凡python的學習筆記。1.建立資料 import torch import torch.utils.data as data batch size 8x torch.linspace 1,10,10 y torch.linspace 10,1,10 可以看到建立了兩個一維資料,x 1 1...