python - 这两种在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 中创建深度学习模型的两种方式。第一个代码片段遵循函数式风格。这种风格用于创建复杂的模型,如多输入/输出、共享层等。
https://keras.io/getting-started/functional-api-guide/
第二个代码片段是顺序样式。可以创建仅涉及层堆叠的简单模型。
https://keras.io/getting-started/sequential-model-guide/
如果您阅读功能性 API 指南,您会注意到以下几点:
'图层实例是可调用的(在张量上),它返回一个张量'
现在你看到的错误是有道理的。此行仅创建层,不会通过传递张量来调用它。
visible = Embedding(QsVocabSize, 1024, input_length=max_length_inp, mask_zero=True)
随后,将此嵌入对象传递给 LSTM 层会引发错误,因为它需要一个张量。
这是功能 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)
推荐阅读
- sql - 在 Postgres 中使用 COALESCE 并按结果值分组
- mysql - django 错误 1146 “表 'buysell.sell_sellform' 不存在”
- javascript - 如何将索引连接到 Reactjs 元素中的函数
- java - 如何在junit 5扩展中获得重复计数
- nuxt.js - 在 Nuxt 中使用 eslint 和 prettier?
- c# - Specflow - 无法从 app.config 文件中读取,因为 ConfigurationManager 返回空值
- ios - CoreData:实体中找不到键路径名称
- javascript - 递归地在对象中添加新属性
- django - 在 Django 中返回 HttpResponse() 时,开发 wsgi 服务器卡住了(debug=True)
- regex - 过滤在下一行不包含模式的行中的第一个单词上匹配的行