TUM:

I know, that the sigmoid squashes into the interval [0,1] but shouldn’t it differ a bit more?


Not necessarily and you could check all intermediates to have a look what is “happening” in the model:
class smallDense(nn.Module):
  def __init__(self, d, d_star):
    super(smallDense, self).__init__()
    self.fc1 = nn.Linear(d,4*d_star)
    self.fc2 = nn.Linear(4*d_star,1)
  
  def forward(self, input):
    x = torch.sigmoid(self.fc1(input))
    print('sigmoid(smallDense.fc1(x)) ', x)
    x = torch.sigmoid(self.fc2(x))
    print('sigmoid(smallDense.fc2(x)) ', x)
    return x

net1 = H_0(7,3,2)
net2 = H_0(7,3,2)

x_train = torch.tensor([[-500.0,-600.0,-340,0,-900000,-200,-66]])
x_train1 = torch.ones(1,7)
x_train2 = torch.rand(1,7)

print(net1(x_train))

print(net1(x_train1))
print(net1(x_train2))

print(net2(x_train))
print(net2(x_train1))
print(net2(x_train2))

You can see that the first input of course saturates the output of sigmoid(fc1). However, since sigmoid squashes it to [0, 1], sigmoid(fc2) could have “similar” outputs for x_train as for x_train1 and x_train2 (in my run tensor([[0.5298]] vs. tensor([[0.5521]]).
That doesn’t mean that the model is not trainable and your model might output larger differences for smaller input changes after training.