Did you change the loss function during the training?
Sometimes a run might be better than another one. It depends highly on your use case (i.e. dataset, model etc.).
Setting the random seed at the beginning of your script helps dealing with these issues.
You can reset the weights by just creating the model again or by re-initializing it with an init function:
def weights_init(m):
    if isinstance(m, nn.Conv2d):
        torch.nn.init.xavier_uniform(m.weight.data)
        torch.nn.init.xavier_uniform(m.bias.data)

model.apply(weights_init)