【问题标题】:Keras Reshape: total size of the new array must be unchangedKeras Reshape:新数组的总大小必须不变
【发布时间】:2019-01-18 13:47:55
【问题描述】:

我正在尝试使用 Keras Reshape 函数 API 将手套嵌入的输出(4D 形状:(?, 9, 20, 100))重塑为 3D(?, 9, 2000)。但是,当我尝试 Reshape((9, 2000))(text_layer) 时,会弹出一个错误并说新数组的总大小必须保持不变,即使 9 * 20 * 100 = 9 * 2000 也是如此。任何想法为什么?附上代码。

text = Input(shape=(9, news_text.shape[1]), name='text')
text_layer = Embedding(
    embedding_matrix.shape[0],
    embedding_matrix.shape[1],
    weights=[embedding_matrix],
    input_length=news_text.shape[1]
)(text)
text_layer = Reshape((9, text_layer.shape[2] * text_layer.shape[3]))(text_layer)

【问题讨论】:

    标签: tensorflow keras deep-learning lstm reshape


    【解决方案1】:

    Embedding层中移除input_length参数。

    这很奇怪,我不知道原因,但是当您指示参数input_length时,就会抛出错误。

    无论如何,Embedding 层接收Input 层的维度。看来input_length这个参数有一个很具体的用途,可以知道使用了Flatten层之后的张量的维度等等。

    本例中Embedding层从输入张量获取输出张量的形状,忽略input_length参数。

    (如果你设置了一个无效的值,在你添加下一层之前不会抛出错误。注意input_lenght和结果shape):

    >>> inp = Input(shape=(9,20))
    >>> emb = Embedding(100,100, input_length=84) (inp)
    >>> emb
    <tf.Tensor 'embedding_5/embedding_lookup:0' shape=(?, 9, 20, 100) dtype=float32>
    >>> res = Reshape((9,2000)) (emb)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      ...
    

    但是,添加Reshape层时,input_length参数似乎有冲突。

    最后:

    text = Input(shape=(9, news_text.shape[1]), name='text')
    text_layer = Embedding(
        embedding_matrix.shape[0],
        embedding_matrix.shape[1],
        weights=[embedding_matrix],
    )(text)
    text_layer = Reshape((9, text_layer.shape[2] * text_layer.shape[3]))(text_layer)
    

    【讨论】:

    • 谢谢,这行得通!然而,一旦输入长度被删除,生成的重整后的 text_layer 会被输入到 LSTM 中,这会引发错误:float() argument must be a string or a number, not 'Dimension' on scale /= max(1., float(fan_in + fan_out) / 2) in keras initializer.py 知道为什么吗?
    • 抱歉,不知道。有必要查看代码和指示的参数。由于通过编辑此帖子添加新问题会使社区中的答案难以处理,因此我建议创建一个新问题。
    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多