Keras Reshape:新数组的总大小必须不变
Keras Reshape: total size of the new array must be unchanged
我正在尝试使用 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)
从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)
我正在尝试使用 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)
从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)