作为一个更复杂的项目的一部分,我试图获得一个相当简单的网络来区分 5 个非常不同的一维信号类别(每个类别的成员只是复制了 1000 次以上的同一位信号,带有一点点噪音添加)。并且失败了。
下面是网络设置和输出。据我所知(通过 matplotlib),我没有对数据做任何真正愚蠢的事情(例如翻转尺寸)。有人对可能出现的问题提出建议吗?
我很抱歉没有在脚本中生成虚拟数据,我在 matlab 中仍然更舒服,所以从那里移植一些虚拟数据更容易。
model = Sequential()
model.add(Flatten(input_shape=(6000,1),name='S2'))
model.add(Dense(40,activation='relu',name='F1'))
model.add(Dense(10,activation='relu',name='F2'))
model.add(Dense(5,activation='relu',name='output'))
model.add(Activation(activation='softmax',name='softmax'))
model.summary()
# load fake data
earEEG=scipy.io.loadmat('forPython_dummy.mat')
data=earEEG['data'][:,:]
data=np.transpose(data)
data=data[:,:,None]
labels=earEEG['labels']
labels= keras.utils.to_categorical(labels)
sgd=keras.optimizers.SGD()
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
hist=model.fit(data, labels, epochs=10, batch_size=50,class_weight='auto',shuffle='True')
并输出:
Layer (type) Output Shape Param #
=================================================================
S2 (Flatten) (None, 6000) 0
_________________________________________________________________
F1 (Dense) (None, 40) 240040
_________________________________________________________________
F2 (Dense) (None, 10) 410
_________________________________________________________________
output (Dense) (None, 5) 55
_________________________________________________________________
softmax (Activation) (None, 5) 0
=================================================================
Total params: 240,505.0
Trainable params: 240,505.0
Non-trainable params: 0.0
_________________________________________________________________
Epoch 1/10
5000/5000 [==============================] - 0s - loss: 12.8945 - acc: 0.2000
Epoch 2/10
5000/5000 [==============================] - 0s - loss: 12.8945 - acc: 0.2000
Epoch 3/10
5000/5000 [==============================] - 0s - loss: 12.8945 - acc: 0.2000
Epoch 4/10
5000/5000 [==============================] - 0s - loss: 12.8945 - acc: 0.2000
Epoch 5/10
5000/5000 [==============================] - 0s - loss: 12.8945 - acc: 0.2000
Epoch 6/10
5000/5000 [==============================] - 0s - loss: 12.8945 - acc: 0.2000
显然,该算法只是为所有内容赋予相同的标签(这在输出实际标签时也很明显)。输入是一个 5000 x 6000 矩阵和 5000 个标签。由于该算法不会抱怨尺寸不匹配,我非常有信心数据没有被转置或相似。作为一个简单的测试,我尝试将相同的数据集提供给 matlab 中的 pca+决策树,并获得了满分。
顺便说一句,班级是完全平衡的。