【问题标题】:Keras Segmentation fault (core dumped)Keras 分段错误(核心转储)
【发布时间】:2017-08-07 03:27:47
【问题描述】:

我正在尝试在 Theano 0.8.2 (python 2.7) 之上的 Keras 1.2.2 上训练卷积神经网络。我能够导入 keras 和 theano 而不会出错。

仅在运行以下代码后大约 2-5 分钟后才会出现错误。

#Prepare images etc.

model = Sequential()

model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
                        border_mode='valid',
                        input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))

model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))

model.add(Convolution2D(nb_filters * 2, kernel_size[0], kernel_size[1]))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(128))
model.add(Dense(64))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adadelta',
              metrics=['accuracy'])

model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
          verbose=1, validation_data=(X_test, Y_test))

score = model.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])

创建以下输出:

X_train shape: (984, 1, 1000, 1000)
984 train samples
246 test samples
Train on 984 samples, validate on 246 samples
Epoch 1/4
[1]+  Segmentation fault      (core dumped)

所以看起来模型已经编译并且训练已经开始了。我之前能够用较小的图像训练模型(形状:(400、1、500、500)。改变训练图像的数量和它们的大小会导致错误吗?我还尝试将 Keras 更新到 2.0,将 Theano 更新到当前的开发版本,但没有帮助。

有什么建议吗?

【问题讨论】:

  • 尝试使用train_on_batch(),让我知道您是否可以完成单个批次的训练。其次,减少批量大小(必要时减少到 1)并查看分段错误是否消失(虽然不太可能)。
  • 您可以更新您的 keras 并重试吗? blog.keras.io/introducing-keras-2.html 使用 pip install keras --upgrade。你能检查你的内存使用情况吗?它是否超出了您的总可用内存?尝试运行 gdb python yourprogram.py 然后写backtrace.
  • 就像我说的,我之前更新了 Keras 和 Theano,但没有帮助。不幸的是,我无法安装/运行 gpd,因为我不是 root,让我们的管理员安装东西需要很长时间。 :D
  • 另外,当我通过top命令检查内存消耗时,该过程大约需要20%,所以应该不是内存问题。
  • 我将图像的大小从 1000x1000 更改为 500x500。它现在开始训练第一批。虽然我是在 200GB RAM 的机器上运行它,但目前看来是内存问题。

标签: python python-2.7 theano keras


【解决方案1】:

如果您错误地运行 K.clearsession(),您可能会遇到分段错误。这是因为每个神经网络图都保存在默认会话中,当您清除会话时,该图将从内存中删除。将 K.clearsession() 放在代码的顶部是明智的(尤其是如果您使用的是 jupyter),因为它会清除内存中保存的任何图形。

如果您的代码中有此内容,请尝试将其删除!祝你好运!

【讨论】:

  • 尝试添加解释为什么K.clearsession()会导致分段错误,以帮助未来的读者了解问题的根源。
猜你喜欢
  • 2015-06-25
  • 2021-06-03
相关资源
最近更新 更多