【问题标题】:Reshape 1D Numpy Array for Keras为 Keras 重塑一维 Numpy 数组
【发布时间】:2019-12-05 08:33:27
【问题描述】:

我正在使用 keras,当我尝试 model.fit 时会引发错误,因为 X_Train 和 Y_Train 输入的形状不兼容。

我拥有的数据是一个有 10 个输入和 1 个输出的系统。我使用数据的 9 次迭代作为测试,所以我有一个包含 9 个形状为 [10, 1] 的向量列表,所以可以理解,X_Train.shape = [9, 10, 1]。我的输出是一个包含 9 个值的列表,它使 Y_Train.shape = [9,1]。然而我得到了这个错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [9,1] vs. [9,10,1]

我假设 Y_Train 向量的正确形状必须是 [9, 1, 1] 但找不到这样的形状。

基于此,我有两个问题:根据我对问题的描述,[9,1,1] 是正确的预期形状吗?以及如何使它符合预期的形状?

【问题讨论】:

  • 添加一些代码,以便我们知道您在做什么并为您提供帮助。

标签: python numpy tensorflow keras


【解决方案1】:

在keras中通过计算图的输入形状是这样的:

(?, x.shape[1], x.shape[2], ....)   #As seen in model.summary()

第一个?是传递样本的通道(数据集中的行)。您可以分批传递它们,这是您在拟合模型本身时定义的内容。

但是,当设置图层的形状时,您将其设置为

(x.shape[1], x.shape[2], ....)

Keras 会在批次开始时自动添加第一个通道。 因此,如果数据集中的每一行都是长度为 10 的一维数组。那么,

## For keras functional API
inp = Input((10,))

## For keras sequential API
model = Sequential([
    Dense(32, input_shape=(10,))
])

如果您正在使用 3-D 数据集,其中数据集中的每个“行”或样本都是 (10,10) 形状的 2-D 数组:

## For keras functional API
inp = Input((10,10))

## For keras sequential API
model = Sequential([
    Dense(32, input_shape=(10,10))
])

特定于您的问题,因为您有一个包含 9 个形状 (10,1) 的数组的列表。您应该简单地忽略 9,因为这是在第一个通道上作为 (?, 10, 1) 传递的内容。因此,将您的输入形状定义为 (10,) 或 (10,1)

【讨论】:

  • 谢谢。您的帖子并没有完全解决我的问题,但让我 90% 了解我的问题。我需要告诉模型我的每一层数据的形状。
  • 太好了,很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 2021-10-28
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
相关资源
最近更新 更多