У меня есть это упражнение, в котором я могу построить простую нейронную сеть с одним входным слоем и одним скрытым слоем ... Я сделал приведенный ниже код для выполнения простого умножения матриц, но он делает это неправильно, как когда я делаю умножение вручную. Что я делаю не так в своем коде?
#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 ]
Мы будем благодарны за вашу помощь!