Keras-输入层和嵌入层错误

时间:2019-07-02 20:40:24

标签: python tensorflow keras lstm recurrent-neural-network

我正在尝试为电视脚本生成创建模型,并且在运行以下模型时,发生输入层和嵌入层错误。 我试过在没有这两行的情况下运行模型,并且效果很好。有人可以帮我解决这个错误吗?

embedding = 300
lstm_size = 128
vocab_size = len(vocab) #8420
seq_len = 100


model = Sequential()
model.add(Input((None, )))
model.add(Embedding(inp, input_dim = vocab_size, output_dim = embedding, 
input_length = 1000))
model.add(LSTM(lstm_size, return_sequences = True, return_state = True))
model.add(LSTM(lstm_size, return_sequences = True, return_state = True))
model.add(LSTM(lstm_size, return_sequences = True, return_state = True))
model.add(Flatten())
model.add(Dense(vocab_size))

TypeError                                 Traceback (most recent call last)
<ipython-input-66-695a9250515c> in <module>
 19 #model = Model(inp, out)
 20 model = Sequential()
---> 21 model.add(Input((None, )))
 22 model.add(Embedding(inp, input_dim = vocab_size, output_dim = embedding, input_length = 1000))
 23 model.add(LSTM(lstm_size, return_sequences = True, return_state = True))

~\Anaconda3\lib\site-packages\tensorflow\python\training\checkpointable\base.py in _method_wrapper(self, *args, **kwargs)
440     self._setattr_tracking = False  # pylint: disable=protected-access
441     try:
--> 442       method(self, *args, **kwargs)
443     finally:
444       self._setattr_tracking = previous_value  # pylint: disable=protected-access

~\Anaconda3\lib\site- packages\tensorflow\python\keras\engine\sequential.py in add(self, layer)
143       raise TypeError('The added layer must be '
144                       'an instance of class Layer. '
--> 145                       'Found: ' + str(layer))
146     self.built = False
147     set_inputs = False

TypeError: The added layer must be an instance of class Layer. Found: Tensor("input_37:0", shape=(?, ?), dtype=float32)


This is coming for the Input layer
and,

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-67-3c663f8df357> in <module>
 20 model = Sequential()
 21 #model.add(Input((None, )))
---> 22 model.add(Embedding(inp, input_dim = vocab_size, output_dim = embedding, input_length = 1000))
 23 model.add(LSTM(lstm_size, return_sequences = True, return_state = True))
 24 model.add(LSTM(lstm_size, return_sequences = True, return_state = True))

TypeError: __init__() got multiple values for argument 'input_dim'

this comes for embedding layer.

1 个答案:

答案 0 :(得分:0)

输入不是图层对象。这就是为什么您会遇到第一个错误的原因。您无需通过调用Sequential()传递类似的信息。 Embedding()可以是您的第一层。

第二个错误是因为您要向其传递inp。第一个值应该是inpvocab_size,但不能两者都是。

基本上

embedding = 300
lstm_size = 128
vocab_size = len(vocab) #8420
seq_len = 100


model = Sequential()
model.add(Embedding(vocab_size, embedding, input_length = 1000))