【问题标题】:Does tf.keras.layers.Conv1D support RaggedTensor input?tf.keras.layers.Conv1D 是否支持 RaggedTensor 输入?
【发布时间】:2020-08-29 11:13:13
【问题描述】:

在 tensorflow conv1D 层文档中,它是这么说的;

'当将此层用作模型中的第一层时,提供 input_shape 参数(整数元组或无,例如 (10, 128) 为 128 维向量的 10 个向量的序列,或 (None, 128) 为 128维向量的可变长度序列。'

所以我知道我们可以输入可变长度序列,但是当我为 conv1D 层使用不规则张量输入时,它给了我一个错误:

ValueError: Layer conv1d 不支持 RaggedTensors 作为输入。

如果不是 RaggedTensors,可变长度序列的真正含义是什么?

谢谢,

【问题讨论】:

  • 最初我想也许你之前可以有一个Masking 层,它会考虑到这一点,但据我所知,卷积层不支持屏蔽(主要用于 RNN) .我认为这在文档中意味着您可以在序列长度维度上拥有不同大小的批次。例如,在数据集中,padded_batch 每次可以返回不同形状的批次。
  • 关于参差不齐的张量,它们似乎不受支持,因此您最好的选择可能是将其转换为带有to_tensor 的常规张量。如果您保存 row_lengths 并将结果传递给 from_tensor,您可以稍后返回 ragged。
  • 感谢您的建议,我已经填充了参差不齐的张量并且它起作用了..但是性能显着下降...
  • 你是什么意思?我以为你以前不能让它运行。性能下降的原因是什么?
  • conv1D 层不接受参差不齐的张量作为输入,因此我首先使用 tf.keras.preprocessing.sequence.pad_sequences() 对其进行了填充,现在它正在工作。很抱歉造成混乱,我的意思是现在需要更长的时间。

标签: tensorflow conv-neural-network ragged


【解决方案1】:

在此处为社区提供答案,即使答案已经出现在评论部分。

tf.keras.layers.Conv1D 不支持不规则张量,您可以使用tf.keras.preprocessing.sequence.pad_sequences 填充序列并将其用作 Conv1D 层的输入。

这是 pad_sequenes 的示例。

sequence = [[1], [2, 3], [4, 5, 6]]
tf.keras.preprocessing.sequence.pad_sequences(sequence)

数组([[0, 0, 1],[0, 2, 3],[4, 5, 6]], dtype=int32)

您还可以进行固定长度的填充、更改填充值和后填充,如下所示:

sequence = [[1], [2, 3], [4, 5, 6]]
tf.keras.preprocessing.sequence.pad_sequences(sequence,maxlen=2,value=-1,padding="post")  

数组([[ 1, -1],[ 2, 3],[ 5, 6]], dtype=int32)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多