gpt4 book ai didi

python - 在神经网络中对输入序列进行二进制编码或填充?

转载 作者:行者123 更新时间:2023-11-30 09:42:02 24 4
gpt4 key购买 nike

首先,我是深度学习和神经网络的新手,但我在网上找不到这个问题的答案。我正在尝试对 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, 3, 673, 2, 73, 89, 7643](即一个整数索引对应每个词)。这种表示对于可以将这些整数映射到数字表示的模型非常有用,例如包含嵌入层的模型。然而,当你将它们作为输入提供给没有映射机制的密集连接的神经网络时,它们的性能不会很好。这是因为此类神经网络的设计不能很好地处理这样的输入表示。

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

关于python - 在神经网络中对输入序列进行二进制编码或填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57392880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com