Python Keras中带有Keras.backend.one_hot的Lambda层出现TypeError
我想用Keras训练一个角色级别的CNN。我把一个单词作为输入。我已经将单词转换为索引列表,但是当我尝试将其输入到Python Keras中带有Keras.backend.one_hot的Lambda层出现TypeError,python,keras,keras-layer,one-hot-encoding,Python,Keras,Keras Layer,One Hot Encoding,我想用Keras训练一个角色级别的CNN。我把一个单词作为输入。我已经将单词转换为索引列表,但是当我尝试将其输入到one\u 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,
one\u 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'))
I getTypeError:传递给参数“index”的值的数据类型float32不在允许值列表中:uint8、int32、int64
很明显,它并没有达到X_列被读取的程度,所以它从哪里得到一个浮点值呢
我想要一个(98100)
的实例形状,其中100是类的数量
我无法将整个数据集存储在内存中。我建议使用一种更干净的解决方案来实现相同的结果,如何:
k_model.add(Embedding(num_classes, num_classes,
embeddings_initializer='identity',
trainable=False,
name='onehot'))
你本质上是在嵌入东西,使用固定权重的东西会更有意义。它还为您提供了灵活性,使嵌入在未来可进行培训。我建议一种更清洁的解决方案,可以达到同样的效果,如何:
k_model.add(Embedding(num_classes, num_classes,
embeddings_initializer='identity',
trainable=False,
name='onehot'))
你本质上是在嵌入东西,使用固定权重的东西会更有意义。它还为您提供了灵活性,使嵌入在将来可以进行培训。现在,当我尝试培训时,我得到了一个错误,说:
ValueError:error当检查target:expected onehot有3个维度,但得到了具有形状的数组(742214,98)
在嵌入
文档中,我也没有看到任何关于权重的内容。您对此有任何参考吗?不幸的是,它是基类的一部分,在文档中没有明确提到。感谢您的澄清。您对新错误有什么建议吗?嵌入输出(样本,98,num_类)但您的Y数据是2d(样本,98),这就是目标不匹配的原因,您还没有处理输入,并期望它预测目标。现在,当我尝试训练说ValueError:error when check target:expected one hot有3个维度时,我得到了一个错误,但是得到了形状为(742214,98)的数组。
我在嵌入文档中也没有看到任何关于权重的内容。您对此有任何参考吗?不幸的是,它是基类的一部分,在文档中没有明确提到。感谢您的澄清。您对新错误有什么建议吗?嵌入输出(样本,98,num_类)但您的Y数据是2d(样本,98),这就是目标不匹配的原因,您尚未处理输入,并期望它预测目标。