DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

BatchNorm3d in PyTorch

Buy Me a Coffee

*Memos:

BatchNorm3d() can get the 5D tensor of the zero or more elements computed by 3D Batch Normalization from the 5D tensor of zero or more elements as shown below:

*Memos:

  • The 1st argument for initialization is num_features(Required-Type:int). *It must be 1 <= x.
  • The 2nd argument for initialization is eps(Optional-Default:1e-05-Type:float).
  • The 3rd argument for initialization is momentum(Optional-Default:0.1-Type:float).
  • The 4th argument for initialization is affine(Optional-Default:True-Type:bool).
  • The 5th argument for initialization is track_running_stats(Optional-Default:True-Type:bool).
  • The 6th argument for initialization is device(Optional-Default:None-Type:str, int or device()): *Memos:
  • The 7th argument for initialization is dtype(Optional-Default:None-Type:dtype): *Memos:
  • The 1st argument is input(Required-Type:tensor of float): *Memos:
    • It must be the 5D tensor of zero or more elements.
    • The number of the elements of the 2nd shallowest dimension must be same as num_features.
    • Its device and dtype must be same as BatchNorm3d()'s.
    • The tensor's requires_grad which is False by default is set to True by BatchNorm3d().
  • batchnorm3d1.device and batchnorm3d1.dtype don't work.
import torch
from torch import nn

tensor1 = torch.tensor([[[[[8., -3., 0., 1., 5., -2.]]]]])

tensor1.requires_grad
# False

batchnorm3d1 = nn.BatchNorm3d(num_features=1)
tensor2 = batchnorm3d1(input=tensor1)
tensor2
# tensor([[[[[1.6830, -1.1651, -0.3884, -0.1295, 0.9062, -0.9062]]]]],
#        grad_fn=<NativeBatchNormBackward0>)

tensor2.requires_grad
# True

batchnorm3d1
# BatchNorm3d(1, eps=1e-05, momentum=0.1, affine=True,
#             track_running_stats=True)

batchnorm3d1.num_features
# 1

batchnorm3d1.eps
# 1e-05

batchnorm3d1.momentum
# 0.1

batchnorm3d1.affine
# True

batchnorm3d1.track_running_stats
# True

batchnorm3d2 = nn.BatchNorm3d(num_features=1)
batchnorm3d2(input=tensor2)
# tensor([[[[[1.6830, -1.1651, -0.3884, -0.1295, 0.9062, -0.9062]]]]],
#        grad_fn=<NativeBatchNormBackward0>)

batchnorm3d = nn.BatchNorm3d(num_features=1, eps=1e-05, momentum=0.1, 
                             affine=True, track_running_stats=True, 
                             device=None, dtype=None)
batchnorm3d(input=tensor1)
# tensor([[[[[1.6830, -1.1651, -0.3884, -0.1295, 0.9062, -0.9062]]]]],
#        grad_fn=<NativeBatchNormBackward0>)

my_tensor = torch.tensor([[[[[8., -3., 0.],
                             [1., 5., -2.]]]]])
batchnorm3d = nn.BatchNorm3d(num_features=1)
batchnorm3d(input=my_tensor)
# tensor([[[[[1.6830, -1.1651, -0.3884],
#            [-0.1295, 0.9062, -0.9062]]]]],
#        grad_fn=<NativeBatchNormBackward0>)

my_tensor = torch.tensor([[[[[8.], [-3.], [0.], [1.], [5.], [-2.]]]]])

batchnorm3d = nn.BatchNorm3d(num_features=1)
batchnorm3d(input=my_tensor)
# tensor([[[[[1.6830], [-1.1651], [-0.3884], [-0.1295], [0.9062], [-0.9062]]]]],
#        grad_fn=<NativeBatchNormBackward0>)

my_tensor = torch.tensor([[[[[8.], [-3.], [0.]],
                            [[1.], [5.], [-2.]]]]])
batchnorm3d = nn.BatchNorm3d(num_features=1)
batchnorm3d(input=my_tensor)
# tensor([[[[[1.6830], [-1.1651], [-0.3884]],
#           [[-0.1295], [0.9062], [-0.9062]]]]],
#        grad_fn=<NativeBatchNormBackward0>)
Enter fullscreen mode Exit fullscreen mode

Top comments (0)