我试图理解嵌入层是如何与掩蔽一起工作的(对于序列到序列的回归)。在
此简单代码失败,错误为:AttributeError: 'Embedding' object has no attribute 'get_shape'
。这似乎是真的,但我不知道怎么解决它。有什么提示吗?在
import numpy as np
from keras.layers import Input, Dense, LSTM
from keras.layers.embeddings import Embedding
from keras.layers.merge import Concatenate
from keras.models import Model
from keras.utils import plot_model
trainExs = np.asarray([ [1, 2, 3], [2, 3, 1]])
trainLabels = np.asarray([[1, 1, 1], [2, 2, 2]])
print('Examples, shape:', trainExs.shape)
print('Labels, shape:', trainLabels.shape)
W = [[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]]
symDim = 3
# E M B E D D I N G S
# symbol_in = Input(shape=(None, 1), dtype='float32', name='symbol_input')
symbol_emb = Embedding(symDim+1, symDim,
weights=np.asarray(W), trainable=False, input_length=3)
symbol_dense = Dense(symDim, use_bias=True, name='symbol_dense')(symbol_emb)
output_layer = Dense(symDim, dtype='float32', name='output')(symbol_dense)
# M O D E L
model = Model(inputs=[symbol_emb], outputs=[output_layer])
model.compile(loss='mean_squared_error', optimizer='RMSprop', metrics=['accuracy'])
# print(model.summary())
完整堆栈跟踪如下:
^{pr2}$
您将
symbol_emb
作为输入输入输入到模型中,但是symbol_emb
是嵌入层的名称,不是有效的输入。定义输入,例如:注意,您不需要用这种方式在
Embedding
中定义input_length
。在相关问题 更多 >
编程相关推荐