another strange details that might contribute, there seems to be an error with the order of python commands.
i added two print commands, one in the main script and one in the board module. the code changed only where i mention it, the rest is the same:
import torchvision
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch
from Net import Net
from data_load import classes, trainloader, testloader
from helper_func import matplotlib_imshow
print('writer not') # change 1
from board import writer

and in board.py module:
from torch.utils.tensorboard import SummaryWriter
#from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/fashion_mnist_experiment_1')
print('writer ready') # change 2

when i run the following is printed:
writer not
writer ready
writer not
writer not
writer ready
writer ready
torch.Size([4, 1, 28, 28])

it seems to be repeating the main script before proceeding to the if main statement, and also strangely doubling the print on the second repeat.
what can cause this and is it related to the  dysfunction of tesnorboard perhaps?
*update
it seems that the num_workers=2 in the data_load module in the torch.util.Dataloader object caused the double printing issue. after changing to num_workers=1 :
writer not
writer ready
writer not
writer ready
torch.Size([4, 1, 28, 28])
writer yes

and after changing num_workers=0   i got the printout i was expecting:
writer not
writer ready
torch.Size([4, 1, 28, 28])
writer yes

i still don’t know why or how is this related to the tensorboard issue.
i have a cuda enabled GPU gtx 1050