加载 Keras 模型后输入形状不正确

时间:2021-04-16 18:27:59

标签: python tensorflow keras

我成功地从文件加载模型,当我尝试预测形状为 (480,) 的任何输入的输出时,我收到 ValueError 如下:

<块引用>

ValueError: 层序列 1 的输入 0 与层不兼容:输入形状的预期轴 -1 具有值 480,但接收到形状为 (32, 1) 的输入

我正在使用的代码

import numpy as np
from keras.models import load_model

model = load_model("my_model.h5")
sample = np.zeros((480,))
model.predict(sample)

你知道为什么会这样吗?

加载后我的模型摘要:

enter image description here

这个模型的训练看起来很合理,但是如果我在调用 model.compile() 之后试图预测值,同样的错误会发生。

    model = keras.models.Sequential([
        keras.layers.Input(shape=(480,)),
        keras.layers.Dense(1024, activation="relu", name="layer1"),
        keras.layers.Dense(1024, activation="relu", name="layer2"),
        keras.layers.Dense(1024, activation="relu", name="layer3"),
        keras.layers.Dense(1024, activation="relu", name="layer4"),
        keras.layers.Dense(38, activation="softmax", name="output")
    ])
    model.compile(
        optimizer=keras.optimizers.Adam(lr=0.0003), 
        loss='categorical_crossentropy',
        metrics=['categorical_accuracy']
   )
   
   sample = np.zeros((480,))
   model.predict(sample)  # ValueError
   model.fit(...)  # works fine

1 个答案:

答案 0 :(得分:0)

这对我有用;我在输入样本的形状上加了“1”:

import numpy as np

model = keras.models.Sequential([
    keras.layers.Input(shape=(480,)),
    keras.layers.Dense(1024, activation="relu", name="layer1"),
    keras.layers.Dense(1024, activation="relu", name="layer2"),
    keras.layers.Dense(1024, activation="relu", name="layer3"),
    keras.layers.Dense(1024, activation="relu", name="layer4"),
    keras.layers.Dense(38, activation="softmax", name="output")
])
model.compile(
    optimizer=keras.optimizers.Adam(lr=0.0003),
    loss='categorical_crossentropy',
    metrics=['categorical_accuracy']
)

sample = np.zeros((1, 480,))
model.predict(sample)  # No ValueError