Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras中带有Keras.backend.one_hot的Lambda层出现TypeError_Python_Keras_Keras Layer_One Hot Encoding - Fatal编程技术网

Python Keras中带有Keras.backend.one_hot的Lambda层出现TypeError

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,

我想用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,  0,  0,
        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  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 get
TypeError:传递给参数“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),这就是目标不匹配的原因,您尚未处理输入,并期望它预测目标。