社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

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

薄荷绿 • 4 年前 • 458 次点击  

请问,以下代码是不是一个完整的神经网络代码?为什么计算出来的准确率不管迭代多少次都是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
 
458 次点击