Keras 中具有 keras.backend.one_hot 的 Lambda 层给出 TypeError
Lambda layer in Keras with keras.backend.one_hot gives TypeError
我正在尝试使用 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 是 类 的数量。
我无法将整个数据集放入内存。
我会建议一个更简洁的解决方案来实现相同的结果,怎么样:
k_model.add(Embedding(num_classes, num_classes,
embeddings_initializer='identity',
trainable=False,
name='onehot'))
你本质上是在嵌入东西,使用固定权重的东西会更有意义。它还使您可以灵活地使嵌入在未来可训练。
我正在尝试使用 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 是 类 的数量。
我无法将整个数据集放入内存。
我会建议一个更简洁的解决方案来实现相同的结果,怎么样:
k_model.add(Embedding(num_classes, num_classes,
embeddings_initializer='identity',
trainable=False,
name='onehot'))
你本质上是在嵌入东西,使用固定权重的东西会更有意义。它还使您可以灵活地使嵌入在未来可训练。