Coursera deeplearning作业代码的关于数组乘法的相关问题

这个作业是deeplearning专项课程第五节课序列模型的作业。

图片说明

对于这些公式,网上答案是这样的:

 dot = da_next*np.tanh(c_next)*ot*(1-ot)
    dcct =(dc_next * it + ot * (1 - np.square(np.tanh(c_next))) * it * da_next) * (1 - np.square(cct))
    dit = (dc_next * cct + ot * (1 - np.square(np.tanh(c_next))) * cct * da_next) * it * (1 - it)
    dft = (dc_next * c_prev + ot * (1 - np.square(np.tanh(c_next))) * c_prev * da_next) * ft * (1 - ft)

图片说明

都是用乘法符号,就是按照式子来的

但是到了下面的公式实现:
图片说明

然后实现的方法又变成了用np.dot

  dWf = np.dot(dft,concat.T)
    dWi = np.dot(dit,concat.T)
    dWc = np.dot(dcct,concat.T)
    dWo = np.dot(dot,concat.T)

到了下面的公式,有的用np.dot,有的用*

图片说明

 da_prev = np.dot(parameters["Wf"][:, :n_a].T, dft) + np.dot(parameters["Wc"][:, :n_a].T, dcct) +  np.dot(parameters["Wi"][:, :n_a].T, dit) + np.dot(parameters["Wo"][:, :n_a].T, dot)
    dc_prev = dc_next*ft+ot*(1-np.tanh(c_next)**2)*ft*da_next
    dxt = np.dot(parameters["Wf"][:, n_a:].T, dft) + np.dot(parameters["Wc"][:, n_a:].T, dcct) +  np.dot(parameters["Wi"][:, n_a:].T, dit) + np.dot(parameters["Wo"][:, n_a:].T, dot)

就是第一个和第三个用np.dot,第二个用*

哪位大神能详细说明一下怎么判断用哪种嘛

叉乘和点乘的数学意义不同,具体用哪一个,要看数学公式本身的意义

乘积(*)是矩阵每行每列对应元素的相乘
点积(dot)的结果的每个元素ij是第一个矩阵第i行和第二个矩阵第j列的乘积的和