为了账号安全,请及时绑定邮箱和手机立即绑定

“顺序模型中的第一层必须获得一个 `inputShape` 或 `batchInputShape`

“顺序模型中的第一层必须获得一个 `inputShape` 或 `batchInputShape`

紫衣仙女 2022-01-18 17:39:30
我使用Keras(版本 2.2.4)训练了以下模型:# imports ...model = Sequential()model.add(Conv2D(filters=64, kernel_size=5, data_format="channels_last", activation="relu"))model.add(BatchNormalization())model.add(MaxPooling2D(data_format="channels_last"))model.add(Conv2D(filters=32, kernel_size=3, data_format="channels_last", activation="relu"))model.add(BatchNormalization())model.add(MaxPooling2D(data_format="channels_last"))model.add(Flatten(data_format="channels_last"))model.add(Dense(units=256, activation="relu"))model.add(Dense(units=128, activation="relu"))model.add(Dense(units=32, activation="relu"))model.add(Dense(units=8, activation="softmax"))# training ...model.save("model.h5")输入是 shape 的 28 x 28 灰度图像(28, 28, 1)。我转换了模型,tensorflowjs_converter现在我想使用TensorFlow.js(版本 1.1.0)将它加载到我的网站中:tf.loadLayersModel('./model/model.json')这会产生以下错误:The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.    at new e (errors.ts:48)    at e.add (models.ts:440)    at e.fromConfig (models.ts:1020)    at vp (generic_utils.ts:277)    at nd (serialization.ts:31)    at models.ts:299    at common.ts:14    at Object.next (common.ts:14)    at o (common.ts:14)如何在无需重新训练模型的情况下修复此错误?
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

最好的方法是改变你的 keras 模型并重新训练。


无论如何,如果您无法重新训练您的网络,您可以手动编辑您的model.json文件。


您需要在model.json文件中找到输入层并添加


  "config": {

    ...

    "batch_input_shape": [

      null,

      28,

      28,

      1

    ]

    ...

  }


查看完整回答
反对 回复 2022-01-18
?
暮色呼如

TA贡献1853条经验 获得超9个赞

尝试将您的神经网络调整为以下格式:


input_img = Input(batch_shape=(None, 28,28,1))

layer1=Conv2D(filters=64, kernel_size=5, data_format="channels_last", activation="relu")(input_img)

layer2=BatchNormalization()(layer1)

.

.

.

final_layer=Dense(units=8, activation="softmax")(previous_layer)

……等等。在最后:


model = Model(inputs = input_img, outputs = final_layer)


查看完整回答
反对 回复 2022-01-18
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

您必须在 keras 模型的 Conv2D 层中指定输入形状。


# imports ...

model = Sequential()

model.add(Conv2D(input_shape=(28, 28, 1), filters=64, kernel_size=5, data_format="channels_last", activation="relu"))

model.add(BatchNormalization())

model.add(MaxPooling2D(data_format="channels_last"))

model.add(Conv2D(filters=32, kernel_size=3, data_format="channels_last", activation="relu"))

model.add(BatchNormalization())

model.add(MaxPooling2D(data_format="channels_last"))

model.add(Flatten(data_format="channels_last"))

model.add(Dense(units=256, activation="relu"))

model.add(Dense(units=128, activation="relu"))

model.add(Dense(units=32, activation="relu"))

model.add(Dense(units=8, activation="softmax"))

# training ...

model.save("model.h5")


查看完整回答
反对 回复 2022-01-18
  • 3 回答
  • 0 关注
  • 721 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号