我正在尝试对系统进行一些数据训练,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我尝试了xrange而不是range,尝试了y=list()而不是定义的y,我还尝试了for循环范围中的小数字,比如5,10和26983。我试过np.array、np.ndarray和np.atleast_2d。什么都不管用!
发布于 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数组。将以下内容替换为该循环:
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中有什么)。
https://stackoverflow.com/questions/31007753
复制相似问题