簡體   English   中英

在 Z1BDF605991920DB11ZCBDF8508 中實現 Keras Model 轉換為 CoreML model 時出現致命錯誤

[英]Fatal Error when implementing a Keras Model converted to a CoreML model in an iOS app

我正在制作一個 iOS 應用程序,該應用程序使用在 Keras 中開發並轉換為 CoreML Z20F35E630DAF49DCFAZ3685C3F94DBCFA4C 的深度學習 Model。 我正在使用從 Apple 網站下載的 Resnet50 CoreML Model 並且該應用程序運行正常,但是當我實現 model 時,當我從照片庫中選擇圖像或使用應用程序中的相機拍照時出現錯誤。 這是與 CoreML Model 相關的代碼和我得到的錯誤: 與 CoreML 模型相關的代碼 這是用於將 Keras Model 轉換為 CoreML model 的代碼:

output_labels = ['0', '1']

coreml_model = coremltools.converters.keras.convert('Costume.h5', input_names=['image'],
                                                class_labels=output_labels, image_input_names='image',
                                                output_names=['output'])

print(coreml_model)  # Check that input type is imageType

# Metadata for XCode
coreml_model.author = 'Author'
coreml_model.short_description = 'Some Description'
coreml_model.input_description['image'] = 'Takes as input an image'
coreml_model.output_description['output'] = 'Prediction of image'

coreml_model.save('Costume.mlmodel')

我不知道如何解決這個錯誤,在此先感謝:這是我的 Keras 模型:

model = Sequential()

# Hidden Layer 1
model.add(Conv2D(128, 3, 3, border_mode='same', input_shape=input_shape, activation='relu'))
model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# Hidden Layer 2
model.add(Conv2D(128, 3, 3, border_mode='same', activation='relu'))
model.add(Conv2D(256, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# Hidden Layer 3
model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(Conv2D(256, 3, 3, border_mode='same', activation='relu'))
model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# Hidden Layer 4
model.add(Conv2D(32, 3, 3, border_mode='same', activation='relu'))
model.add(Conv2D(256, 3, 3, border_mode='same', activation='relu'))
model.add(Conv2D(256, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
          optimizer=RMSprop(lr=0.0001),
          metrics=['accuracy'])

model.summary()

我找到了解決問題的方法,所以我將其發布,以防將來有人遇到同樣的問題。 您需要更改以下內容:

model.add(Dense(1))
model.add(Activation('sigmoid'))

model.add(Dense(2))
model.add(Activation('softmax'))

並且還記得將損失從binary_crossentropy更改為categorical_crossentropy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM