【问题标题】:Lambda layer in Keras with keras.backend.one_hot gives TypeErrorKeras 中的 Lambda 层与 keras.backend.one_hot 给出 TypeError
【发布时间】:2018-05-21 05:22:16
【问题描述】:

我正在尝试使用 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】:

    我会建议一个更清洁的解决方案,可以达到相同的结果,怎么样:

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

    您实际上是在嵌入东西,使用具有固定权重的东西会更有意义。它还为您提供了让嵌入在未来可训练的灵活性。

    【讨论】:

    • 当我尝试训练说ValueError: Error when checking target: expected onehot to have 3 dimensions, but got array with shape (742214, 98) 时出现错误
    • 我在Embedding 文档中也没有看到任何关于weights 的信息。你有这方面的参考吗?
    • 不幸的是,它是 Layer 基类的一部分,文档中没有明确提及。
    • 感谢您的澄清。您对新的错误有什么建议吗?
    • 嵌入输出 (samples, 98, num_classes) 但您的 Y 数据是 2d (samples, 98) 这就是目标不匹配的原因,您尚未处理输入并期望它预测目标。
    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2017-02-10
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多