Python 属性错误:';numpy.ndarray和#x27;对象没有属性';尺寸';使用pytorch和scipy
我有以下小代码段:Python 属性错误:';numpy.ndarray和#x27;对象没有属性';尺寸';使用pytorch和scipy,python,scipy,pytorch,Python,Scipy,Pytorch,我有以下小代码段: import torch from scipy.optimize import minimize def f(x): return torch.norm(x) x = torch.tensor([1.0, 1.0]) y = minimize(f, x) print(y) 但是,这会导致以下错误消息: > AttributeError Traceback (most recent call >
import torch
from scipy.optimize import minimize
def f(x):
return torch.norm(x)
x = torch.tensor([1.0, 1.0])
y = minimize(f, x)
print(y)
但是,这会导致以下错误消息:
> AttributeError Traceback (most recent call
> last) <ipython-input-17-cb070be7a142> in <module>
> 6
> 7 x = [1.0, 1.0]
> ----> 8 y = minimize(f, x)
> 9 print(y)
>
> ~\Anaconda3\lib\site-packages\scipy\optimize\_minimize.py in
> minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints,
> tol, callback, options)
> 610 return _minimize_cg(fun, x0, args, jac, callback, **options)
> 611 elif meth == 'bfgs':
> --> 612 return _minimize_bfgs(fun, x0, args, jac, callback, **options)
> 613 elif meth == 'newton-cg':
> 614 return _minimize_newtoncg(fun, x0, args, jac, hess, hessp, callback,
>
> ~\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in
> _minimize_bfgs(fun, x0, args, jac, callback, gtol, norm, eps, maxiter, disp, return_all, finite_diff_rel_step, **unknown_options) 1100
> 1101 sf = _prepare_scalar_function(fun, x0, jac, args=args,
> epsilon=eps,
> -> 1102 finite_diff_rel_step=finite_diff_rel_step) 1103 1104 f =
> sf.fun
>
> ~\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in
> _prepare_scalar_function(fun, x0, jac, args, bounds, epsilon, finite_diff_rel_step, hess)
> 260 # calculation reduces overall function evaluations.
> 261 sf = ScalarFunction(fun, x0, args, grad, hess,
> --> 262 finite_diff_rel_step, bounds, epsilon=epsilon)
> 263
> 264 return sf
>
> ~\Anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py
> in __init__(self, fun, x0, args, grad, hess, finite_diff_rel_step,
> finite_diff_bounds, epsilon)
> 74
> 75 self._update_fun_impl = update_fun
> ---> 76 self._update_fun()
> 77
> 78 # Gradient evaluation
>
> ~\Anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py
> in _update_fun(self)
> 164 def _update_fun(self):
> 165 if not self.f_updated:
> --> 166 self._update_fun_impl()
> 167 self.f_updated = True
> 168
>
> ~\Anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py
> in update_fun()
> 71
> 72 def update_fun():
> ---> 73 self.f = fun_wrapped(self.x)
> 74
> 75 self._update_fun_impl = update_fun
>
> ~\Anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py
> in fun_wrapped(x)
> 68 def fun_wrapped(x):
> 69 self.nfev += 1
> ---> 70 return fun(x, *args)
> 71
> 72 def update_fun():
>
> <ipython-input-17-cb070be7a142> in f(x)
> 3
> 4 def f(x):
> ----> 5 return torch.norm(x)
> 6
> 7 x = [1.0, 1.0]
>
> ~\Anaconda3\lib\site-packages\torch\functional.py in norm(input, p,
> dim, keepdim, out, dtype)
> 738 (tensor(3.7417), tensor(11.2250))
> 739 """
> --> 740 ndim = input.dim()
> 741
> 742 # catch default case
>
> AttributeError: 'numpy.ndarray' object has no attribute 'dim'
>属性错误回溯(最近的调用
>最后)在
> 6
>7 x=[1.0,1.0]
>--->8y=最小化(f,x)
>9打印(y)
>
>中的~\Anaconda3\lib\site packages\scipy\optimize\\u minimize.py
>最小化(fun、x0、参数、方法、jac、hess、hessp、边界、约束、,
>tol、回调、选项)
>610返回最小化cg(乐趣、x0、参数、jac、回调、**选项)
>611 elif meth==“bfgs”:
>-->612返回\u最小化\u BFG(乐趣、x0、参数、jac、回调、**选项)
>613 elif meth==‘牛顿重心’:
>614 return _minimize _newtoncg(fun、x0、args、jac、hess、hessp、callback、,
>
>中的~\Anaconda3\lib\site packages\scipy\optimize\optimize.py
>最小化BFG(乐趣、x0、参数、jac、回调、gtol、标准、eps、maxiter、disp、返回全部、有限差分相对步长、**未知选项)1100
>1101 sf=标量函数(fun、x0、jac、args=args、,
>ε=每股收益,
>->1102有限差分相对步进=有限差分相对步进)1103 1104 f=
>快乐
>
>中的~\Anaconda3\lib\site packages\scipy\optimize\optimize.py
>准备标量函数(fun,x0,jac,args,bounds,epsilon,finite,diff,rel,step,hess)
>260#计算减少了总体功能评估。
>261 sf=ScalarFunction(fun、x0、args、grad、hess、,
>-->262有限差分相对步长,界,ε=ε)
> 263
>264返回sf
>
>~\Anaconda3\lib\site packages\scipy\optimize\\u differentiable\u functions.py
>在初始(self,fun,x0,args,grad,hess,finite_diff_rel_step,
>有限差分界(ε)
> 74
>75 self.\u update\u fun\u impl=update\u fun
>-->76 self.\u update\u fun()
> 77
>78#梯度评估
>
>~\Anaconda3\lib\site packages\scipy\optimize\\u differentiable\u functions.py
>在"更新"中(自我)
>164定义更新乐趣(自我):
>165如果未更新self.f_:
>-->166 self.\u update\u fun\u impl()
>167 self.f_updated=真
> 168
>
>~\Anaconda3\lib\site packages\scipy\optimize\\u differentiable\u functions.py
>在更新_fun()中
> 71
>72 def更新_fun():
>-->73 self.f=fun\u包装(self.x)
> 74
>75 self.\u update\u fun\u impl=update\u fun
>
>~\Anaconda3\lib\site packages\scipy\optimize\\u differentiable\u functions.py
>在fun_包装中(x)
>68 def fun_包装(x):
>69.nfev+=1
>--->70返回乐趣(x,*args)
> 71
>72 def更新_fun():
>
>在f(x)中
> 3
>4 def f(x):
>--->5个返回火炬。标准(x)
> 6
>7 x=[1.0,1.0]
>
>norm中的~\Anaconda3\lib\site packages\torch\functional.py(输入,p,
>dim、keepdim、out、dtype)
>738(张量(3.7417),张量(11.2250))
> 739 """
>-->740 ndim=input.dim()
> 741
>742#捕获默认情况
>
>AttributeError:'numpy.ndarray'对象没有属性'dim'
我不确定为什么会发生这种情况,因为我不认为我正在将任何东西转换为numpy.ndarray
任何帮助都将不胜感激。您可以使用NumPy而不是torch
import numpy
from scipy.optimize import minimize
def f(x):
return numpy.linalg.norm(x)
x = numpy.array([1.0, 1.0])
y = minimize(f, x)
print(y)
你可以用NumPy代替手电筒
import numpy
from scipy.optimize import minimize
def f(x):
return numpy.linalg.norm(x)
x = numpy.array([1.0, 1.0])
y = minimize(f, x)
print(y)
你能用
numpy
代替torch
吗?你能用numpy
代替torch
吗?谢谢,这是可行的。不过,我正在尝试将这一点应用到一个使用大量张量的项目中。我可能不需要将张量转换成numpy数组,但这可能会有指导意义我首先要了解导致错误的原因。scipy
是基于numpy
的,minimize
将您的x
转换为ndarray
,并将其传递给f
。因此f
必须使用ndarray
,并返回一个标量。感谢这可以工作。不过,我正在尝试应用这适用于一个使用大量张量的项目。我可能不需要将张量转换为numpy数组,但首先了解导致错误的原因可能会很有帮助。scipy
基于numpy
,minimize
将x
转换为ndarray
,并通过that到f
。因此f
必须使用ndarray
,并返回标量。