gpt4 book ai didi

python - 神经网络损失函数和权重矩阵不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:34 24 4
gpt4 key购买 nike

我正在尝试学习使用矩阵的神经网络,为此我决定给自己设定一个挑战,训练一个简单的神经网络来输出 0.5*sigma(x)。

我的猜测是这已经足够了,因为 W 需要为 0.5。

enter image description here

但是我遇到了有关损失函数和权重的问题。

import sys
import math
import numpy as np
import random

@np.vectorize
def dlossbydw(X,W,Y):
t = np.dot(X,W)
Yhat = sig(t)
n = Y-Yhat
l = 2*n * -1 * sig(t)*(1-sig(t))*X
return l

@np.vectorize
def sig(Z):
return (1.0/ (1.0 + math.exp(-Z)))

@np.vectorize
def toMatch(Z):
return 0.5*sig(Z)

def main(args):
#This is the matrix that should be output
Y = np.array([[toMatch(x)] for x in range(-5,5)])

#This is the input matix
X = np.array([[x] for x in range(-5,5)])

random.seed(5)
r = random.random()

#And this is the weight matrix
W = np.array([r])

rate = 1e-1
for i in range(1000):
print("dlossbydw: " + str(dlossbydw(X,W,Y)))
#???

print("expected out:" + str(Y))
print("post training:" + str(sig(np.dot(X,W))))

if(__name__=="__main__"):
main(sys.argv[1:])

权重矩阵 W 的维度为 1x1(只有一个权重连接输入神经元和输出),但是当我进行数学计算以计算相对于 w 的损失时,它给了我一个 10x1 矩阵,我的我猜它会给我输入输入矩阵的每个 X 的损失,但我该怎么办?损失中的每个值都与上一个不同,考虑到它们都需要相同的 W 偏移(朝向 0.5),这很奇怪。

enter image description here

我一定是误解了什么,或者是因为一个简单的错误而感到困惑。

有人可以澄清我在这里做错了什么吗?

我应该在标记的地方做什么?

这是正确的吗?

谢谢。

最佳答案

如果您的神经网络具有一个权重、一个输入、无偏差和一个 sigmoid 激活函数,则输出计算如下:

y = sig(w*x)

如果您尝试匹配 0.5*sig(x),则权重 w 不一定是 0.5。

我玩了一下你的代码:

确保您的配重形状正确。目前它有 (1,)。我解决了这个问题:

random.seed(5)
W = np.array([random.random()])
W.shape=(1,1)

你的数学在其他方面是正确的。问题是,您必须使用 numpy 来区分组件乘法和点积,如下所示:

 l = np.dot(X.T, 2*n * -1 * sig(t)*(1-sig(t)))

并摆脱 dlossbydwnp.vectorize 因为它不应该应用于向量的各个元素,因为您最终需要点积来获得一个标量值。

l 现在是一个 1x1 矩阵,它为您提供适应权重的梯度。

for i in range(1000):
l = dlossbydw(X,W,Y)
print("dlossbydw: " + str(l))
W = W-l

关于python - 神经网络损失函数和权重矩阵不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com