Py学习  »  问与答

Python菜鸟关于神经网络的提问

薄荷绿 • 6 年前 • 570 次点击  

请问,以下代码是不是一个完整的神经网络代码?为什么计算出来的准确率不管迭代多少次都是0.5?是我的数据问题?还是这个代码问题?

class NeuralNetwork: def init(self,layers):#这里是三层网络,列表[64,100,10]表示输入,隐藏,输出层的单元个数 #初始化权值,范围1~-1 self.V=np.random.random((layers[0]+1,layers[1]))2-1#隐藏层权值(65,100),之所以是65,因为有偏置W0 self.W=np.random.random((layers[1],layers[2]))2-1#(100,10) def train(self,X,y,lr=0.1,epochs=10000): #lr为学习率,epochs为迭代的次数 #为数据集添加偏置 temp=np.ones([X.shape[0],X.shape[1]+1]) temp[:,0:-1]=X X=temp#这里最后一列为偏置

    for n in range(epochs+1):
        i=np.random.randint(X.shape[0])#随机选取一行数据(一个样本)进行更新
        x=X[i]
        x=np.atleast_2d(x)#转为二维数据

        L1=sigmoid(np.dot(x,self.V))#隐层输出(1,100)
        L2=sigmoid(np.dot(L1,self.W))#输出层输出(1,10)

        L2_delta=(y[i]-L2)*dsigmoid(L2)#(1,10)
        L1_delta=L2_delta.dot(self.W.T)*dsigmoid(L1)#(1,100),这里是数组的乘法,对应元素相乘

        #更新
        self.W+=lr*L1.T.dot(L2_delta)#(100,10)
        self.V+=lr*x.T.dot(L1_delta)#

        #每训练1000次预测准确率
        if n%1000==0: 
            predictions=[]
            for j in range(features_test.shape[0]):
                out=self.predict(features_test[j])#用验证集去测试
                predictions.append(np.argmax(out))#返回预测结果
            accuracy=np.mean(np.equal(predictions,labels_test))#求平均值
            print('epoch:',n,'accuracy:',accuracy)

def predict(self,x):
    #添加转置,这里是一维的
    temp=np.ones(x.shape[0]+1)
    temp[0:-1]=x
    x=temp
    x=np.atleast_2d(x)

    L1=sigmoid(np.dot(x,self.V))#隐层输出
    L2=sigmoid(np.dot(L1,self.W))#输出层输出
    return L2

#创建神经网络

nm=NeuralNetwork([13,100,1]) nm.train(os_features,os_labels,epochs=20000)

epoch: 0 accuracy: 0.5 epoch: 1000 accuracy: 0.5 epoch: 2000 accuracy: 0.5 epoch: 3000 accuracy: 0.5 epoch: 4000 accuracy: 0.5 epoch: 5000 accuracy: 0.5 epoch: 6000 accuracy: 0.5 epoch: 7000 accuracy: 0.5 epoch: 8000 accuracy: 0.5 epoch: 9000 accuracy: 0.5 epoch: 10000 accuracy: 0.5 epoch: 11000 accuracy: 0.5 epoch: 12000 accuracy: 0.5 epoch: 13000 accuracy: 0.5 epoch: 14000 accuracy: 0.5 epoch: 15000 accuracy: 0.5 epoch: 16000 accuracy: 0.5 epoch: 17000 accuracy: 0.5 epoch: 18000 accuracy: 0.5 epoch: 19000 accuracy: 0.5 epoch: 20000 accuracy: 0.5

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47408