在使用 pytorch 对一些数据进行编码后,我需要使用 scipy.optimize 模块。但是, scipy.optimize 不会将 torch.tensor 作为其输入。如何使用带有渐变路径的数据的 scipy.optimize 模块?
我可以在 PyTorch 中使用 scipy.optimize 模块吗?
数据挖掘
火炬
scipy
2021-09-20 18:43:58
2个回答
这是我目前正在使用的解决方法:
# model definition
class MLP(Module):
# define model elements
def __init__(self):
super(MLP, self).__init__()
self.hidden1 = Linear(2, 200)
self.hidden2 = Linear(200, 100)
self.hidden3 = Linear(100, 1)
self.activation1 = LeakyReLU()
self.activation2 = LeakyReLU()
# forward propagate input
def forward(self, X):
optimize_flag = False
if not torch.is_tensor(X):
optimize_flag = True
X = Variable(torch.from_numpy(X)).float()
X = self.hidden1(X)
X = self.activation1(X)
X = self.hidden2(X)
X = self.activation2(X)
X = self.hidden3(X)
if optimize_flag:
return X.detach()
return X
只需确保在使用 scipy.optimize.minimize 或任何其他使用x0
标志输入的函数时传入分离的张量(即minimize(surrogate, x0=x.detach().numpy())
)
我写了一个库来做到这一点:autograd-minimize
您可以执行以下操作:
from autograd_minimize.torch_wrapper import torch_function_factory
from autograd_minimize import minimize
func, params = torch_function_factory(your_model, your_loss, X_train, y_train)
# Minimization
res = minimize(func, params, method='L-BFGS-B')
```
其它你可能感兴趣的问题