鱼C论坛

 找回密码
 立即注册
查看: 5181|回复: 1

这种问题 怎么找IndexError: index 450 is out of bounds for axis 0 with size 450

[复制链接]
发表于 2017-7-30 14:46:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import numpy as np

def tanh(x):
    return np.tanh(x)
def tanh_deriv(x):
    return 1.0-np.tanh(x)*np.tanh(x)
def logistic(x):
    return 1/(1+np.exp(-x))
def logistic_deriv(x):
    return logistic*(1-logistic(x))

class NeuralNetwork:#定义一个类
    def __init__(self,layers,activation='tanh'):
        if activation=='logistic':
            self.activation=logistic
            self.activation_deriv=logistic_deriv

        elif activation=='tanh':
            self.activation=tanh
            self.activation_deriv=tanh_deriv

        #对权重初始化
        self.weights=[]
        for i in range(1,len(layers)-1):
                       self.weights.append((2*np.random.random((layers[i-1]+1,layers[i]+1))-1)*0.25)
                       self.weights.append((2*np.random.random((layers[i]+1,layers[i+1]))-1)*0.25)

    def fit(self,X,y,learning_rate=0.2,epochs=1000):
        X=np.atleast_2d(X)#atlest_2d函数:确认x至少二位的矩阵
        temp=np.ones([X.shape[0],X.shape[1]+1])#初始化矩阵全是1(行数,列数+1是为了有B这个偏向)
        temp[:,0:-1]=X#行全选,第一列到倒数第二列
        X=temp
        y=np.array(y)
                     #数据结构转换把list转换成array的形式
        for k in range(epochs):
                     #随机选取一行,对神经网络进行更新
                     i=np.random.randint(X.shape[0])
                     a=[X[i]]
                     #完成所有的正向更新
                     for l in range(len(self.weights)):
                         a.append(self.activation(np.dot(a[l],self.weights[l])))
                     #向前传播,得到每个节点的输出结果
                     error=y[i]-a[-1]#最后一层错误率
                     deltas=[error*self.activation_deriv(a[-1])]#输出层误差
                     layerNum=len(a)-2
                     for j in range(layerNum,0,-1):
                         deltas.append(deltas[-1].dot(self.weights[j].T)*self.activation_deriv(a[j]))
                     deltas.reverse()
                     for i in range(len(self.weights)):
                         layer=np.atleast_2d(a[i])
                         delta=np.atleast_2d(deltas[i])
                         self.weights[i] +=learning_rate*layer.T.dot(delta)
    def predict(self,x):
                     x=np.array(x)
                     temp=np.ones(x.shape[0]+1)
                     temp[0:-1]=x
                     a=temp
                     for l in range(0,len(self.weights)):
                         a=self.activation(np.dot(a,self.weights[l]))
                     return a


from sklearn.datasets import load_digits
import numpy as np
from accidentNN import NeuralNetwork
from numpy import genfromtxt
from sklearn.metrics import confusion_matrix,classification_report
from sklearn.preprocessing import LabelBinarizer
from sklearn.cross_validation import train_test_split

digits=load_digits()
X=digits.data
y=digits.target
X-=X.min()
X/=X.max()

nn=NeuralNetwork([64,100,10],'tanh')
X_train,X_test,y_train,y_test=train_test_split(X,y)
labels_train=LabelBinarizer().fit_transform(y_train)
labels_test=LabelBinarizer().fit_transform(y_test)
print("start fitting")
nn.fit(X_train,labels_train,epochs=3000)
predictions=[]
for i in range(X_train.shape[0]):
    o=nn.predict(X_test[i])
    predictions.append(np.argmax(o))

a=confusion_matrix(y_test,predictions)
print(a)
b=classification_report(y_test,predictions)
print(b)
  报错      o=nn.predict(X_test[i])
IndexError: index 450 is out of bounds for axis 0 with size 450



求 大佬 帮忙 看一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-30 15:51:49 | 显示全部楼层
450 size,最大应该是449吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-22 17:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表