【发布时间】:2020-03-16 12:20:31
【问题描述】:
我正在尝试使用scipy.optimize.minimize 在本地最小化一个复杂的函数。由于我需要良好的梯度才能顺利执行局部优化,但函数非常复杂,以便手动编写导数,我决定使用Autoptim 作为中间人来处理我的使用自动微分包Autograd进行优化以获得梯度。
在我安装了包(以及 Autograd)之后,我打开了我的 python 终端以运行一些初步测试,以检查 scipy、autograd 和 autoptim 之间的安装和包集成是否顺利。然后,Autooptim 在导入时立即引发错误(在import autoptim 行)。由于解释器给出了引发的所有异常堆栈,因此我进入了更深层,看看是哪一行启动了停止解释器的级联。
我找到的行是autoptim.py的第88行:
87. optim_vars = _convert_to_tuple(optim_vars)
88. precon_optim_vars = precon_fwd(*optim_vars,*args)
89. n_args = len(args)
Python 解释器引发了无效语法异常,这意味着该行中的某些内容不是“用 Python”编写的。我检查了是否有一些未闭合的括号,但事实并非如此。我正在使用 Python 3,所以我认为那行中的某些内容可能是用 Python 2 语法编写的,并且它为 Python 3 解释器注册了错误,但据我了解,两个版本之间的差异非常小并且有一些(尽管不完整)两者之间的追溯兼容性。
那是什么?我在这里错过了什么?
那行有什么问题?
这是python解释器中导入行的回溯
>>> import autoptim
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/dist-packages/autoptim/__init__.py", line 6, in <module>
from .autoptim import minimize # noqa
File "/usr/local/lib/python3.4/dist-packages/autoptim/autoptim.py", line 95
return objective_function(*optim_vars, *args)
^
SyntaxError: invalid syntax
【问题讨论】:
-
是否定义了
args?precon_fwd的签名是什么? -
您确定确定您正在使用 Python 3 运行此代码吗?与您的猜测相反:Python 2 无法识别函数调用中重复使用
*参数。 -
@ScottHunter Args 是一个元组,定义为 Autoptim 的“最小化”函数的参数之一,该函数包含该行。 “签名”是什么意思?
-
@chepner 是的,我很肯定我正在使用 Python3 来运行代码。
-
啊,你的 Python 3 版本不够新。
标签: python python-3.x syntax