Hey @Pablo_Vinas! Yep, I do recommend introducing another library to integrate with your pennylane-sf code, be it Tensorflow, PyTorch, etc. Personally, I prefer PyTorch. Here’s an example of using the strawberryfields.fock device with the PyTorch interface:
import pennylane as qml
import torch
dev = qml.device("strawberryfields.fock", wires=3, cutoff_dim=3)
@qml.qnode(dev, interface="torch")
def quantum_function(x, theta):
    qml.Displacement(x, 0, wires=0)
    qml.Beamsplitter(theta, 0, wires=[0, 1])
    return qml.expval(qml.NumberOperator(0))
# To use a GPU here, change 'cpu' to 'cuda'
x = torch.tensor(0.1, device='cpu', requires_grad=True)
theta = torch.tensor(0.1, device='cpu', requires_grad=True)
opt = torch.optim.Adam([x, theta], lr=0.1)
for _ in range(10):
    opt.zero_grad()
    loss = quantum_function(x, theta)
    loss.backward()
    opt.step()
    print(quantum_function(x, theta))
'''
tensor(2.1328e-16, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0042, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0052, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0024, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0003, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0002, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0011, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0017, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0016, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
tensor(0.0010, dtype=torch.float64, grad_fn=<SqueezeBackward0>)
'''
Hope this helps!