Python - 矩阵乘法代码问题

Python - matrix multiplication code problem

我在这个练习中构建了一个具有一个输入层和一个隐藏层的简单神经网络...我编写了下面的代码来执行一个简单的矩阵乘法,但它没有像我那样正确地执行手工做乘法。我在我的代码中做错了什么?

          #toes %win  #fans
ih_wgt = ([0.1, 0.2, -0.1],  #hid[0]
           [-0.1, 0.1, 0.9],  #hid[1]
           [0.1, 0.4, 0.1])  #hid[2]

          #hid[0] hid[1] #hid[2]
ho_wgt = ([0.3, 1.1, -0.3], #hurt?
           [0.1, 0.2, 0.0],  #win?
           [0.0, 1.3, 0.1])  #sad?

weights = [ih_wgt, ho_wgt]

def w_sum(a,b):
    assert(len(a) == len(b))
    output = 0
    for i in range(len(a)):
        output += (a[i] * b[i])
    return output

def vect_mat_mul(vec, mat): 
  assert(len(vec) == len(mat)) 
  output = [0, 0, 0]
  for i in range(len(vec)): 
    output[i]= w_sum(vec, mat[i])
    return output

def neural_network(input, weights):
  hid = vect_mat_mul(input, weights[0])
  pred = vect_mat_mul(hid, weights[1])
  return pred


toes = [8.5, 9.5, 9.9, 9.0]
wlrec = [0.65, 0.8, 0.8, 0.9]
nfans = [1.2, 1.3, 0.5, 1.0]

input = [toes[0],wlrec[0],nfans[0]]

pred = neural_network(input, weights)
print(pred)

我的代码的输出是:

[0.258, 0, 0]

我尝试手工解决的方法如下: 我将输入向量 [8.5, 0.65, 1.2] 与输入权重矩阵

相乘
ih_wgt = ([0.1, 0.2, -0.1],  #hid[0]
           [-0.1, 0.1, 0.9],  #hid[1]
           [0.1, 0.4, 0.1])  #hid[2]

[0.86, 0.295, 1.23]

然后将输出向量作为输入向量输入网络,然后乘以隐藏权重矩阵

ho_wgt = ([0.3, 1.1, -0.3], #hurt?
           [0.1, 0.2, 0.0],  #win?
           [0.0, 1.3, 0.1])  #sad?

正确的输出预测:

[0.2135, 0.145, 0.5065]

非常感谢您的帮助!

你就快完成了!只有一个简单的缩进是原因:

def vect_mat_mul(vec, mat): 
  assert(len(vec) == len(mat)) 
  output = [0, 0, 0]
  for i in range(len(vec)): 
    output[i]= w_sum(vec, mat[i])
  return output                      # <-- This one was inside the for loop