torch and numpy
變數 (variable)
激勵函式
關係擬合(回歸)
區分型別 (分類)
快速搭建法
批訓練加速神經網路訓練
optimizer優化器
卷積神經網路 cnn
卷積神經網路(rnn、lstm)
rnn 迴圈神經網路 (分類)
rnn 迴圈神經網路 (回歸)
自編碼 (autoencoder)
dqn 強化學習
生成對抗網路 (gan)
為什麼 torch 是動態的
gpu 加速運算
過擬合 (overfitting)
批標準化 (batch normalization)
torch 中提供了一種幫我們整理資料結構的好東西, 叫做 dataloader, 我們能用它來包裝自己的資料, 進行批訓練. 而且批訓練可以有很多種途徑。
dataloader
是torch
用來包裝資料的工具. 所以你要講自己的 (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...