如何在 scipy.optimization 函数上强制增加步数?

我有一个函数 compare_images(k, a, b) 比较两个二维数组。ab

在函数里面,我应用了一个 gaussian_filtersigma=ka 我的想法是估计多少我必须平滑图像 a 为了使其与图像相似 b

问题是我的函数 compare_images 只有在以下情况下才会返回不同的值 k 变化过大 0.5如果我这样做 fmin(compare_images, init_guess, (a, b) 它通常会被卡在 init_guess 值。

我认为问题在于 fmin (和 minimize)往往从很小的步骤开始,在我的例子中,这将重现完全相同的返回值。compare_images所以方法认为它已经找到了一个最小值。只会试几次。

有什么方法可以强制 fmin 或任何其他最小化函数,从 scipy 来走更大的步子?还是有什么方法更适合我的需求?

EDIT.我找到了一个临时的解决方案。我找到了一个临时的解决方法 首先,按照建议,我使用了 xtol=0.5 和更高,作为论据,以 fmin.即使这样,我还是有一些问题,有几次 fmin 将返回 init_guess.然后我创建了一个简单的循环,这样如果 fmin == init_guess我将产生另一个,随机的 init_guess 并再次尝试。

当然很慢,但现在我已经让它运行了。我的所有数据都需要20h左右才能运行,但我不需要再做一次。

总之,为了更好地解释这个问题,让那些仍然有兴趣找到更好的解决方案的人。

  • 我有两张图片 AB含有一些科学数据。
  • A 看起来像几个具有可变值的点(它是一个矩阵,其中每个值点代表事件发生的地点和它的强度)。
  • B 看起来像一个平滑的热图(它是观察到的出现密度)
  • B 看起来就像你应用高斯滤波到 A 带一点半随机噪声。
  • 我们近似于 B 通过应用常数的高斯滤波器 sigmaA. 这个 sigma 是视觉上选择的,但只对某一类图像有效。
  • 我试图获得一个最佳的 sigma 的关系,所以后来我可以找到一些关系的 sigma 以及每张图片中显示的事件类别。

总之,谢谢你的帮助

解决方案:

快速检查:你可能真的意味着 fmin(compare_images, init_guess, (a,b))?

如果 gaussian_filter 如你所说,你的函数是片状常数,这意味着依赖导数的优化器(即大多数优化器)都被淘汰了。你可以试试全局优化器,比如 退火或在一个合理的范围内进行蛮力搜索。k‘s.

然而,正如你所描述的问题, 在一般情况下,将只有一个明确的,全球最低的。compare_images 如果 b 是一个平滑版的 a. 如果你想确定平滑的数量,你的方法是有意义的。a 这使得两张图片最为相似。

如果问题是 “图像有多相似”,那么我认为像素上的比较(也许有一点平滑)是最好的方法。根据我们所讨论的图像,可能需要先对齐图像(例如比较照片)。请说明 🙂

编辑: 另一个可能会有帮助的想法:重写compare_images,使其计算两个版本的smoothed-。a — 一个是sigma=floor(k) 和一个有 ceil(k) 即把k取整到下一个较小的高位int)。然后计算 a_smooth = a_floor*(1-kfrac)+a_ceil*kfrac,与 kfrack. 这样一来,比较函数就变成了连续的。k.

祝您好运!

给TA打赏
共{{data.count}}人
人已打赏
未分类

PHP。使用header()重定向相对路径的问题

2022-9-10 7:20:43

未分类

'行'不可能是一个变量或函数名 脚本'Advanced RSI Strtg'已被保存。

2022-9-10 7:20:45

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索