Memahami transform.Normalize( )

By | July 30, 2024
252 Views

normalisasi yaitu mengubah skala menjadi rentang 0 sampai dengan 1 ataupun -1 sampai +1 dengan rumus sebagai berikut

image = (image – mean) / std

Misalkan Parameter

  • mean = 0.5 dan
  • std = 0.5

maka  akan menormalkan gambar dalam rentang [-1,1]

Jika kalian ingin mengembalikan gambar ke rentang [0,1], bisa menggunakan rumus

image = ((image * std) + mean)

Secara umum Pillow akan membaca gambar menjadi rentang 0 sampai 1, sedangkan openCV akan menggunakan uint8 yaitu rentang 0 sampai 255, oleh sebab itu kalian harus hati2 menggunakan OpenCV sebaiknya nanti value nya dibagi dengan 255.0 akan sesuai dengan rentang 0 sampai 1.

Saya akan ambil contoh berikut

import torchvision.transforms as transforms
import torch

image = torch.randint(0,255,(1, 5, 3), dtype=torch.float)/255

print(image)

T = transforms.Compose(
    [
     transforms.Normalize((0.5), (0.5))
     ])

print(T(image))

hasil dari normalisasi yang semulai rentang 0 sampai 1 menjadi -1 sampai +1

tensor([[[0.4118, 0.4784, 0.9020],
         [0.7922, 0.1176, 0.0902],
         [0.8627, 0.5098, 0.6510],
         [0.8627, 0.7529, 0.4235],
         [0.4980, 0.1333, 0.2627]]])
tensor([[[-0.1765, -0.0431,  0.8039],
         [ 0.5843, -0.7647, -0.8196],
         [ 0.7255,  0.0196,  0.3020],
         [ 0.7255,  0.5059, -0.1529],
         [-0.0039, -0.7333, -0.4745]]])

sesuai dengan rumus diatas mari kita coba

nilai input 0.4118 apakah hasilnya -0.1764?

(0.4118-0.5)/0.5
Out[38]: -0.1764

Apakah normalisasi bagus?

Tentang apakah ini membantu CNN belajar lebih baik, saya tidak yakin. Tetapi mayoritas makalah yang saya baca menggunakan beberapa skema normalisasi, yang diatas adalah salah satunya. (lebih tepatnya jika kalian banyak menggunakan fungsi aktifasi yang melibatkan nilai rentang -1 sampai +1, serta kebanyakan bobot yang digunakan mempunyai nilai rentang sesuai hal tersebut)

Mari kita cek mengenai bobot pada convolution yang berisikan nilai rentang -1 sampai dengan +1 berdistribusi normal https://softscients.com/2024/05/05/operasi-convolution-pada-pytorch-filter-kernel-weight/

conv = torch.nn.Conv2d(in_channels=1,out_channels=1,kernel_size = 3)

conv.weight
Out[41]: 
Parameter containing:
tensor([[[[ 0.0522,  0.0030, -0.2677],
          [-0.1826,  0.1313,  0.0576],
          [-0.1420,  0.0884,  0.1058]]]], requires_grad=True)

 

See also  Cara Membuat ANN dengan Multi Target