Keras中使用keras.backend.one_hot的Lambda层给出了TypeError

问题描述 投票:0回答:1

我正在尝试使用Keras训练角色级CNN。我把一个单词作为输入。我已经将这些单词转换为索引列表,但是当我尝试将其输入one_hot时,我得到了一个TypeError

>>> X_train[0]
array([31, 14, 23, 29, 27, 18, 12, 30, 21, 10, 27,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0], dtype=uint8)
>>> X_train.shape
(2226641, 98)

但是当我尝试创建这样的模型时:

k_model = Sequential()
k_model.add(Lambda(K.one_hot, arguments={'num_classes': 100}, input_shape=(98,), output_shape=(98,100)))
k_model.add(Conv1D(filters=16, kernel_size=5, strides=1, padding='valid'))

我得到TypeError: Value passed to parameter 'indices' has DataType float32 not in list of allowed values: uint8, int32, int64

它显然没有达到甚至读取X_train的程度,那么它在哪里获得浮点值?

我想有一个(98, 100)的实例形状,其中100是类的数量。

我无法将整个数据集放入内存中。

python keras keras-layer one-hot-encoding
1个回答
1
投票

我建议一个更清洁的解决方案,以达到相同的结果,如何:

k_model.add(Embedding(num_classes, num_classes,
                      embeddings_initializer='identity',
                      trainable=False,
                      name='onehot'))

你本质上是嵌入东西,使用固定权重的东西会更有意义。它还使您可以灵活地在将来进行嵌入训练。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.