我正在尝试使用TensorFlow在R Keras中构建仅具有平坦层的模型。这是代码段:
model <- keras_model_sequential() %>%
layer_flatten(input_shape = c(lookback, dim(train.data)[-1]))
model %>% compile(
optimizer = optimizer_rmsprop(),
loss = "mae"
)
history <- model %>% fit_generator(
train_gen,
steps_per_epoch = 500,
epochs = 20
)
lookback
是1200,而dim(train.data)
是(13155, 3)
。平整层的输入是(1200, 3)
,我希望它应该输出3600的一维矢量。
train_gen
返回2的列表。第一个是尺寸为(129, 1200, 3)
的3D矩阵,第二个是尺寸为(129,)
的1D向量。
但是,我得到了错误:
Error in py_call_impl(callable, dots$args, dots$keywords) :
ValueError: Error when checking target: expected dense_15 to have shape (3600,) but got array with shape (1,)
我不知道为什么会这样。如果我添加layer_dense(units = 1)
可以,但是我不明白为什么。
答案 0 :(得分:1)
目标形状不兼容:您为目标提供大小为1的向量(即$M2_HOME/conf/settings.xml
表示129个大小为1的样本标签),但是模型的输出形状为(129,)
,因此需要向量的大小为3600。这就是为什么当您使用一个单元添加一个密集层时,该问题得以解决的原因:密集层的输出形状为(None, 3600)
,并且您提供了(None, 1)
并且它们相互匹配,因此没有问题抱怨。