【问题标题】:Keras input dimensional layerKeras 输入维度层
【发布时间】:2020-05-27 17:32:28
【问题描述】:

问题

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

【问题讨论】:

  • 我很困惑。您能否提供正确形状的虚假数据,以便我试一试?用np.random.rand() 什么的。
  • @NicolasGervais X = np.random.rand(2,8) y = np.random.rand(1,4)

标签: python numpy tensorflow keras


【解决方案1】:

您没有正确传递数据:

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

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

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

那么它应该可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 2020-03-09
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多