【问题标题】:How do I fix this dimenion error in keras / tensorflow?如何修复 keras / tensorflow 中的这个维度错误?
【发布时间】:2023-04-06 02:52:01
【问题描述】:

我正在尝试拟合一个模型,该模型为 X 数组的每一行预测 1 或 0。 X 是形状 (1000,26) 的数组,Y 是形状 (1000, 1) 的数组。无论出于何种原因,tf/keras 似乎都不喜欢我的输入。

到目前为止,我已尝试更改输入类型。它以泡菜的形式出现,然后通过使用“np.values”函数变成一个 numpy 数组。在我使用 tf.constant(training) 代替 X = training.values 之前,但所做的所有更改都给了我一个稍微不同的错误(都包括在下面)

这是减去其他一些数据文件的导入和加载的完整代码。

training = pd.read_pickle("./training.pkl")
train_labels = pd.read_pickle("./train_labels.pkl")

X = training.values
Y = train_labels.values
model = models.Sequential()

model.add(layers.Dense(46, activation='relu', input_dim=26))
model.add(layers.Dense(46, activation='relu'))
model.add(layers.Dense(46, activation='relu'))
model.add(layers.Dense(2, activation='softmax'))

model.summary()

model.compile(optimizer='adam',
    loss='binary_crossentropy',
    metrics=['binary_accuracy'])


model.fit(X, Y, epochs=3, steps_per_epoch=100)

当前错误:

Error when checking target: expected dense_24 to have shape (2,) but got array with shape (1,)

使用 tf.constant 时的错误信息

Incompatible shapes: [1000] vs. [1000,2]

【问题讨论】:

  • 在最后一层中,您在 Dense 层中使用了 2 个单位。将其设为 1 个单位,以便输出形状为 ( None , 1 ) 与标签匹配。

标签: tensorflow keras model


【解决方案1】:

我没有足够的声誉来写评论,所以我在这里写一个答案。

正如@Shubham Panchal 所建议的那样,您的最后一层必须与您的 Y 的形状相匹配。因此,您要么确保您的 Y 具有形状 (1000, 1) 并将最后一层更改为具有 1 个节点,要么您 -热编码您的 Y(参见 pandas.get_dummies),使其具有形状 (1000, 2)。

正如我们讨论的交叉验证,您不需要在这里使用 Tensorflow 常量/占位符/变量(我建议看看它们之间的差异以及 Keras 如何处理它们)。直接输入 numpy 数组就足够了,因为 Keras 会为您定义 Tensorflow 图。

此外,您可以使用 pandas.DataFrame.values 将 pandas 数据帧转换为 numpy 数组,但请注意在 its documentation 中建议的方法是 pandas.DataFrame.to_numpy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多