Python-矩阵乘法代码问题

问题描述 投票:1回答:1

我有这个练习,可以用一个输入层和一个隐藏层来构建一个简单的神经网络。我在下面的代码中执行了一个简单的矩阵乘法,但是这样做并不像在进行乘法时那样用手。我的代码在做什么错?

          #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]

非常感谢您的帮助!

python matrix-multiplication
1个回答
1
投票

您快到了!原因只是一个简单的缩进:

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
© www.soinside.com 2019 - 2024. All rights reserved.