我正在研究一个单词嵌入模型,当我试图添加一个最终的Reshape时,这个模型总是崩溃。下面是带有抛出的Reshape的模型:
ValueError: total size of new array must be unchanged
我搞不懂为什么这些尺寸不能加起来。
embedding_size = 50
input_size = 46
# Both inputs are 1-dimensional
ingredients = Input(
name='ingredients',
shape=(input_size,)
)
documents = Input(
name='documents',
shape=(input_size,)
)
ingredients_embedding = Embedding(name='ingredients_embedding',
input_dim=training_size,
output_dim=embedding_size)(ingredients)
# Embedding the document (shape is (None, 46, 50))
document_embedding = Embedding(name='documents_embedding',
input_dim=training_size,
output_dim=embedding_size)(documents)
# Merge the layers with a dot product along the second axis (shape is (None, 46, 46))
merged = Dot(name='dot_product', normalize=True, axes=2)([ingredients_embedding, document_embedding])
# ~ This like breaks ~
# Reshape to be a single number (shape will be (None, 1))
merged = Reshape(target_shape=(1,))(merged) # <-- ValueError: total size of new array must be unchanged
m = Model(inputs=[ingredients, documents], outputs=merged)
m.compile(optimizer='Adam', loss='mse')
return m发布于 2019-03-08 11:18:59
将文档表示为向量的一种典型方法是沿着句子维度对document_embedding矩阵求和。
from keras.layers import Input, Embedding, Dot, Reshape, Lambda
from keras.models import Model
import keras.backend as K
embedding_size = 50
input_size = 46
ingredients = Input(
name='ingredients',
shape=(input_size,)
)
documents = Input(
name='documents',
shape=(input_size,)
)
ingredients_embedding = Embedding(name='ingredients_embedding',
input_dim=input_size,
output_dim=embedding_size)(ingredients)
document_embedding = Embedding(name='documents_embedding',
input_dim=input_size,
output_dim=embedding_size)(documents)
#sum over the sentence dimension
ingredients_embedding = Lambda(lambda x: K.sum(x, axis=-2))(ingredients_embedding)
#sum over the sentence dimension
document_embedding = Lambda(lambda x: K.sum(x, axis=-2))(document_embedding)
merged = Dot(name='dot_product', normalize=True, axes=-1)([ingredients_embedding, document_embedding])
merged = Reshape(target_shape=(1,))(merged)
m = Model(inputs=[ingredients, documents], outputs=merged)
m.compile(optimizer='Adam', loss='mse')
m.summary()document_embedding的形状是(None, input_size, embedding_size),所以-2是倒数第二个轴,也就是句子维度的轴。
https://stackoverflow.com/questions/55055858
复制相似问题