Keras - 整个训练期间损失Nan和0.333准确度

时间:2018-04-03 15:03:39

标签: python tensorflow keras

我正在进行一项实验,其目标是将EEG时间序列数据分为3类。但是,每当我进行训练时,我的损失是NaN,准确度为0.0。

我的数据长达150步,有4个频道。它全部归一化在0和1之间。

Data Channels

我正在将它们喂入以下模型。

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

1 个答案:

答案 0 :(得分:1)

我生成了合成数据并使用您的代码进行了培训。 NaN问题对我来说并不存在。您可能需要检查数据以查看是否存在任何损坏。另一件事是只保留一个Conv / Pooling / Dropout层并查看问题是否仍然存在。