我正在尝试实现一个有大约2000个输入的神经网络。你知道吗
为了检查iris数据集,我做了一些测试,它似乎可以工作,但是当我运行测试时,它抛出错误的结果,大多数时候,对于所有的测试,我对每个数据都获得相同的输出。我担心,如果它是某种程度上有关的偏见过程和梯度更新,也许你们可以发现错误或给我一些建议。 下面是反向传播过程的部分代码。你知道吗
def backward_propagation(parameters, cache, X, Y):
#weights
W1 = parameters['W1']
W2 = parameters['W2']
#Outputs after activation function
A1 = cache['A1']
A2 = cache['A2']
dZ2= A2 - Y
dW2 = np.dot(dZ2, A1.T)
db2 = np.sum(dZ2, axis=1, keepdims=True)
dZ1 = np.multiply(np.dot(W2.T, dZ2), 1 - np.power(A1, 2))
dW1 = np.dot(dZ1, X.T)
db1 = np.sum(dZ1, axis=1, keepdims=True)
gradient = {"dW1": dW1,
"db1": db1,
"dW2": dW2,
"db2": db2}
return gradient
如果您不提供预测和转发功能,则很难看到它是否真的正常工作。你知道吗
这样我们就可以确切地知道正在做什么,并查看反向传播是否真的正确。你知道吗
你没有正确地导出sigmoid函数,我认为你也没有正确地应用链式规则。你知道吗
从我看到的情况来看,您正在使用此体系结构:
梯度为(应用链式法则):
在您的代码中,它按以下方式转换:
我检查是否执行以下代码:
如果上次激活是一个sigmoid,则该值将介于0和1之间。你应该记住,通常这是用来表示一个概率和交叉熵通常是作为损失使用。你知道吗
相关问题 更多 >
编程相关推荐