python - TypeError:传递给参数“indices”的值的 DataType float32 不在允许值列表中:int32、int64
问题描述
我使用 Keras 构建模型,模型中有两个输入,其数据类型为“int32”。然后我使用 keras Lamba 层通过 K.gather(reference, indices) 在嵌入矩阵中查找。我看到索引应该是 int 的张量,我认为我的代码符合这一点,我不知道为什么会出现错误。我真的需要帮助!
input_A = Input(batch_shape=(128,1),name='A_input',dtype='int32')
input_B = Input(batch_shape=(128,1),name='B_input',dtype='int32')
input_A_ = Lambda(lambda x:K.reshape(x,(-1,)))(input_A)
input_B_ = Lambda(lambda x:K.reshape(x, (-1,)))(input_B)
input_A__ = Lambda(lambda x:K.cast(x,dtype='int32'))(input_A_)
input_B__ = Lambda(lambda x:K.cast(x,dtype='int32'))(input_B_)
embedded_text_A = Lambda(lambda x:K.gather(M1,x))(input_A__)
embedded_text_B = Lambda(lambda x:K.gather(M1,x))(input_B__)
解决方案
K.cast()
出于某种神秘的原因,如果一个地方在里面,它会正常工作lambda
:
input_A = Input(batch_shape=(128,1), name='A_input', dtype='int32')
input_B = Input(batch_shape=(128,1), name='B_input', dtype='int32')
input_A_ = Lambda(lambda x: K.reshape(x, (-1,)))(input_A)
input_B_ = Lambda(lambda x: K.reshape(x, (-1,)))(input_B)
embedded_text_A = Lambda(lambda x: K.gather(M1, K.cast(x, dtype='int32')))(input_A_)
embedded_text_B = Lambda(lambda x: K.gather(M1, K.cast(x, dtype='int32')))(input_B_)
因此,Lambda
layer 在内部进行了一些奇怪的 dtype 转换。
我想这是某种错误,我的假设是隐式转换发生在Lambda
's内__call__
(继承自Layer.__call__
)。我无法跟踪它,但我猜“隐式转换”错误在某处Layer.__call__
,但在实际调用451行之前。Lambda.call
推荐阅读
- gitlab - Gitlab 外部维基
- java - 创建一个包含前 x 个快乐数字的数组
- php - 定义常量后的 Session_start()
- thonny - 如何将数字文本文件,用户输入的数字加在一起并制作一个函数
- json - 使用 JSON REST 端点与 Waze 共享道路封闭
- api - 如何在 Jetbrains Team City 的 Pending changes 中获取文件列表
- fastlane - 如何列出我所有安装的 fastlane 插件?
- python - 请求中的 url 上的 ReadTimeout 获取?
- r - stats的含义:R中的密度函数输出值
- sql - ORA-01422: 精确提取返回的行数超过了函数中请求的行数