重塑Keras的1D numpy阵列

时间:2019-07-27 05:45:49

标签: python numpy tensorflow keras

我正在使用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]是正确的预期形状吗?以及如何使其符合预期形状?

1 个答案:

答案 0 :(得分:0)

通过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)形状的二维数组:

## 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)