神经网络未能学习 – python

我实现了一个神经网络,但它不起作用。有人能帮我找出问题所在吗?我尝试了简单的与、或、异或函数。成本函数似乎在减少,但在分类时失败了,我将迭代次数设置为50,000,更改了alpha值(0.1,0.01,0.001),编写了两种解决方案,一种是向量化方式,另一种是一次一个观察的方式。

这里是笔记本的查看器:http://nbviewer.ipython.org/gist/Abreu0101/05f6fe35b08eac1162c7

数据集:

def loadDataSet():    X = np.array([[1,1,1],[1,0,1],[1,1,0],[1,0,0]])    y = np.array([[1],[0],[0],[0]])    return X,y

代码:

X,y = loadDataSet()n_observations,n_features = X.shapeweights_1 = np.random.rand(2,3)weights_2 = np.random.rand(1,3)maxIter = 90000for currentIter in range(maxIter):    costError(weights_1,weights_2,currentIter)    #前馈    z_1 = X.dot(weights_1.T)    a_1 = np.hstack((np.ones((n_observations,1)),sigmoid(z_1)))    z_2 = a_1.dot(weights_2.T)    a_2 = sigmoid(z_2)    #反向传播    d_2 = (y - a_2) * sigmoid(z_2,derivate=True)    d_1 = (d_2.dot(weights_2))[:,1:]    alpha = 1 #学习率    weights_2 = weights_2 + alpha * d_2.T.dot(a_1)    weights_1 = weights_1 + alpha * d_1.T.dot(X)

成本函数:

def costError(w_1,w_2,currentIter):    z_1 = X.dot(w_1.T)    a_1 = np.hstack((np.ones((n_observations,1)),sigmoid(z_1)))    z_2 = a_1.dot(w_2.T)    a_2 = sigmoid(z_2)    sumError = np.sum(a_2)    print("错误 : %f , 迭代次数: %d"%(sumError,currentIter))

提前感谢。


回答:

1) 将d_2和d_1更改为:

d_2 = (y - a_2)# * sigmoid(z_2,derivate=True)d_1 = (d_2.dot(weights_2))[:,1:]*sigmoid(z_1,derivate=True)

事实上,我不知道为什么* sigmoid(z_2,derivate=True)需要被注释掉,但没有它神经网络收敛得更快,我看到的每个神经网络实现都没有在输出层乘以sigmoid函数的梯度。

2) sumError = np.sum(a_2)是什么意思?你需要考虑预测值和实际值之间的差异:

sumError = np.mean((y-a_2)**2)

你的导数是为这个损失函数计算的。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注