Я обучил модель на своем ноутбуке, но когда я пытаюсь загрузить ее на свой Raspberry Pi 3, я получаю эту ошибку:
Segmentation fault (core dumped)
Как видно из кода ниже модели размер очень маленький, поэтому он легко помещается в памяти.
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Lambda, Dense, Dropout, Flatten
from keras.backend.tensorflow_backend import clip
class Architecture(object):
def __init__(self, input_shape):
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='linear'))
model.add(Lambda(lambda x: clip(x, min_value=-1.0, max_value=1.0)))
self.model = model
def to_model(self):
self.model.compile(loss='mse', optimizer='adam', metrics=['mse', 'mae'])
return self.model
Я загружаю модель с этим кодом. Этот же точный код работает на моем ноутбуке без ошибок.
from tensorflow.keras.models import load_model
from keras.backend.tensorflow_backend import clip
loaded_model = load_model(
'path/to/model.hdf5',
custom_objects={'clip': clip}
)
На моем ноутбуке и Pi установлена версия Tensorflow 1.14. Я начинаю думать, что проблема может быть из-за custom_objects
, определенного в лямбда-слое. Может быть, он использует 64-битную структуру данных, которая не совместима с 32-битной архитектурой Pi? Проблема в том, что я даже не знаю, как бы подтвердить гипотезу. Сообщение об ошибке не содержит никаких других деталей.