无法压缩dim[1],期望维度为1,实际大小为499。

4
我正在尝试制作一个自编码器,但遇到了上述错误。查看Stack Exchange上的其他帖子并没有帮助。
以下是完整的错误信息:
InvalidArgumentError: Can not squeeze dim[1], expected a dimension of 1, got 499
 [[{{node metrics_12/acc/Squeeze}}]]
 [[{{node ConstantFoldingCtrl/loss_12/time_distributed_6_loss/broadcast_weights/assert_broadcastable/AssertGuard/Switch_0}}]]

我可以编译我的模型。以下是模型:

层 (类型) 输出形状 参数 #
================================================================= lambda_7 (Lambda) (None, 499, 22) 0
_________________________________________________________________ cu_dnnlstm_14 (CuDNNLSTM) (None, 300) 388800
_________________________________________________________________ repeat_vector_12 (RepeatVect (None, 499, 300) 0
_________________________________________________________________ cu_dnnlstm_15 (CuDNNLSTM) (None, 499, 50) 70400
_________________________________________________________________ time_distributed_6 (TimeDist (None, 499, 22) 1122
================================================================= 总参数: 460,322 可训练的参数: 460,322 不可训练的参数: 0

lambda层将一个形状为(1,499)的填充序列转换为具有22个可能值的onehot。然后我通过一个编码CuDNNLSTM,一个重复向量,另一个CuDNNLSTM和一个具有softmax激活的时间分布密集层来传递它。

我使用:

model.compile('rmsprop', 'sparse_categorical_crossentropy', metrics=['acc'])

并且:

model.fit(s_min_one, s_min_one,
   batch_size=batchS,
   epochs=epochS,
   verbose = 1,  
   shuffle=True)

这给我带来了错误。

我使用了稀疏分类,使我的数据可以在整数格式下取值介于0到21之间(针对22个特征)。我不明白为什么该错误会对任何事物期望维度为1。就好像它想让我翻转列和行一样?

1个回答

3

您的问题与输出形状有关。 sparse_categorical_crossentropy 期望整数目标(请参见文档:“使用 sparse_categorical_crossentropy 损失时,您的目标应为整数目标。”)

您正在将形状为 (batch_size,1,499) 的数据作为输入和标签传递:

model.fit(s_min_one, s_min_one, ...)

这样是行不通的,标签必须为形状为(batch_size, 1)或者只有一个维度(batch_size,)

我不太确定您试图实现什么,但看起来您需要相应地调整损失函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接