繁体   English   中英

这两种在keras中建立模型的方法有什么区别?

[英]What is the difference between these two ways of building a model in keras?

我是Keras的新手,在完成一些教程后,我开始构建一个模型并找到了这两种实现方式。 但是我在第一个错误中得到错误,第二个错误。 有人可以解释两者之间的区别吗?

第一种方法:


visible = Embedding(QsVocabSize, 1024, input_length=max_length_inp, mask_zero=True)
encoder = LSTM(100,activation='relu')(visible)

第二种方法:


model = Sequential()
model.add(Embedding(QsVocabSize, 1024, input_length=max_length_inp, mask_zero=True))
model.add(LSTM(100,activation ='relu'))

这是我得到的错误:

ValueError: Layer lstm_59 was called with an input that isn't a symbolic tensor. Received type: <class 'keras.layers.embeddings.Embedding'>. Full input: [<keras.layers.embeddings.Embedding object at 0x00000207BC7DBCC0>]. All inputs to the layer should be tensors.

它们是在Keras中创建DL模型的两种方式。 第一个代码片段遵循功能样式。 此样式用于创建复杂模型,如多输入/输出,共享图层等。

https://keras.io/getting-started/functional-api-guide/

第二个代码片段是Sequential样式。 可以创建简单的模型,其仅涉及层的堆叠。

https://keras.io/getting-started/sequential-model-guide/

如果您阅读了功能API指南,您会注意到以下几点:

'一个层实例是可调用的(在张量上),它返回一个张量'

现在你看到的错误是有道理的。 此行仅创建图层,并且不通过传递张量来调用它。

visible = Embedding(QsVocabSize, 1024, input_length=max_length_inp, mask_zero=True)

随后,将此Embedding对象传递给LSTM层会引发错误,因为它需要Tensor。

这是功能API指南中的一个示例。 请注意输出张量从一个层传递到另一个层。

main_input = Input(shape=(100,), dtype='int32', name='main_input')
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)
lstm_out = LSTM(32)(x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM