Python 神经网络中的输入序列是二进制编码还是填充?

Python 神经网络中的输入序列是二进制编码还是填充?,python,machine-learning,keras,neural-network,vectorization,Python,Machine Learning,Keras,Neural Network,Vectorization,首先,我不熟悉深度学习和神经网络,但我在网上找不到这个问题的答案。我试图对路透社的Keras数据集进行分类,结果是在填充序列输入时,如下图所示: x_train = pad_sequences(x_train, maxlen=10000) x_test = pad_sequences(x_test, maxlen=10000) 准确度不超过42%;但是,当我使用相同的模型时 二元矢量化,精度可达95%。以下是二进制矢量化代码: def vectorize_sequences(sequences

首先,我不熟悉深度学习和神经网络,但我在网上找不到这个问题的答案。我试图对路透社的Keras数据集进行分类,结果是在填充序列输入时,如下图所示:

x_train = pad_sequences(x_train, maxlen=10000)
x_test = pad_sequences(x_test, maxlen=10000)
准确度不超过42%;但是,当我使用相同的模型时 二元矢量化,精度可达95%。以下是二进制矢量化代码:

def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.
    return results

x_train = vectorize_sequences(x_train)
x_test = vectorize_sequences(x_test)
以下是图层:

model = models.Sequential()
model.add(layers.Dense(64, activation="relu", input_shape=x_train[0].shape))
model.add(layers.Dense(64, activation="relu"))
model.add(layers.Dense(46, activation='softmax'))
model.compile(optimizer='rmsprop', loss=losses.categorical_crossentropy, metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=512, epochs=20)

这两种方法在结果上有什么不同?还是我做错了什么?

路透社在Keras中的数据集被表示为单词的整数索引。例如,文本“周五加利福尼亚发生了一场野火”被表示为一个数组
[7,18,3673,2,73,89,7643]
(即每个单词对应一个整数索引)。这种表示法对于可以将这些整数映射为数值表示的模型非常有用,例如包含嵌入层的模型。然而,当你将它们作为输入输入输入到没有映射机制的密集连接的神经网络时,它们的性能就不会很好。这是因为这些神经网络并没有被设计成能够很好地处理这样的输入表示


另一方面,您使用的第二种方法将每个文本表示为0和1的向量,其中值1表示存在单词,值0表示不存在单词(这称为单词包表示)。例如,如果向量中索引10的值为1,则表示该文档中存在索引为10的单词。好消息是,像你的问题中那样紧密连接的神经网络非常擅长处理这种表示和对这些输入表示的训练。

谢谢你的回答,我可以阅读任何资源来理解层和输入表示之间的关系吗?因为我找不到任何东西来解释这一点。@MohammadSiavashi好吧,这基本上就是机器学习教育。您需要熟悉不同的输入表示法,以及哪种模型适合每种输入表示法。有很多机器学习的书。然而,更实用的方法是阅读网上的教程。有很多。例如,只需搜索“文本分类keras”或“文本分类嵌入keras”或“文本分类keras单词包”等。