informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
import torch
x = torch.arange(16).reshape(1,4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
a3 = x.sum(axis = 0,keepdim=True)
a4 = x.sum(axis = 0,keepdim=False)
a5 = x.sum(axis = 2,keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
import torch
x = torch.arange(16).reshape(4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
print(a)
print(a2)
print(x/a)
Gabungkan kedua contoh ini untuk menjelaskan secara rinci perubahan sumbu dalam keadaan berbeda.
Memahami operasi dimensi pada tensor dan penjumlahan sepanjang sumbu tertentu di PyTorch memang memerlukan sedikit waktu. Mari kita menganalisis operasi ini langkah demi langkah melalui dua contoh, menjelaskan secara rinci perubahan sumbu dalam situasi yang berbeda.
import torch
x = torch.arange(16).reshape(1, 4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
a3 = x.sum(axis=0, keepdim=True)
a4 = x.sum(axis=0, keepdim=False)
a5 = x.sum(axis=2, keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Ini adalah bentuk (1, 4, 4)
dari tensor. Kita dapat menganggapnya sebagai kumpulan yang berisi matriks 4x4.
x.sum(axis=1, keepdim=True)
Jumlahkan sepanjang sumbu 1 (yaitu arah dimensi kedua, 4), pertahankan dimensinya.
tensor([[[24, 28, 32, 36]]])
Bentuknya menjadi (1, 1, 4)
。
x.sum(axis=1, keepdim=False)
Jumlahkan sepanjang sumbu 1, tidak ada dimensi yang dipertahankan.
tensor([[24, 28, 32, 36]])
Bentuknya menjadi (1, 4)
。
x.sum(axis=0, keepdim=True)
Jumlahkan sepanjang sumbu 0 (yaitu arah dimensi pertama, 1), pertahankan dimensinya.
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Karena tensor asli hanya memiliki satu elemen pada sumbu 0, maka hasilnya sama dengan tensor asli, yaitu berbentuk (1, 4, 4)
。
x.sum(axis=0, keepdim=False)
Jumlahkan sepanjang sumbu 0, dimensi tidak dipertahankan.
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Bentuknya menjadi (4, 4)
。
x.sum(axis=2, keepdim=True)
Jumlahkan sepanjang sumbu 2 (yaitu dimensi ketiga, arah 4), pertahankan dimensinya.
tensor([[[ 6],
[22],
[38],
[54]]])
Bentuknya menjadi (1, 4, 1)
。
keepdim=True
Dimensi yang dijumlahkan akan dipertahankan, jumlah dimensi hasil tetap tidak berubah, tetapi ukuran dimensi yang dijumlahkan menjadi 1.keepdim=False
Dimensi yang dijumlahkan akan dihilangkan, dan jumlah dimensi pada hasil akan dikurangi 1.import torch
x = torch.arange(16).reshape(4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
print(a)
print(a2)
print(x/a)
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Ini adalah bentuk (4, 4)
dari tensor.
x.sum(axis=1, keepdim=True)
Jumlahkan sepanjang sumbu 1 (yaitu arah dimensi kedua, 4), pertahankan dimensinya.
tensor([[ 6],
[22],
[38],
[54]])
Bentuknya menjadi (4, 1)
。
x.sum(axis=1, keepdim=False)
Jumlahkan sepanjang sumbu 1, tidak ada dimensi yang dipertahankan.
tensor([ 6, 22, 38, 54])
Bentuknya menjadi (4,)
。
x / a
tensor([[0.0000, 0.1667, 0.3333, 0.5000],
[0.1818, 0.2273, 0.2727, 0.3182],
[0.2105, 0.2368, 0.2632, 0.2895],
[0.2222, 0.2407, 0.2593, 0.2778]])
Ini adalah jumlah setiap elemen dibagi dengan baris yang bersesuaian, sehingga menghasilkan:
tensor([[ 0/6, 1/6, 2/6, 3/6],
[ 4/22, 5/22, 6/22, 7/22],
[ 8/38, 9/38, 10/38, 11/38],
[12/54, 13/54, 14/54, 15/54]])
menggunakan keepdim=True
Saat mempertahankan dimensi, dimensi yang dijumlahkan menjadi 1.menggunakankeepdim=False
Ketika , dimensi yang dijumlahkan dihilangkan.
Mengapa baris dicantumkan, bukan kolom, saat reshape(1, 4, 4) digunakan? Hanya saat reshape(4, 4) digunakan, barisnya adalah baris.
Mari kita tinjau konsep dasarnya terlebih dahulu:
(4, 4)
import torch
x = torch.arange(16).reshape(4, 4)
print(x)
Keluaran:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Bentuk tensor ini adalah (4, 4)
, mewakili matriks 4x4:
OKEhorisontal:
[ 0, 1, 2, 3]
[ 4, 5, 6, 7]
[ 8, 9, 10, 11]
[12, 13, 14, 15]
Daftarvertikal:
[ 0, 4, 8, 12]
[ 1, 5, 9, 13]
[ 2, 6, 10, 14]
[ 3, 7, 11, 15]
(1, 4, 4)
x = torch.arange(16).reshape(1, 4, 4)
print(x)
Keluaran:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Bentuk tensor ini adalah (1, 4, 4)
, mewakili tensor tiga dimensi 1x4x4:
1
, menunjukkan ukuran batch.4
, mewakili jumlah baris (baris per matriks).4
, mewakili jumlah kolom (kolom setiap matriks).(4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Keluaran:
tensor([[ 6],
[22],
[38],
[54]])
(1, 4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Keluaran:
tensor([[[24, 28, 32, 36]]])
ada (1, 4, 4)
Pada tensor tiga dimensi, dimensi pertama merepresentasikan ukuran batch, sehingga nampaknya setiap matriks 4x4 masih diproses secara dua dimensi saat beroperasi. Namun, karena dimensi batch ditambahkan, perilakunya berbeda dari tensor dua dimensi dalam operasi penjumlahan.
Secara khusus: