在Keras(深度学习库)中,RepeatVector + TimeDistributed =错误?

李京镐

嗨,我是初学者keras。

我在做模特。

步骤1.输入批处理和单词列表,(BATCH_SIZE,WORD_INDEX_LIST)步骤2.获得每个单词的单词嵌入(BATCH_SIZE,WORD_LENGTH,EMBEDDING_SIZE)步骤3.对每个批次中每个单词的平均嵌入。(BATCH_SIZE,EMBEDDING_SIZE)步骤4。重复向量N,(BATCH_SIZE,N,EMBEDDING_SIZE)步骤5。每个步骤都应用密集层

所以,我写代码。

MAX_LEN = 20 ( = WORD_INDEX_LIST)

 step 1
layer_target_input = Input(shape=(MAX_LEN,), dtype="int32", name="layer_target_input")


# step2
layer_embedding = Embedding(input_dim = n_symbols+1, output_dim=vector_dim,input_length=MAX_LEN, 
                                                 name="embedding", weights= [embedding_weights],trainable = False)
encoded_target = layer_embedding(layer_target_input)


# step 3
encoded_target_agg = KL.core.Lambda( lambda x: K.sum(x, axis=1) )(encoded_target)


#step 4
encoded_target_agg_repeat = KL.RepeatVector( MAX_LEN)(encoded_target_agg)



# step 5
layer_annotated_tahn = KL.Dense(output_dim=50, name="layer_tahn") 
layer_annotated_tahn_td = KL.TimeDistributed(layer_annotated_tahn) (encoded_target_agg_repeat)

model = KM.Model(input=[layer_target_input], output=[ layer_annotated_tahn_td])

r = model.predict({ "layer_target_input":dev_targ}) # dev_targ = (2, 20, 300)

但是,当我运行此代码时,结果如下。

Traceback (most recent call last):
  File "Main.py", line 127, in <module>
    r = model.predict({ "layer_target_input":dev_targ})
  File "/usr/local/anaconda/lib/python2.7/site-packages/Keras-1.0.7-py2.7.egg/keras/engine/training.py", line 1180, in predict
    batch_size=batch_size, verbose=verbose)
  File "/usr/local/anaconda/lib/python2.7/site-packages/Keras-1.0.7-py2.7.egg/keras/engine/training.py", line 888, in _predict_loop
    outs[i][batch_start:batch_end] = batch_out
ValueError: could not broadcast input array from shape (30,20,50) into shape (2,20,50)

为什么批量大小改变了?我错了吗?

以撒玛利

问题出在Lambda运算符中。在您的情况下,它需要一个张量的形状(batch_size, max_len, embedding_size),并期望产生一个张量的形状(batch_size, embedding_size)但是,Lambda运算符不知道您在内部应用了哪种转换,因此在图形编译期间错误地假定形状不变,因此假定输出形状为(batch_size, max_len, embedding_size)RepeastVector随后预计输入是二维的,但从来没有声称它是如此。它产生预期形状的方式是(batch_size, num_repetitions, in_shape[1])由于Lambda错误地报告了其形状(batch_size, max_len, embedding_size),因此RepeatVector现在报告了其形状,(batch_size, num_repetitions, max_len)而不是预期的结果(batch_size, num_repetitions, embedding_size)num_repetitions在您的情况下与相同max_len,因此RepeastVector将其形状报告为(batch_size, max_len, max_len)道路TimeDistributed(Dense) 作品是:

Reshape((-1, input_shape[2]))
Dense()
Reshape((-1, input_shape[1], num_outputs))

到现在为止,input_shape[2]错误地假定max_len代替embedding_size,但是给定的实际张量具有的正确形状(batch_size, max_len, embedding_size),所以最终发生的是:

Reshape((batch_size * embedding_size, max_len))
Dense()
Reshape((batch_size * embedding_size / max_len, max_len, num_outputs))

如果您batch_size * embedding_size / max_len碰巧是2 * 300 / 20 = 30,那是您错误形状的来源。

要修复它,您需要明确告诉Lambda您要产生的形状:

encoded_target_agg = KL.core.Lambda( lambda x: K.sum(x, axis=1), output_shape=(vector_dim,))(encoded_target)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Keras 中使用 TimeDistributed 和循环层

来自分类常见问题

在Keras中,TimeDistributed层的作用是什么?

来自分类Dev

GRU (return_sequences=True) 层之后的 TimeDistributed Dense Layer 导致维度错误

来自分类Dev

如何不在 Keras 中输出带有“TimeDistributed”层的序列?

来自分类Dev

深度学习库Neon DataIterator / ArrayIterator初始化错误

来自分类Dev

在TimeDistributed层内正确使用keras SpatialDropout2D-CNN LSTM网络

来自分类Dev

为什么 Keras 序列到序列教程没有提到 TimeDistributed 层包装器?

来自分类Dev

在 Keras 中将 TimeDistributed 应用于 InceptionResnetV2 时出错

来自分类Dev

TimeDistributed(BatchNormalization)与BatchNormalization

来自分类Dev

在keras(深度学习库)中,可以自定义嵌入层吗?

来自分类Dev

在keras(深度学习库)中,可以自定义嵌入层吗?

来自分类Dev

keras中的断言错误

来自分类Dev

带有简单 MNIST 数据示例的深度学习错误

来自分类Dev

库中的 generateReleaseBuildConfig 错误

来自分类Dev

React错误中超出最大更新深度

来自分类Dev

访问静态库中的错误错误

来自分类Dev

DialogPicker中的错误或错误

来自分类Dev

意外错误keras:“错误:意外的','在:”

来自分类Dev

在Ubuntu 14.04中运行用于深度学习的keras时出错

来自分类Dev

如何在 CNN 块上应用 TimeDistributed 层?

来自分类Dev

深度链接错误android

来自分类Dev

Java中bluecove库的错误

来自分类Dev

在MySQLdb库中捕获错误

来自分类Dev

kazoo 2.0库中的错误

来自分类Dev

Inkfilepicker Android库中的错误

来自分类Dev

Symfony中的错误Gd库

来自分类Dev

微调Caffe深度学习检查失败:错误== cudaSuccess内存不足

来自分类Dev

深度学习模型在第一个 epoch 后提示错误

来自分类Dev

Keras 中的小错误:ValueError 的错误纠正?

Related 相关文章

  1. 1

    在 Keras 中使用 TimeDistributed 和循环层

  2. 2

    在Keras中,TimeDistributed层的作用是什么?

  3. 3

    GRU (return_sequences=True) 层之后的 TimeDistributed Dense Layer 导致维度错误

  4. 4

    如何不在 Keras 中输出带有“TimeDistributed”层的序列?

  5. 5

    深度学习库Neon DataIterator / ArrayIterator初始化错误

  6. 6

    在TimeDistributed层内正确使用keras SpatialDropout2D-CNN LSTM网络

  7. 7

    为什么 Keras 序列到序列教程没有提到 TimeDistributed 层包装器?

  8. 8

    在 Keras 中将 TimeDistributed 应用于 InceptionResnetV2 时出错

  9. 9

    TimeDistributed(BatchNormalization)与BatchNormalization

  10. 10

    在keras(深度学习库)中,可以自定义嵌入层吗?

  11. 11

    在keras(深度学习库)中,可以自定义嵌入层吗?

  12. 12

    keras中的断言错误

  13. 13

    带有简单 MNIST 数据示例的深度学习错误

  14. 14

    库中的 generateReleaseBuildConfig 错误

  15. 15

    React错误中超出最大更新深度

  16. 16

    访问静态库中的错误错误

  17. 17

    DialogPicker中的错误或错误

  18. 18

    意外错误keras:“错误:意外的','在:”

  19. 19

    在Ubuntu 14.04中运行用于深度学习的keras时出错

  20. 20

    如何在 CNN 块上应用 TimeDistributed 层?

  21. 21

    深度链接错误android

  22. 22

    Java中bluecove库的错误

  23. 23

    在MySQLdb库中捕获错误

  24. 24

    kazoo 2.0库中的错误

  25. 25

    Inkfilepicker Android库中的错误

  26. 26

    Symfony中的错误Gd库

  27. 27

    微调Caffe深度学习检查失败:错误== cudaSuccess内存不足

  28. 28

    深度学习模型在第一个 epoch 后提示错误

  29. 29

    Keras 中的小错误:ValueError 的错误纠正?

热门标签

归档