首页 > 解决方案 > Keras 输入维度层

问题描述

问题

我正在使用 Model API 创建一个 Keras 网络,该网络接受两个输入和一个输出。训练网络时出现以下错误:

检查模型输入时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 2 个数组,但得到了以下 1 个数组的列表:

尽管有这个错误,输入 X 数组的形状为 (2,8),输出 y 数组的形状为 (1,4)。

已经尝试过的事情

关于 SO 有许多类似的问题,但是,他们的解决方案主要围绕确保 X 和 y 是 Numpy 数组。从我的实现中可以看出,我已经这样做了。因此,我不认为这是一个重复的问题。

执行

我已将模型定义如下:

    opt = Adam(lr = alpha)
    input = Input(shape=(input_dim_,))
    delta = Input(shape=[1])
    l1 = Dense(units = 1024, input_dim = input_dim_, activation = "relu")(input)
    l2 = Dense(units=512, activation="relu")(l1)

    def loss_function (y,y_pred):
        y_pred = K.clip(y_pred,1e-8,1-1e-8)
        return K.sum(-y*K.log(y_pred)*delta)

    if model_type == "actor":
        out = Dense(units = output_dim_, activation="softmax")(l2)
        model = Model(input=[input,delta], output = [out])
        model.compile(loss = loss_function,optimizer=opt)

并通过执行以下操作来训练模型:

X = [s_t,delta]
X = np.array(X)
actor.fit(X,y,verbose=0)

标签: pythonnumpytensorflowkeras

解决方案


您没有正确传递数据:

actor.fit(X,y,verbose=0)

这里X应该是一个包含两个 numpy 数组的列表,每个 numpy 数组对应于你的一个输入(你有一个有两个输入的模型):所以它应该更像这样:

X = [np.array(s_t), np.array(delta)]
actor.fit(X, y, verbose=0)

然后它应该工作。


推荐阅读