Python 在TensorFlow函数API中嵌入200.000个不同单词字典
我检查了Stakoverflow和教程中关于Keras和TensorFlow嵌入的几个问题,但没有找到适合我的答案。我解释 我有一本20万字的字典。有10376个独特的“单词”。它们表示蜂窝设备ID.IMEI。在这个特殊的例子中,我想使用Keras函数API处理它们,然后在解决这个问题时最终和数值数据合并 但是我可以通过第一级,哪一部分是嵌入 这是密码Python 在TensorFlow函数API中嵌入200.000个不同单词字典,python,tensorflow,keras,neural-network,word-embedding,Python,Tensorflow,Keras,Neural Network,Word Embedding,我检查了Stakoverflow和教程中关于Keras和TensorFlow嵌入的几个问题,但没有找到适合我的答案。我解释 我有一本20万字的字典。有10376个独特的“单词”。它们表示蜂窝设备ID.IMEI。在这个特殊的例子中,我想使用Keras函数API处理它们,然后在解决这个问题时最终和数值数据合并 但是我可以通过第一级,哪一部分是嵌入 这是密码 #example of device 0 jg4M/taYRc2cBJPGa8c8vw== 1 jg4M/taY
#example of device
0 jg4M/taYRc2cBJPGa8c8vw==
1 jg4M/taYRc2cBJPGa8c8vw==
2 jg4M/taYRc2cBJPGa8c8vw==
3 chIM3a44QxatbmmjyBFGDQ==
4 PdhyfpkIT8Weslb54thwuQ==
5 lrDcRnK7RtKkvaqaYjliBQ==
#lenght of the device
device_len = len(device)
device_len
200000
#uniques device inside the 200000
top_words = len(np.unique(device))
top_words
10376
#keras encoded
encoded_docs = [one_hot(d, top_words) for d in device]
#max length of the vector for each word
max_length = 2
padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')
print(padded_doc)
[[10269 9475]
[10269 9475]
[10269 9475]
...
[ 1340 2630]
[ 7270 0]
[ 2364 9298]]
#converted to tensors
padded_docs = tf.convert_to_tensor(padded_docs)
sess = tf.InteractiveSession()
print(padded_docs.eval())
sess.close()
#here is the networks
top_words = 10376
embedding_vector_length = 2
x = Embedding(top_words, embedding_vector_length)(padded_docs)
x = Dense(2, activation='sigmoid')(x)
modelx = Model(inputs=padded_docs, outputs = x)
我检查了类似的问题和答案,但找不到适合我的
如果有人能帮助我,我将不胜感激
非常感谢。创建模型时,输入应该是输入层,而不是张量
input = keras.layers.Input((max_length,))
x = Embedding(top_words, embedding_vector_length)(input)
x = Dense(2, activation='sigmoid')(x)
modelx = Model(inputs=input, outputs=x)
您需要为您的模型输入
<代码>填充文档
不是张量,而是“数据”
此外,您需要填充的文档由“整数”组成,而不是由一个热编码组成。嵌入层需要整数
需要注意的是,您不会将其作为张量传递,而是作为常规numpy数组传递,以便使用model.fit
进行训练
因此,您需要删除one\u hot
和convert\u to\u tensor
部分
然后你会做一个model.fit(填充的文档,无论输出什么,…等等)
我按照你的建议做了,我有一个新的错误:ValueError:模型的输出张量必须是Keras层的输出(因此保存过去的层元数据)。发现:张量(“稠密/乙状:0”,形状=(200000,2,2),dtype=float32),你能帮忙吗?求你了?@Gabriel对不起,我错过了那部分。请参见编辑。我将嵌入层的输入从padded_docs
更改为输入层。非常感谢,仍然有一个错误,我复制了您的代码。AttributeError:'Node'对象没有与嵌入有关的属性'output_masks'part@Gabriel不是100%确定如何修复,但这是另一个问题。谷歌它,如果你仍然需要帮助,问一个关于堆栈溢出的新问题。另外,另一件不相关的事情:pad_序列中的maxlen
是序列的最终长度,而不是嵌入向量的大小。谢谢。我想原始数据是一组数字和字母,如jg4M/taYRc2cBJPGa8c8vw==。如果不是一个hoe编码器,我如何将其转换为整数?丹尼尔:)d不是整数吗?encoded\u docs=[设备中d的一个热门词(d,top\u words)]
设备是一个字符串,d
不是整数,这就是我在这个项目中一直遇到的问题。如果我用Sequential()实现,它会工作,但如果我用函数API实现,它不会。我不得不使用函数式,因为数据集非常复杂。抱歉重播太晚了。不同的时区。如果它与顺序
一起工作,那么它肯定与函数一起工作,您只需要输入
张量,正如这里的两个答案所示。如果您将填充文档
作为张量,那么输入(张量=填充文档)
可能会工作。
input = keras.layers.Input((max_length,))
x = Embedding(top_words, embedding_vector_length)(input)
x = Dense(2, activation='sigmoid')(x)
modelx = Model(inputs=input, outputs=x)
from keras.layers import Input
inputs = Input((doc_length,))
x = Embedding(top_words, embedding_vector_length)(inputs)
x = Dense(2, activation='sigmoid')(x)
modelx = Model(inputs=inputs, outputs = x)