Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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 LSTM自动编码中的Keras嵌入层_Python_Tensorflow_Machine Learning_Keras_Deep Learning - Fatal编程技术网

Python LSTM自动编码中的Keras嵌入层

Python LSTM自动编码中的Keras嵌入层,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我正在尝试实现char2vec模型,将人名转换或映射为50维或任意N维向量。它与FastText的get_word_向量或scikit learn的TFIDFvectorier非常相似 基本上,我从中找到了有监督的LSTM模型,并尝试将其转换为无监督或自动编码器模型 下面是模型的细节。输入是人名双字符的填充序列 输入: person_name = [Heynis, Noordewier-Reddingius, De Quant, Ahanfouf, Falaturi ,...] ### Con

我正在尝试实现char2vec模型,将人名转换或映射为50维或任意N维向量。它与FastText的get_word_向量或scikit learn的TFIDFvectorier非常相似

基本上,我从中找到了有监督的LSTM模型,并尝试将其转换为无监督或自动编码器模型

下面是模型的细节。输入是人名双字符的填充序列

输入:

person_name = [Heynis, Noordewier-Reddingius, De Quant, Ahanfouf, Falaturi ,...]

### Convert person name to sequence with post padding
X_train = array([[101,  25, 180,  95, 443,   9, 343, 198,  38,  84,  37,   0,   0,   0,   0,   0,   0],
       [128,  27,   8,   6,  22,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [142, 350, 373,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [999,  14,  33,  16, 512,  36,  52, 352,  14,  33,   5, 211, 143,   0,   0,   0,   0],
       [146,  54,  99,  72, 102,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       ...]
model = Sequential()
model.add(Embedding(num_words, 32, input_length=feature_len))
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(num_classes, activation='softmax'))
型号:

person_name = [Heynis, Noordewier-Reddingius, De Quant, Ahanfouf, Falaturi ,...]

### Convert person name to sequence with post padding
X_train = array([[101,  25, 180,  95, 443,   9, 343, 198,  38,  84,  37,   0,   0,   0,   0,   0,   0],
       [128,  27,   8,   6,  22,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [142, 350, 373,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [999,  14,  33,  16, 512,  36,  52, 352,  14,  33,   5, 211, 143,   0,   0,   0,   0],
       [146,  54,  99,  72, 102,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       ...]
model = Sequential()
model.add(Embedding(num_words, 32, input_length=feature_len))
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(num_classes, activation='softmax'))
理想情况下,这就是我想要的:

inputs = Input(shape=(feature_len,  ))
embedded = Embedding(num_words, 32)(inputs)
encoded = LSTM(50, dropout=0.2, recurrent_dropout=0.2)(embedded)

decoded = LSTM()(encoded)
decoded_inverse_embedded= Inverse_Embedding()(decoded )   # I know it's silly.
outputs = Layer_something()   # to convert back to the original shape

autoencoder_model= Model(inputs, outputs)
encoder = Model(inputs, encoded)   # This is what I want, ultimately.

autoencoder_model.fit(X_train, X_train) 
以下是我尝试过的: 我从你那里得到了密码。似乎在将训练数据输入模型之前对其进行了重塑,因此不需要嵌入层。RepeatVector和TimeDistributed层用于重塑输出。这个模型对我来说似乎是正确的,但我不确定这个重塑和时间分布层是否与嵌入层相似

sequence = X_train.reshape((len(X_train), feature_len, 1))

#define encoder
visible = Input(shape=(feature_len, 1))
encoder = LSTM(50, activation='relu')(visible)

# define reconstruct decoder
decoder1 = RepeatVector(feature_len)(encoder)
decoder1 = LSTM(50, activation='relu', return_sequences=True)(decoder1)
decoder1 = TimeDistributed(Dense(1))(decoder1)

myModel = Model(inputs=visible, outputs=decoder1)

myModel.fit(sequence, sequence, epochs=400)

结果似乎不正确。有没有其他办法解决这个问题?我已经尝试了FastText(通过gensim)和TF-IDF模型,我很好奇这个模型是否更好。

只有一个类,即名称,它不会很好。尝试添加更多类,如位置、非人名。然后将类作为目标传递给输出层。也许这会带来更好的结果。@Bharath,但我只对人名的向量表示感兴趣。只有一个类,即人名,它不会很好。尝试添加更多类,如位置、非人名。然后将类作为目标传递给输出层。也许这会带来更好的结果。@Bharath,但我只对人名的向量表示感兴趣。