python-3.x - 在 Keras 函数式 API 中使用嵌入层
问题描述
使用 Keras 功能 API 执行基本操作似乎会产生错误。例如,以下失败:
from keras.layers import InputLayer, Embedding
input = InputLayer(name="input", input_shape=(1, ))
embedding = Embedding(10000, 64)(input)
这会产生错误:
AttributeError:“str”对象没有属性“base_dtype”
然后我可以通过使用input_length
参数“作弊”,但是当我尝试连接两个这样的嵌入时,这会失败:
from keras.layers import InputLayer, Embedding, Concatenate
embedding1 = Embedding(10000, 64, input_length=1)
embedding2 = Embedding(10000, 64, input_length=1)
concat = Concatenate()([embedding1 , embedding2])
这给出了错误:
TypeError:“NoneType”对象不可下标
当我改用“连接”(小写字母)时出现同样的错误(一些消息来源似乎说,如果使用功能性 API,则应该使用它)。
我究竟做错了什么?
我在 tensorflow 版本2.3.1
,keras 版本2.4.3
,python 版本3.6.7
解决方案
我强烈建议使用tf.keras
而不是keras
.
它不起作用,因为InputLayer
是 的一个实例keras.Layer
,而keras.layers.Input
是 的一个实例Tensor
。的论点layer.__call__()
应该是Tensor
而不是keras.Layer
。
import tensorflow as tf
inputs = tf.keras.layers.Input((1,))
print(type(inputs)) # <class 'tensorflow.python.framework.ops.Tensor'>
input_layer = tf.keras.layers.InputLayer(input_shape=(1,))
print(type(input_layer)) # <class 'tensorflow.python.keras.engine.input_layer.InputLayer'>
您InputLayer
与Sequential
API 一起使用。当您使用功能性 API 时,您应该tf.keras.layers.Input()
改用:
import tensorflow as tf
inputs = tf.keras.layers.Input((1, ), name="input", )
embedding = tf.keras.layers.Embedding(10000, 64)(inputs)
与第二个示例相同:
import tensorflow as tf
inputs = tf.keras.layers.Input((1, ), name="input", )
embedding1 = tf.keras.layers.Embedding(10000, 64)(inputs)
embedding2 = tf.keras.layers.Embedding(10000, 64)(inputs)
concat = tf.keras.layers.Concatenate()([embedding1, embedding2])
推荐阅读
- php - WordPress WooCommerce 自定义支付网关开发问题
- reactjs - 无法将解构的道具分配给 react-bootstrap 组件
- ios - 在应用程序购买失败“无法连接到 iTunes Store”错误
- r - 使用 R 计算大数据集中每一行的情绪
- javascript - Javascript:转义字符(\b、\f、\v)是否可以安全地用作用户输入数据和 localStorage 的连接符?
- python-3.x - manjaro上的VS-CODE错误,自动退出,无法打开文件夹
- python - 模块 ctypes 没有属性“windll”
- r - 如何解决 RStudio 中的包安装问题?
- java - 如何在带有指示器的 android java 中创建范围搜索栏?
- flutter - 如何同时使用 FutureBuilder 和 setState 方法?(Flutter)