Python 2.7 深度学习索引器:数组的索引太多

Python 2.7 深度学习索引器:数组的索引太多,python-2.7,numpy,scikit-learn,Python 2.7,Numpy,Scikit Learn,我试图在一些数据上训练系统,Sound_Fc是一个16X1浮点数组 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,

我试图在一些数据上训练系统,Sound_Fc是一个16X1浮点数组

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)
但我得到了这个错误

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
警告(来自警告模块):
文件“C:\Users\Essam Seddik\AppData\Roaming\Python27\site packages\sklearn\cross\u validation.py”,第399行
%(最小标签,自折叠),警告)
警告:y中填充最少的类只有1个成员,这太少了。任何类别的最小标签数不得小于n_folds=5。
回溯(最近一次呼叫最后一次):
文件“C:\Essam Seddik\Deep Learning Python Tutorial\DNV_DeepLearn.py”,第77行,在
dbn.fit(列车X、列车Y)
文件“C:\Python27\lib\site packages\nolearn-0.6adev-py2.7.egg\nolearn\lasagne\base.py”,第293行,以fit格式
自循环列车(X,y)
文件“C:\Python27\lib\site packages\nolearn-0.6adev-py2.7.egg\nolearn\lasagne\base.py”,第300行,列车循环中
十、 y,自我评估(尺寸)
文件“C:\Python27\lib\site packages\nolearn-0.6adev-py2.7.egg\nolearn\lasagne\base.py”,第401行,列车测试中
kf=层状褶皱(y,圆形(1/评估尺寸))
文件“C:\Users\Essam Seddik\AppData\Roaming\Python27\site packages\sklearn\cross\u validation.py”,第416行,在\uu init中__
label_test_folds=测试_folds[y==label]
索引器:数组的索引太多
我尝试了xrange而不是range,尝试了y=list()而不是定义的y。我还尝试了for循环范围内的小数字,比如5、10和100,而不是26983。
我试过np.array和np.ndarray,至少试过np.2d。什么都不管用

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

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

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)])
以前,当您使用声音作为特征向量时,它具有形状(16,1)。现在它将具有形状(431728,1)。这个数字是26983*16,因为你叠加了26983个向量,每个向量有16个元素。您的y将具有形状(431728,1)

[X[0,i][4][:,0]对于范围内的i(26983)]
创建一个包含26983个元素的列表,每个元素都是一个(16,1)形状的numpy数组
np.vstack
将它们垂直堆叠,得到一个单独的高(431728,1)数组。这是你的特征向量

np.矩阵(范围(1,17))
创建一个包含元素1到16的矩阵。这是形状(1,16)。通过将其转置为
.T
,我们使其垂直,现在其形状为(16,1)。同样,我们从26983中列出这些,然后
vstack
得到一个(431728,1)形状向量,基本上从1到16,然后再到1,再到16,基本上反复重复1-16模式。这是你的输出向量。现在,对于每个输出(比如说8个),您有26983个数据点可供学习(一旦您拆分,它将是17809个。其中66个将成为您的训练集)。现在,您的模型不会抱怨没有足够的示例用于特定的y输出

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