python - 为 Keras 准备文本数据(张量流)
问题描述
我刚刚使用 Keras Tokenizer 准备了文本数据
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
VOCAB_SIZE= 10000
tokenizer = Tokenizer(num_words = VOCAB_SIZE)
tokenizer.fit_on_texts(X_train)
X_train_seq = tokenizer.texts_to_sequences(X_train)
X_test_seq = tokenizer.texts_to_sequences(X_test)
知道所有应该成为相同长度的向量以适应神经网络。我应该如何使用pad_sequences
Keras 的功能来做到这一点?这会是(不确定maxlen):
X_train_seq _padded = pad_sequences(X_train_seq, maxlen = VOCAB_SIZE)
X_test_seq _padded = pad_sequences(X_test_seq, maxlen = VOCAB_SIZE)
解决方案
是的,您的方法在使用该pad_sequences
选项时是正确的,从技术上讲,您的代码将起作用并且模型将运行。
但是,这可能不是实现您想要做的事情的最佳方式:
- 文本数据的一般格言是序列的平均长度远小于完整的词汇表
- 例如,在您的情况下,您可以尝试查找序列的平均长度,甚至是最大长度,并且该数字不太可能接近 10,000
- 如果这在您的数据中是正确的,则模型实际上看到输入的数据非常稀疏,可以通过选择更好的填充长度轻松地将其转换为更密集的形式
所以你可以保持你的代码不变,只需将maxlen
inpad_sequences(...)
函数的值替换为更合理的数字
- 这可能是您输入的最大长度,或任何其他合适的指标
- 开始时可能有用的一种方法是将其设置为输入数据的平均值加上一个标准差的长度,但很自然,这是特定于任务的
推荐阅读
- wpf - 将控制台可执行文件部署到商店应用程序中的 Tempdir
- java - KMeans 在 ELKI 中的使用,综合示例
- serialization - KafkaAvroSerializer 的额外字节
- python - 循环上传文件
- bixby - Capsule中语音输入和打字输入的区别
- postgresql - 并发事务更改应用程序名称并触发读取它
- python - 从数组中提取匹配元素
- javascript - 当我点击 prev 它跳过一个部分并转到另一个部分
- android - 使用 React-Native-Router-Flux 在所有屏幕中显示组件 - React Native
- java - java.lang.SecurityException:缺少控制媒体的权限 - mediaSessionManager.getActiveSessions