Sorry for late reply. No, it is defines 1 times here in __init__(self). But both 2 of convolutional layers use pooling layers which have same kernel sizes. For example, if you want to use 2x2 for first one and 3x3 for 2. one, you should define another layer which is self.pool2 = nn.MaxPool2d(3, 3). Hence, it is unreasonable to create self.pool = nn.MaxPool2d(2, 2) twice. There is no learning, just reducing dimensions, so define it just one times, and if your pooling layers have same sizes, use that pooling layer more then ones times.
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool1 = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.pool2 = nn.MaxPool2d(2, 2)

here pool1 and pool2 are same.