首页 文章

Keras LSTM输入尺寸,带有一个热文本嵌入

提问于
浏览
6

我有70k样本的文本,我使用Keras 'one hot'预处理嵌入 . 这给了我一个 [40, 20, 142...] 的数组,然后我将其填充长度为28(最长的样本长度) . 我所要做的就是将这些值预测为某些分类标签(0到5可以说) . 当我训练模型时,我无法获得超过-13%准确度的任何东西(目前我的错误是this我已经尝试了很多方法来传递输入) .

This is my data目前正在尝试创建一个简单的LSTM . 我的数据再次是X - > [28个整数值的长度,嵌入]和Y - > [长度为3的整数,(100,143等)] . 知道我做错了什么?我问了很多人,没有人能帮忙 . 这是我的模型的代码...任何想法? :(

optimizer = RMSprop(lr=0.01) #saw this online, no idea
model = Sequential()
model.add(Embedding(input_dim=28,output_dim=1,init='uniform')) #28 features, 1 dim output?
model.add(LSTM(150)) #just adding my LSTM nodes
model.add(Dense(1)) #since I want my output to be 1 integer value

model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
print(model.summary())

Edit:

使用 model.add(Embedding(input_dim=900,output_dim=8,init='uniform')) 似乎工作但仍然准确性从未改善,我不知道该怎么做 .

1 回答

  • 6

    我有两个建议 .

    • 也为目标变量(y)使用一个热表示 . 如果将Y作为整数给出,它将成为回归问题 . 只有当您提供一个热门编码时,它才会成为分类问题 .

    • 当您有大量文本而不是一个热嵌入时,请尝试使用word2vec嵌入 .

    optimizer = RMSprop(lr=0.01) 
    embedding_vecor_length = 32
    max_review_length = 28
    nb_classes= 8
    model = Sequential()
    model.add(Embedding(input_dim=900, output_dim=embedding_vecor_length,
                        input_length=max_review_length)) 
    
    model.add(LSTM(150))
    
    #output_dim is a categorical variable with 8 classes
    model.add(Dense(output_dim=nb_classes, activation='softmax'))
    
    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
    print(model.summary())
    
    model.fit(X_train, y_train, nb_epoch=3, batch_size=64)
    
    # Final evaluation of the model
    scores = model.evaluate(X_test, y_test, verbose=0)
    print("Accuracy: %.2f%%" % (scores[1]*100))
    

相关问题