I’m unsure, if this behavior was changed or if I’m missing something, but the forward hook on the previous layer seems to return the expected values without the applied (inplace) relu:
class MyModel(nn.Module):
    def __init__(self, inplace=False):
        super(MyModel, self).__init__()
        self.fc = nn.Linear(10, 10)
        self.relu = nn.ReLU(inplace=inplace)
        
    def forward(self, x):
        x = self.relu(self.fc(x))
        return x


x = torch.randn(1, 10)

# out of place
model = MyModel()
model.fc.register_forward_hook(lambda m, input, output: print(output))
out = model(x)

# inplace
model = MyModel(inplace=True)
model.fc.register_forward_hook(lambda m, input, output: print(output))
out = model(x)