TypeError: Значение, переданное параметру 'indexes', имеет тип DataType float32, отсутствующий в списке допустимых значений: int32, int64 - PullRequest
1 голос
/ 29 мая 2019

Я использую Keras для построения моей модели, в моей модели есть два входа, тип данных которых - int32.А затем я использую слой keras Lamba для поиска в матрице встраивания с помощью K.gather (ссылка, индексы).Я вижу, что индексы должны быть тензором 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__)

1 Ответ

0 голосов
/ 29 мая 2019

По какой-то загадочной причине он будет работать правильно, если поместить 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 делает странное преобразование dtype внутри.

Полагаю, это какая-то ошибка, и моя гипотеза состоит в том, что неявное преобразование происходит внутри *1000* __call__ (который унаследован от Layer.__call__) . Я не могу отследить это, но я предполагаю, что ошибка «неявного преобразования» где-то в Layer.__call__, но до строки 451 , где на самом деле вызывается Lambda.call.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...