简体   繁体   English

操作数不能与形状 (100,) (8,8) 一起广播

[英]Operands could not be broadcast together with shapes (100,) (8,8)

I was making Baysien model Type-II to finding the maximum likelihood to estimate “most probable” values for hyper-parameters.我正在制作 Baysien model Type-II,以找到估计超参数“最可能”值的最大可能性。 After I try to run the code below I got some of error that shown in compute_posterior function.在我尝试运行下面的代码后,我得到了一些显示在 compute_posterior function 中的错误。 It might be something wrong with the shape.形状可能有问题。

def compute_posterior(PHI, t, alph, s2):
    M = PHI.shape[1]
    beta = 1/s2
    H = beta*(PHI.T @ PHI) + alph*np.eye(M)
    SIGMA = np.linalg.inv(H)
    Mu = beta * (SIGMA @ (PHI.T @ t))
    #
    return Mu, SIGMA


# Marginal log likelihood
#
# Version 1 Log Marginal (ideal)
#
def compute_log_marginal(PHI, t, alph, s2):
    #
    # Exploit the shape of C and the fact that M < N (usually)
    #
    N, M = PHI.shape
    beta = 1 / s2
    Mu, SIGMA = compute_posterior(PHI, t, alph, s2)
    #
    # Constant factor
    #
    logML = -N * np.log(2 * np.pi)
    #
    # log determinant factor (log|C|)
    #
    # If SIGMA becomes singular, sgn<0
    #
    sgn, logdet = np.linalg.slogdet(SIGMA)
    #
    if sgn < 0:
        print("Error with alpha={0}, s2={1}".format(alph, s2))
        raise np.linalg.LinAlgError("logdet sign is negative - something is wrong!")
    #
    logML += logdet + N*np.log(beta) + M*np.log(alph)
    #
    # data term (t'Ct)
    #
    logML -= beta * (t.T @ (t - PHI @ Mu))
    #
    logML = logML / 2.0
    #
    return logML

log_alph = np.linspace(-3, 6, n)
log_s2 = np.linspace(-4, 4, n)

x = df.values[:, 0:8]
t = df.values[:, 8]

n  = 100

Z = np.empty((n, n))
Z_max = []
al = []
rr = []
for i, a in enumerate(log_alph):
    for j, r in enumerate(log_s2):
        Z[i, j] = compute_log_marginal(x,t,log_alph,log_s2)
        Z_max.append(Z[i, j])
        maximum = max(Z_max)
        print(maximum)

#         if Z[i, j] == -11.627510277032485:
#             al.append(a)
#             rr.append(r)

# maximum = max(Z_max)
# print(al)
# print(rr)
# print(maximum)
# maximum = -11.627510277032485



plt.contourf(log_a, log_r, Z.T)
print('The maximum point is:',maximum )
print('The max log_alpha is:',al[0] )
print('The max log_r  is:',rr[0] )
plt.xlabel('log alpha')
plt.ylabel('log r')
plt.title('Contour of log alpha and log r')

After I compile I got this error, I still don't know how to figure it out编译后出现此错误,我仍然不知道如何解决

'
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-260-c7f0396b4046> in <module>
     14 for i, a in enumerate(log_alph):
     15     for j, r in enumerate(log_s2):
---> 16         Z[i, j] = compute_log_marginal(x,t,log_alph,log_s2)
     17         Z_max.append(Z[i, j])
     18         maximum = max(Z_max)

<ipython-input-233-45cfae272a38> in compute_log_marginal(PHI, t, alph, s2)
     19     N, M = PHI.shape
     20     beta = 1 / s2
---> 21     Mu, SIGMA = compute_posterior(PHI, t, alph, s2)
     22     #
     23     # Constant factor

<ipython-input-233-45cfae272a38> in compute_posterior(PHI, t, alph, s2)
      2     M = PHI.shape[1]
      3     beta = 1/s2
----> 4     H = beta*(PHI.T @ PHI) + alph*np.eye(M)
      5     SIGMA = np.linalg.inv(H)
      6     Mu = beta * (SIGMA @ (PHI.T @ t))

ValueError: operands could not be broadcast together with shapes (100,) (8,8) 

'
H = beta*(PHI.T @ PHI) + alph*np.eye(M)

split operations in this line and figure out which one is throwing errors If your logic is ok, check if all matrices have the shape that you expect.拆分这一行中的操作并找出哪个抛出错误如果您的逻辑正常,请检查所有矩阵是否具有您期望的形状。 If shapes are ok note that @ is matrix multiplication and * is elementwise multiplication.如果形状没问题,请注意 @ 是矩阵乘法,* 是元素乘法。 Nex time you post code try to include smaller part that is more readable or include code that everyone will be able to execute, to debug it.下次您发布代码时,请尝试包含更易读的较小部分或包含每个人都可以执行的代码,以对其进行调试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ValueError:操作数不能与形状(3,)(100,)一起广播 - ValueError: operands could not be broadcast together with shapes (3,) (100,) 操作数不能与形状 (100,3) (100,) 一起广播,为什么? - operands could not be broadcast together with shapes (100,3) (100,) , why? ValueError:操作数不能与形状(1,2)一起广播(20,100) - ValueError: operands could not be broadcast together with shapes (1,2) (20,100) ValueError: 操作数无法与形状 (100,) (99,) 一起广播 Python - ValueError: operands could not be broadcast together with shapes (100,) (99,) error in Python 操作数无法与形状 (100,4) (4,1) 一起广播 - Operands could not be broadcast together with shapes (100,4) (4,1) Pandas:ValueError - 操作数无法与形状一起广播 - Pandas: ValueError - operands could not be broadcast together with shapes Python ValueError:操作数无法与形状一起广播 - Python ValueError: operands could not be broadcast together with shapes ValueError: 操作数无法与形状 (7,) (6,) (7,) 一起广播 - ValueError: operands could not be broadcast together with shapes (7,) (6,) (7,) ValueError: 操作数无法与形状一起广播 (7410,) (3,) - ValueError: operands could not be broadcast together with shapes (7410,) (3,) 操作数不能与形状一起广播(256)(257) - operands could not be broadcast together with shapes (256) (257)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM