【问题标题】:Keras - Loss Nan and 0.333 accuracy throughout the trainingKeras - 整个训练过程中的 Loss Nan 和 0.333 准确率
【发布时间】:2018-09-12 23:19:05
【问题描述】:

我正在进行一项实验,其目标是将脑电图时间序列数据分为 3 类。但是,每当我进行训练时,我的 Loss 都是 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

【问题讨论】:

标签: python tensorflow keras


【解决方案1】:

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

【讨论】:

  • 谢谢!我应该具体寻找什么?我的输入目前是 0 到 1 之间的 150 步,有 4 个通道。我的输出是一个包含 3 个类别的数组,因此 [0, 0, 1] 或 [0, 1, 0] 等。它可能是超参数吗?
  • 我不确定...但是在调整超参数之前,可以尝试的一件事是逐步简化模型以定位错误,例如保留一个 Conv/Pooling/Dropout 层,看看是否问题仍然存在。
猜你喜欢
  • 2020-02-11
  • 2019-12-17
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2020-10-17
  • 2018-09-18
相关资源
最近更新 更多