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

我使用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)。

http://img.mukewang.com/61e68af00001f4d806171277.jpg

我转换了模型,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)

如何在无需重新训练模型的情况下修复此错误?


紫衣仙女
浏览 723回答 3
3回答

开满天机

最好的方法是改变你的 keras 模型并重新训练。无论如何,如果您无法重新训练您的网络,您可以手动编辑您的model.json文件。您需要在model.json文件中找到输入层并添加  "config": {    ...    "batch_input_shape": [      null,      28,      28,      1    ]    ...  }

暮色呼如

尝试将您的神经网络调整为以下格式: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)

梵蒂冈之花

您必须在 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")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python