我正在尝试制作自动编码器,并且卡在上述错误中。在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)(无,300)388800
_________________________________________________________________ repeat_vector_12(RepeatVect(无,499,300)0
_________________________________________________________________ cu_dnnlstm_15(CuDNNLSTM)(无,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。好像要我翻转列和行?
答案 0 :(得分:1)
您的问题与输出的形状有关。 sparse_categorical_crossentropy
需要整数目标(请参阅the documentation:“使用sparse_categorical_crossentropy损失时,您的目标应为整数目标。”)
您正在传递形状为(batch_size, 1, 499)
的数据作为输入和标签:
model.fit(s_min_one, s_min_one, ...)
那是行不通的,标签的形状必须为(batch_size, 1)
或仅仅是(batch_size,)
。
我不能完全确定我了解您要完成的工作,但是您似乎需要相应地调整损失函数。