python - 如何使用 scipy 查找优化函数的参数?

标签 python numpy machine-learning scipy scikit-learn

我正在尝试复制这篇论文:Global motion estimation from coarsely sampled motion vector field and the applications

我需要找到参数m0, m1, m2....., m7 给定图像 x1_1 和 x1_2 以及方程为

Example data.

enter image description here

其中 x'{x1_2[1, :, :]} 和 y'{x1_2[0, :, :]} 是 x1_2 和 x,y x1_1 是相同样式的 x1_1。

我引用了this post中的例子来实现这一点。

谁能帮我找到这些参数吗?

根据评论和 example of leastsq function 进行编辑.

下面给出了更改后的程序,下面给出了输出

import os
import sys
import numpy as np
import scipy
from scipy.optimize import leastsq


def peval (inp_mat,p):
    m0,m1,m2,m3,m4,m5,m6,m7 = p
    out_mat = np.zeros(inp_mat.shape,dtype=np.float32)
    mid = inp_mat.shape[0]/2
    for xy in range(0,inp_mat.shape[0]):
        if (xy<(inp_mat.shape[0]/2)):
            out_mat[xy] = ( (  (inp_mat[xy+mid]*m0)+(inp_mat[xy]*m1)+ m2 ) /( (inp_mat[xy+mid]*m6)+(inp_mat[xy]*m7)+1 ) )
        else:
            out_mat[xy] = ( (  (inp_mat[xy]*m3)+(inp_mat[xy-mid]*m4)+ m5 ) /( (inp_mat[xy]*m6)+(inp_mat[xy-mid]*m7)+1 ) )
    return out_mat

def residuals(p, out_mat, inp_mat):
    m0,m1,m2,m3,m4,m5,m6,m7 = p
    err=np.zeros(inp_mat.shape,dtype=np.float32)
    if (out_mat.shape == inp_mat.shape):
        for xy in range(0,inp_mat.shape[0]):
            err[xy] =  err[xy]+ (out_mat[xy] -inp_mat[xy])
        return err




f = open('/media/anilil/Data/Datasets/repo/txt_op/vid.txt','r')
x = np.loadtxt(f,dtype=np.int16,comments='#',delimiter='\t')
nof = x.shape[0]/72 # Find the number of frames
x1 = x.reshape(-1,60,40)
x1_1= x1[0,:,:].flatten()
x1_2= x1[1,:,:].flatten()

x= []
y= []

for xy in range(1,50,1):
    y.append(x1[xy,:,:].flatten())
    x.append(x1[xy-1,:,:].flatten())

x=np.array(x,dtype=np.float32)
y=np.array(y,dtype=np.float32)
length =  x1_1.shape#initail guess
p0 = np.array([1,1,1,1,1,1,1,1],dtype=np.float32)

abc=leastsq(residuals, p0,args=(y,x))
print ('Size of first matrix is '+str(x1_1.shape))
print ('Size of first matrix is '+str(x1_2.shape))

print ("Done with program")

输出

ValueError: object too deep for desired array
Traceback (most recent call last):
  File "/media/anilil/Data/charm/mv_clean/.idea/nose_reduction_mpeg.py", line 49, in <module>
    abc=leastsq(residuals, p0,args=(y,x))
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 378, in leastsq
    gtol, maxfev, epsfcn, factor, diag)
minpack.error: Result from function call is not a proper array of floats.

最佳答案

查看 documentation of leastsqthe example .

您需要定义目标函数,以便它将所有参数作为第一个参数,然后是其他输入:

def function (M, inp_mat):
    m0, m1, m2, m3, m4, m5, m6, m7 = M
    out_mat = np.zeros(inp_mat.shape)
    ...

其他参数(在您的情况下为inp_mat)作为args传递给优化函数:

result = opt.leastsq(function, x0, args=(inp_mat), Dfun=None, full_output=0, col_deriv=0, ftol=1.49012e-08, xtol=1.49012e-08, gtol=0.0, maxfev=0, epsfcn=None, factor=100, diag=None)

我不知道 inp_mat 应该是什么。它很可能与数据有关,因此 args=(x1) 可能就是您想要的。

最后,您希望检索优化结果并对其进行处理。

关于python - 如何使用 scipy 查找优化函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35412165/

相关文章:

python - Deeplab v3+ 元组组件中的形状不匹配

python - 使用 scapy 读取 PCAP 文件

python - 不同的切片对相同的元素给出不同的不等式

python - TypeError : mean() got an unexpected keyword argument 'dtype' # Pandas. 数据帧

python - 按列解压 NumPy 数组

machine-learning - 反向传播和前馈神经网络有什么区别?

python - 如何检查 .xls 和 .csv 文件是否为空

python - SQLAlchemy - 过滤子查询负载

python - 如何使用 scikit learn 获取特定文档的主题概率?

tensorflow - 如何使用 Keras 卡住特定层的权重?