【问题标题】:How to save keras model in WML repository in Watson Studio?如何在 Watson Studio 的 WML 存储库中保存 keras 模型?
【发布时间】:2019-04-14 22:36:51
【问题描述】:

我正在尝试通过在 Watson Studio 上训练 MNIST 数据集来部署 Keras 模型,但无法保存并成功部署它。

当我尝试保存模型对象时,它说它无法保存顺序对象。 当我尝试将 hd5 转换为 tgz 并保存时,它会被保存但在部署时出现错误

"{"code":"load_model_failure","message":"SavedModel file does not exist at: /opt/ibm/s..."

当我尝试部署 hd5 文件时,它说它不是压缩格式。

谁能帮助我如何准确地保存 keras 模型并将其部署在 watson studio 上?

# 

convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (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(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

model_result_path = "keras_model.h5"
model.save(model_result_path)

published_model = client.repository.store_model(model='keras_model.h5', meta_props=model_props,training_data=x_train, training_target=y_train)

【问题讨论】:

    标签: python tensorflow keras deep-learning ibm-watson


    【解决方案1】:

    您是否尝试过将 Python 模型对象本身传递给 store_model 函数?

    例如,请参阅此示例笔记本的第 4.2 节: https://dataplatform.cloud.ibm.com/exchange/public/entry/view/1438a61212a64ac435c837ba040e6934

    【讨论】:

    • 是的,我试过了。我在我的问题中写道,它不直接采用顺序模型。
    【解决方案2】:

    您可以尝试压缩 h5 文件(即形成 tar.gz)然后尝试将其提供给 client.repository.store_model 而不是直接提供 .h5 文件。

    【讨论】:

    • 是的,我也试过了。我将 .h5 文件压缩成 tar.gz。它存储模型,但随后在部署时出错。
    【解决方案3】:

    您必须提供压缩后的 keras 文件的路径。 例如:

    keras_file_path = "/Users/jsmith/keras/ker_seq_mnist_model.tar.gz"
    published_model = client.repository.store_model(model=keras_file_path, meta_props=model_props,training_data=x_train, training_target=y_train)
    

    【讨论】:

      【解决方案4】:

      第 1 步:将模型保存到 .h5 文件。

      model_result_path = "keras_model.h5"
      model.save(model_result_path)
      

      第二步:将.h5文件压缩成tgz。

      !tar -zcvf keras_model.tgz keras_model.h5
      

      第 3 步重要>要部署 keras 模型,必须将 FRAMEWORK_LIBRARIES 与其他元属性一起传递。 store_model WML documentation.

      metadata = {
      client.repository.ModelMetaNames.NAME: 'Image-classifier',
      client.repository.ModelMetaNames.FRAMEWORK_NAME: 'tensorflow',
      client.repository.ModelMetaNames.FRAMEWORK_VERSION: '1.5',
      client.repository.ModelMetaNames.FRAMEWORK_LIBRARIES:[{'name':'keras', 'version': '2.1.3'}]
      }
      

      第 4 步:存储模型。

      published_model = client.repository.store_model(model= 'keras_model.tgz', meta_props=metadata, training_data= X_train,training_target= y_train)
      

      第 5 步:部署模型。

      model_id = published_model["metadata"]["guid"]
      
      model_deployment_details = client.deployments.create(artifact_uid=model_id, name="deployment_name" )
      

      【讨论】:

        猜你喜欢
        • 2019-07-07
        • 2018-05-02
        • 2022-07-25
        • 2018-12-14
        • 2020-06-20
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        相关资源
        最近更新 更多