The 47 is the spatial size of the activation at this point.
Each conv layer will reduce the spatial size by 4 pixels in height and width, as you are using a kernel size of 5 without padding.
Each pooling layer will halve the spatial size.
I’ll add the output shapes to each operation:
    def forward(self, x):
        # x: [N, 3, 200, 200]
        x = F.relu(self.conv1(x)) # [N, 6, 196, 196]
        x = self.pool(x) # [N, 6, 98, 98]
        x = F.relu(self.conv2(x)) # [N, 16, 94, 94]
        x = self.pool(x) # [N, 16, 47, 47]
        x = x.view(x.size(0), -1)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

CS231n 10 explains this very well, if you want to dig a bit deeper.