我正在进行一项实验,其目标是将EEG时间序列数据分为3类。但是,每当我进行训练时,我的损失是NaN,准确度为0.0。
我的数据长达150步,有4个频道。它全部归一化在0和1之间。
我正在将它们喂入以下模型。
model = Sequential()
model.add(Conv1D(8, kernel_size=(2,), strides=(1,),
activation='relu',
input_shape=(input_width, num_channels)))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))
model.add(Conv1D(9, kernel_size=(2,), strides=(1,),
activation='relu'))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))
model.add(Conv1D(18, kernel_size=(2,), strides=(1,),
activation='relu'))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))
model.add(Conv1D(36, kernel_size=(2,), strides=(1,),
activation='relu'))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))
model.add(Conv1D(72, kernel_size=(2,), strides=(1,),
activation='relu'))
model.add(MaxPooling1D(pool_size=2, strides=(2,), padding='same'))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(128, activation='tanh'),)
model.add(Dense(num_labels, activation='softmax'))
然后运行它
optimizer = Adam(lr=0.0001)
model.summary()
model.compile(optimizer=optimizer,
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(X, labels,
epochs=100,
batch_size=32)
然而,结果如下:
Epoch 1/100
3855/3855 [==============================] - 24s 6ms/step - loss: nan - acc: 0.3331
Epoch 2/100
3855/3855 [==============================] - 25s 7ms/step - loss: nan - acc: 0.3331
.....
Epoch 100/100
3855/3855 [==============================] - 25s 7ms/step - loss: nan - acc: 0.3331
答案 0 :(得分:1)
我生成了合成数据并使用您的代码进行了培训。 NaN问题对我来说并不存在。您可能需要检查数据以查看是否存在任何损坏。另一件事是只保留一个Conv / Pooling / Dropout层并查看问题是否仍然存在。