Как исправить ошибку «Сегментация (ядро сброшено») в Keras - PullRequest
0 голосов
/ 27 марта 2019

У меня проблемы с Керасом.По сути, это дает мне следующую ошибку «Ошибка сегментации (ядро сброшено)», когда я пытаюсь установить модель со слоем conv2d.

Мой код работает на ЦП.Он также работает без каких-либо слоев conv2d (хотя это неэффективно для моего варианта использования).У меня есть cuda, cudnn и tenorflow.Я попытался переустановить keras и tenorflow.

Код:

def model_build():
    model = Sequential()
    model.add(Conv2D(input_shape = (env_size()[0], env_size()[1], 1), filters=4, kernel_size=(3,3), strides=1, activation=swisher))
    model.add(Conv2D(filters=4, kernel_size=(5,5), strides=1, activation=swisher))
    model.add(Conv2D(filters=4, kernel_size=(5,5), strides=1, activation=swisher))
    model.add(Conv2D(filters=4, kernel_size=(5,5), strides=1, activation=swisher))
    model.add(Flatten())
    model.add(Dense(128, activation='softmax'))
    model.add(Dense(4, activation='softmax'))
    return model

if __name__ == '__main__':
    y = model_build()
    y.compile(loss = "mean_squared_error", optimizer = 'adam')
    y.fit(x=env(), y = np.array([[0,0,0,0]])

Ошибка:

Using TensorFlow backend.
Epoch 1/1
2019-03-27 05:52:27.687323: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-03-27 05:52:27.789975: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:964] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-03-27 05:52:27.790819: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1411] Found device 0 with properties:
name: GeForce RTX 2060 major: 7 minor: 5 memoryClockRate(GHz): 1.83
pciBusID: 0000:01:00.0
totalMemory: 5.73GiB freeMemory: 5.40GiB
2019-03-27 05:52:27.790834: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1490] Adding visible gpu devices: 0
2019-03-27 05:52:28.068080: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-03-27 05:52:28.068115: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977]      0
2019-03-27 05:52:28.068121: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990] 0:   N
2019-03-27 05:52:28.068487: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1103] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 5147 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5)
2019-03-27 05:52:28.177752: W tensorflow/core/framework/allocator.cc:113] Allocation of 518619136 exceeds 10% of system memory.
2019-03-27 05:52:28.337277: W tensorflow/core/framework/allocator.cc:113] Allocation of 518619136 exceeds 10% of system memory.
2019-03-27 05:52:28.500486: W tensorflow/core/framework/allocator.cc:113] Allocation of 518619136 exceeds 10% of system memory.
2019-03-27 05:52:28.586280: W tensorflow/core/framework/allocator.cc:113] Allocation of 518619136 exceeds 10% of system memory.
2019-03-27 05:52:28.675738: W tensorflow/core/framework/allocator.cc:113] Allocation of 518619136 exceeds 10% of system memory.
Segmentation fault (core dumped)

РЕДАКТИРОВАТЬ:

Автономный пример.

import numpy as np
import keras

model = keras.models.Sequential() #Sequential model type.
model.add(keras.layers.Conv2D(filters=1, kernel_size=(3,3), strides = 1, activation="sigmoid")) #Convolutional layer.
model.add(keras.layers.Flatten()) #Flatten layer.
model.add(keras.layers.Dense(4)) #Dense layer of 4 units.
model.compile(loss='mean_squared_error', optimizer='adam') #compile model.
y = np.random.rand(1,4) #Random expected output
x = np.random.rand(1, 38, 21, 1) # Random input.
model.fit(x, y) #And fit...

EDIT2:

Версия Keras: 'v2.1.6-tf'

Версия Tensorflow-GPU: 'v1.12'

Pythonверсия: 'v3.5.2'

версия CUDA: 'v9.0.176'

версия CUDNN: 'v7.2.1.38-1 + cuda9.0

версия Ubuntu: 'v16.04'

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Ваш MWE отлично работает для меня (если я добавлю , input_shape=(38, 21, 1) к первому слою свертки):

import numpy as np
import keras

model = keras.models.Sequential() #Sequential model type.
model.add(keras.layers.Conv2D(filters=1, kernel_size=(3,3), strides = 1, activation="sigmoid", input_shape=(38, 21, 1))) #Convolutional layer.
model.add(keras.layers.Flatten()) #Flatten layer.
model.add(keras.layers.Dense(4)) #Dense layer of 4 units.
model.compile(loss='mean_squared_error', optimizer='adam') #compile model.
y = np.random.rand(2, 4) #Random expected output
x = np.random.rand(2, 38, 21, 1) # Random input.
model.fit(x, y)

Это означает, что ваша проблема должна исходить из вашей системы или установки.

Глядя на таблицу совместимости tenorflow , видно, что ваши версии python, tenorflow и CUDA должны быть совместимы.

Для вашей конфигурации рекомендуется версия cuDNN 7.0.x.Используемая вами версия cuDNN 7.2, вероятно, несовместима.Попробуйте установить / использовать cuDNN 7.0.x.

0 голосов
/ 27 марта 2019

Кажется, что у вашего GPU недостаточно памяти. Ваша модель не кажется слишком большой, поэтому я предполагаю, что проблема в следующем:

y.fit(x=env(), y = np.array([[0,0,0,0]])

Вывод env() может быть слишком большим, чтобы обрабатываться памятью вашего графического процессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...