(pytorch-深度學習系列)pytorch資料操作
pytorch資料操作
基本資料操作,都詳細註釋了,如下:
import torch
#5x3的未初始化的Tensor
x = torch.empty(5, 3)
print("5x3的未初始化的Tensor:")
print(x)
print("******************************")
#5x3的隨機初始化的Tensor:
x = torch.rand(5, 3)
print("5x3的隨機初始化的Tensor:")
print(x)
print("******************************")
#5x3的long型全0的Tensor:
x = torch.zeros(5, 3, dtype=torch.long)
print("5x3的long型全0的Tensor:")
print(x)
print("******************************")
#根據源資料建立
x = [5, 4, 3]
x = torch.tensor(x, dtype=torch.float64)
print("根據源資料建立tensor:")
print(x)
print("******************************")
#返回的tensor預設具有相同的torch.dtype和torch.device
#建立一個tensor
x = x.new_ones(5, 3, dtype=torch.float64)
print("建立的tensor")
print(x)
print("******************************")
#通過對已有的tensor 指定新的資料型別 建立tensor
x = torch.randn_like(x, dtype=torch.float)
print("通過對已有的tensor 指定新的資料型別 建立tensor:")
print(x)
print("******************************")
#通過shape或者size()來獲取Tensor的形狀:
print("通過shape或者size()來獲取Tensor的形狀:")
print(x.size())
print(x.shape)
print("******************************")
#tensor加法:
y = torch.rand(5, 3)
print(x + y)
print("******************************")
#add函式實現tensor相加
print(torch.add(x, y))
print("******************************")
#add函式指定輸出相加
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
print("******************************")
#使用行內函數實現加發
y.add_(x)
print(y)
#PyTorch操作inplace版本都有字尾_, 例如x.copy_(y), x.t_()
print("******************************")
#類似numpy的索引方式
y=x[0,:]
y += 2
print(y)
print("修改了y,那麼原tensor也會被修改")
print(x[0, :])
print("******************************")
#改變形狀 view函式
y = x.view(15)
z = x.view(-1, 5) # -1所指的維度可以根據其他維度的值推出來
print(x.size(), y.size(), z.size())
print("******************************")
#view()返回的新Tensor與源Tensor雖然可能有不同的size,但是是共享data的,即更改一個,另一個也會變化
x += 1
print(x)
print(y) # 也加了1
print("******************************")
#使用clone函式獲得一個真正的資料副本3.
x_clone = x.clone().view(15)
x += 1
print(x)
print(x_clone)
print("******************************")
#使用clone還有一個好處是會被記錄在計算圖中,即梯度回傳到副本時也會傳到源Tensor。
#另外一個常用的函式就是item(), 它可以將一個標量Tensor轉換成一個Python number:
x = torch.randn(1)
print(x)
print(x.item())
print("******************************")
#形狀不同的tensor進行計算,會觸發廣播機制
x = torch.arange(1, 3).view(1, 2)
y = torch.arange(0, 3).view(3, 1)
print(x)
print(y)
print(x + y)
print(torch.add(x, y))
#print(x.add_(y))
#由於x和y分別是1行2列和3行1列的矩陣,如果要計算x + y,那麼x中第一行的2個元素被廣播(複製)到了第二行和第三行,而y中第一列的3個元素被廣播(複製)到了第二列。如此,就可以對2個3行2列的矩陣按元素相加。
print("******************************")
#索引操作與clone操作不同,不會開闢新的記憶體,但是運算操作會開闢新的記憶體
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
id_before = id(y)
y[:] = y + x
print(id(y) == id_before) # True
print("未開闢新的記憶體")
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
id_before = id(y)
y = y + x
print(id(y) == id_before) # False
print("開闢了新的記憶體")
print("使用 add函式指定輸出也可以避免開闢記憶體:")
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
id_before = id(y)
torch.add(x, y, out=y) # y += x, y.add_(x)
print(id(y) == id_before) # True
print("******************************")
#Tensor轉NumPy:tensor.numpy()
a = torch.ones(5)
b = a.numpy()
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)
#torch.from_numpy
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)
#torch.tensor(numpy)這樣會開闢新的記憶體
c = torch.tensor(a)
a += 1
print(a, c)
#測試gpu環境
# 以下程式碼只有在PyTorch GPU版本上才會執行
if torch.cuda.is_available():
device = torch.device("cuda") # GPU
y = torch.ones_like(x, device=device) # 直接建立一個在GPU上的Tensor
x = x.to(device) # 等價於 .to("cuda")
z = x + y
print(z)
print(z.to("cpu", torch.double)) # to()還可以同時更改資料型別
輸出結果如下:
Microsoft Windows [版本 10.0.18363.1082]
(c) 2019 Microsoft Corporation。保留所有權利。
C:\Users\20626>d:
D:\>cd workspace
D:\workspace>cd "python Workspace"
D:\workspace\python Workspace>cd deeplearning-pytorch
D:\workspace\python Workspace\deeplearning-pytorch>activate pytorch_gpu
D:\workspace\python Workspace\deeplearning-pytorch>conda.bat activate pytorch_gpu
(pytorch_gpu) D:\workspace\python Workspace\deeplearning-pytorch>python chapter-1.py
5x3的未初始化的Tensor:
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
******************************
5x3的隨機初始化的Tensor:
tensor([[0.7356, 0.2419, 0.0771],
[0.2658, 0.9888, 0.8363],
[0.7294, 0.4150, 0.9157],
[0.8824, 0.1682, 0.8827],
[0.7691, 0.0690, 0.8040]])
******************************
5x3的long型全0的Tensor:
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
******************************
根據源資料建立tensor:
tensor([5., 4., 3.], dtype=torch.float64)
******************************
建立的tensor
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
******************************
通過對已有的tensor 指定新的資料型別 建立tensor:
tensor([[ 0.1654, -0.1937, 1.2233],
[-0.4828, -0.8176, -0.3672],
[ 0.5762, 0.6457, -0.0862],
[ 0.9082, -0.3934, -0.3169],
[ 0.1841, 0.8648, 1.1849]])
******************************
通過shape或者size()來獲取Tensor的形狀:
torch.Size([5, 3])
torch.Size([5, 3])
******************************
tensor([[ 1.0382e+00, -4.8804e-04, 2.1988e+00],
[-2.5249e-01, -1.7922e-01, 4.7531e-01],
[ 1.1131e+00, 7.3895e-01, 5.4079e-01],
[ 1.8360e+00, -3.9927e-02, -1.0457e-01],
[ 4.7496e-01, 1.6555e+00, 1.2281e+00]])
******************************
tensor([[ 1.0382e+00, -4.8804e-04, 2.1988e+00],
[-2.5249e-01, -1.7922e-01, 4.7531e-01],
[ 1.1131e+00, 7.3895e-01, 5.4079e-01],
[ 1.8360e+00, -3.9927e-02, -1.0457e-01],
[ 4.7496e-01, 1.6555e+00, 1.2281e+00]])
******************************
tensor([[ 1.0382e+00, -4.8804e-04, 2.1988e+00],
[-2.5249e-01, -1.7922e-01, 4.7531e-01],
[ 1.1131e+00, 7.3895e-01, 5.4079e-01],
[ 1.8360e+00, -3.9927e-02, -1.0457e-01],
[ 4.7496e-01, 1.6555e+00, 1.2281e+00]])
******************************
tensor([[ 1.0382e+00, -4.8804e-04, 2.1988e+00],
[-2.5249e-01, -1.7922e-01, 4.7531e-01],
[ 1.1131e+00, 7.3895e-01, 5.4079e-01],
[ 1.8360e+00, -3.9927e-02, -1.0457e-01],
[ 4.7496e-01, 1.6555e+00, 1.2281e+00]])
******************************
tensor([2.1654, 1.8063, 3.2233])
修改了y,那麼原tensor也會被修改
tensor([2.1654, 1.8063, 3.2233])
******************************
torch.Size([5, 3]) torch.Size([15]) torch.Size([3, 5])
******************************
tensor([[3.1654, 2.8063, 4.2233],
[0.5172, 0.1824, 0.6328],
[1.5762, 1.6457, 0.9138],
[1.9082, 0.6066, 0.6831],
[1.1841, 1.8648, 2.1849]])
tensor([3.1654, 2.8063, 4.2233, 0.5172, 0.1824, 0.6328, 1.5762, 1.6457, 0.9138,
1.9082, 0.6066, 0.6831, 1.1841, 1.8648, 2.1849])
******************************
tensor([[4.1654, 3.8063, 5.2233],
[1.5172, 1.1824, 1.6328],
[2.5762, 2.6457, 1.9138],
[2.9082, 1.6066, 1.6831],
[2.1841, 2.8648, 3.1849]])
tensor([3.1654, 2.8063, 4.2233, 0.5172, 0.1824, 0.6328, 1.5762, 1.6457, 0.9138,
1.9082, 0.6066, 0.6831, 1.1841, 1.8648, 2.1849])
******************************
tensor([-0.5415])
-0.5414556860923767
******************************
tensor([[1, 2]])
tensor([[0],
[1],
[2]])
tensor([[1, 2],
[2, 3],
[3, 4]])
tensor([[1, 2],
[2, 3],
[3, 4]])
******************************
True
未開闢新的記憶體
False
開闢了新的記憶體
使用 add函式指定輸出也可以避免開闢記憶體:
True
******************************
tensor([1., 1., 1., 1., 1.]) [1. 1. 1. 1. 1.]
tensor([2., 2., 2., 2., 2.]) [2. 2. 2. 2. 2.]
tensor([3., 3., 3., 3., 3.]) [3. 3. 3. 3. 3.]
[1. 1. 1. 1. 1.] tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
[2. 2. 2. 2. 2.] tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
[3. 3. 3. 3. 3.] tensor([3., 3., 3., 3., 3.], dtype=torch.float64)
[4. 4. 4. 4. 4.] tensor([3., 3., 3., 3., 3.], dtype=torch.float64)
tensor([2, 3], device='cuda:0')
tensor([2., 3.], dtype=torch.float64)
(pytorch_gpu) D:\workspace\python Workspace\deeplearning-pytorch>
相關文章
- 深度學習框架Pytorch學習筆記深度學習框架PyTorch筆記
- 【Pytorch教程】迅速入門Pytorch深度學習框架PyTorch深度學習框架
- 深度學習及pytorch基礎深度學習PyTorch
- 輕鬆學Pytorch-使用ResNet50實現影像分類PyTorch
- 深度學習之PyTorch實戰(4)——遷移學習深度學習PyTorch遷移學習
- Pytorch系列:(四)IO操作PyTorch
- 基於pytorch的深度學習實戰PyTorch深度學習
- (1) Pytorch深度學習—數值處理PyTorch深度學習
- Anaconda Pytorch 深度學習入門記錄PyTorch深度學習
- 機器學習&深度學習 操作tips機器學習深度學習
- Ubuntu深度學習環境搭建 tensorflow+pytorchUbuntu深度學習PyTorch
- 【深度學習】檢測CUDA、cuDNN、Pytorch是否可用深度學習DNNPyTorch
- Pytorch系列:(二)資料載入PyTorch
- Pytorch系列:(八)學習率調整方法PyTorch
- 深度學習武器庫-timm-非常好用的pytorch CV模型庫 - 常用模型操作深度學習PyTorch模型
- 拯救深度學習:標註資料不足下的深度學習方法深度學習
- 理解Transformer [資料探勘深度學習]ORM深度學習
- 深度學習--資料預處理深度學習
- Pytorch系列之常用基礎操作PyTorch
- Keras vs PyTorch:誰是「第一」深度學習框架?KerasPyTorch深度學習框架
- 深度學習--PyTorch定義Tensor以及索引和切片深度學習PyTorch索引
- 使用 C# 入門深度學習:Pytorch 基礎C#深度學習PyTorch
- pytorch深度學習分類程式碼簡單示例PyTorch深度學習
- 【深度學習 01】線性迴歸+PyTorch實現深度學習PyTorch
- 【深度學習】PyTorch CUDA環境配置及安裝深度學習PyTorch
- NLP系列學習:資料平滑
- PyTorch深度學習入門筆記(一)PyTorch環境配置及安裝PyTorch深度學習筆記
- PyTorch資料和NumPy資料之間的互操作PyTorch
- 資料庫學習(二)資料操作語言:資料庫
- 深度學習——資料預處理篇深度學習
- 序列資料和文字的深度學習深度學習
- 《深度學習原理與Pytorch實戰》(第二版)深度學習PyTorch
- 【深度學習】深度解讀:深度學習在IoT大資料和流分析中的應用深度學習大資料
- ENVI深度學習V1.0操作教程深度學習
- Python深度學習(處理文字資料)--學習筆記(十二)Python深度學習筆記
- 深度學習 preprocess 預處理圖片方式去 pytorch 化深度學習PyTorch
- 001-深度學習Pytorch環境搭建(Anaconda , PyCharm匯入)深度學習PyTorchPyCharm
- Pytorch 手寫數字識別 深度學習基礎分享PyTorch深度學習