I cannot reproduce the issue using your model and a dummy training script:
# script1.py

# Setup
model = CNN_V4()
data = torch.randn(10, 1, 170, 1000)
target = torch.randint(0, 20, (10,))

optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss()

# Training
for epoch in range(10):
    optimizer.zero_grad()
    output = model(data)
    loss = criterion(output, target)
    loss.backward()
    optimizer.step()
    print('epoch {}, loss {}'.format(epoch, loss.item()))

# Save reference
model.eval()
output_reference = model(data)
checkpoint = {
    'model': model.state_dict(),
    'data': data,
    'output': output_reference,
}
torch.save(checkpoint, 'tmp.pth')


# script2.py
# Setup
model = CNN_V4()
checkpoint = torch.load('tmp.pth')
model.load_state_dict(checkpoint['model'])
data = checkpoint['data']
output_ref = checkpoint['output']

# Compare
model.eval()
output = model(data)
print((output - output_ref).abs().max())
> tensor(0., grad_fn=<MaxBackward1>)

As you can see, the restored model returns the same output as the model in the training script.
Could you try to narrow down the issue and try to post an executable code snippet to reproduce the issue?
PS: you can post code snippets by wrapping them into three backticks ```, which makes debugging easier. I’ve formatted your code, so that I could copy-paste it.