首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深度学习IndexError:数组索引过多

深度学习IndexError:数组索引过多
EN

Stack Overflow用户
提问于 2015-06-23 23:57:34
回答 1查看 1.2K关注 0票数 2

我正在尝试对系统进行一些数据训练,Sound_Fc是一个16X1的浮点数组。

代码语言:javascript
复制
for i in range(0,26983):

    Block_coo = X[0,i]
    Fc = Block_coo[4]
    Sound_Fc = Fc[:,0]
    Vib_Fc = Fc[:,1]
    y = np.matrix([[1.0],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16]])

testX, trainY, testY) = train_test_split(
 Sound_Fc, y, test_size = 0.33, random_state=42)

dbn = NeuralNet(
        layers=[
            ('input', layers.InputLayer),
            ('hidden', layers.DenseLayer),
            ('output', layers.DenseLayer),
            ],
        input_shape = (None, trainX.shape[0]),
        hidden_num_units=8,
        output_num_units=4,
        output_nonlinearity=softmax,

        update=nesterov_momentum,
        update_learning_rate=0.3,
        update_momentum=0.9,

        regression=False,
        max_epochs=5,
        verbose=1,

        )

    dbn.fit(trainX,trainY)

但是我得到了这个错误

代码语言:javascript
复制
Warning (from warnings module):
  File "C:\Users\Essam Seddik\AppData\Roaming\Python\Python27\site-packages\sklearn\cross_validation.py", line 399
% (min_labels, self.n_folds)), Warning)
Warning: The least populated class in y has only 1 members, which is too few. The minimum number of labels for any class cannot be less than n_folds=5.

 Traceback (most recent call last):
  File "C:\Essam Seddik\Deep Learning Python Tutorial\DNV_DeepLearn.py", line 77, in <module>
dbn.fit(trainX,trainY)
  File "C:\Python27\lib\site-packages\nolearn-0.6adev-py2.7.egg\nolearn\lasagne\base.py", line 293, in fit
self.train_loop(X, y)
  File "C:\Python27\lib\site-packages\nolearn-0.6adev-py2.7.egg\nolearn\lasagne\base.py", line 300, in train_loop
X, y, self.eval_size)
  File "C:\Python27\lib\site-packages\nolearn-0.6adev-py2.7.egg\nolearn\lasagne\base.py", line 401, in train_test_split
kf = StratifiedKFold(y, round(1. / eval_size))
  File "C:\Users\Essam Seddik\AppData\Roaming\Python\Python27\site-packages\sklearn\cross_validation.py", line 416, in __init__
label_test_folds = test_folds[y == label]
IndexError: too many indices for array

我尝试了xrange而不是range,尝试了y=list()而不是定义的y,我还尝试了for循环范围中的小数字,比如5,10和26983。我试过np.array、np.ndarray和np.atleast_2d。什么都不管用!

EN

回答 1

Stack Overflow用户

发布于 2015-06-26 05:42:10

在该循环的每一次迭代中,您都会覆盖Sound_Fc。因此,在循环结束时,Sound_Fc的值是X[0,26982][4][:,0]。您还会在循环的每次迭代中一次又一次地使用相同的值覆盖y,它基本上是一个值从1到16的向量。基本上,您的总数据是16个点,每个点的y值都是唯一的值(介于1和16之间)。然后,您将其拆分为训练和测试数据,因此您将这16个点中的5个作为测试集,并将其中的11个点作为您的训练集。由于每个观察到的y输出只有一个示例,您的网络模型抱怨说,它无法提取足够的信息来预测未来的这些y值。

如果我理解正确的话,不是在每次迭代时覆盖Sound_Fc和y,而是希望将它们附加到增长的x和y向量中。您可以使用vstack来实现这一点,它可以垂直堆叠numpy数组。将以下内容替换为该循环:

代码语言:javascript
复制
Sound_Fc = np.vstack( [X[0,i][4][:,0] for i in range(26983)] )
y = np.vstack([np.matrix(range(1,17)).T for i in range(26983)])

以前,当您使用Sound_Fc作为特征向量时,它的形状为(16,1)。现在它将具有形状(431728,1)。这个数字是26983* 16,因为你堆叠了26983个向量,每个向量有16个元素。您的y将具有形状(431728,1)。

[X[0,i][4][:,0] for i in range(26983)]创建了一个包含26983个元素的列表,每个元素都是一个(16,1)形的numpy数组。np.vstack将它们垂直堆叠起来,得到一个高的(431728,1)数组。这是你的特征向量。

np.matrix(range(1,17))创建一个元素为1到16的矩阵,其形状为(1,16)。通过与.T的转置,我们使它垂直,现在它的形状是(16,1)。再一次,我们列出了其中的26983个,然后对它们进行vstack,得到一个(431728,1)形状向量,它基本上是从1到16,然后再到1,再到16,基本上重复了一次又一次的1-16模式。这是您的输出向量。现在,对于每个输出(例如8个),您有26983个数据点可供学习(好吧,一旦您将所有这些数据的.66拆分为您的训练集,那么它将是17809个数据点)。现在,对于特定的y输出,您的模型将不会抱怨没有足够的示例。

当然,可能还有其他与其他内容相关的错误(我看不到您的数据--我不知道那么大的X中有什么)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31007753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档