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