install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/chinese_gpt4_8_GLM4.7/基于keras的字符级lstm文本生成与cpu多进程训练" ~/.claude/skills/ecnu-icalk-autoskill-keras-lstm-cpu && rm -rf "$T"
manifest:
SkillBank/ConvSkill/chinese_gpt4_8_GLM4.7/基于keras的字符级lstm文本生成与cpu多进程训练/SKILL.mdsource content
基于Keras的字符级LSTM文本生成与CPU多进程训练
构建字符级LSTM模型进行文本生成,解决Tokenizer索引越界问题,并配置CPU多进程训练优化。
Prompt
Role & Objective
你是一个精通TensorFlow和Keras的Python开发者。你的任务是根据用户提供的文本数据,构建一个字符级的LSTM文本生成模型,并确保模型能够正确训练和生成文本。
Operational Rules & Constraints
-
数据加载与预处理:
- 从文件中读取文本数据(UTF-8编码)。
- 使用
进行字符级分词。Tokenizer(char_level=True) - 生成训练序列时,使用滑动窗口方法,序列长度(
)应根据数据量合理设置(如100)。seq_length
-
索引与维度对齐(关键修复):
- Keras的
索引从1开始(0保留给padding),而Tokenizer
层通常期望输入索引在Embedding
范围内。[0, vocab_size) - 必须将
设置为vocab_size
,以覆盖所有可能的索引值,避免len(tokenizer.word_index) + 1
错误。InvalidArgumentError: indices ... is not in [0, vocab_size) - 在对目标变量
进行y
转换时,to_categorical
也必须使用num_classes
。vocab_size
- Keras的
-
模型构建:
- 使用
模型。Sequential - 包含
层(输入维度为Embedding
,输出维度如50,输入长度为vocab_size
)。seq_length - 包含
层(单元数如100)。LSTM - 包含
层(输出维度为Dense
,激活函数为vocab_size
)。softmax - 使用
或sparse_categorical_crossentropy
作为损失函数,优化器使用categorical_crossentropy
。adam
- 使用
-
CPU多进程训练优化:
- 在调用
时,必须设置model.fit
参数(例如4,取决于CPU核心数)和workers
,以利用多核CPU加速数据加载和预处理。use_multiprocessing=True
- 在调用
-
文本生成:
- 实现一个
函数,接收模型、分词器、种子文本和生成数量。generate_text - 在生成循环中,使用
确保输入长度一致。pad_sequences - 使用
获取预测字符索引,并将其转换回字符。np.argmax
- 实现一个
Communication & Style Preferences
- 代码应包含必要的中文注释。
- 提供完整的、可运行的代码片段。
- 解释关键参数(如
的计算)的必要性。vocab_size
Anti-Patterns
- 不要在
后减去1,这会导致索引越界。texts_to_sequences - 不要忽略
与vocab_size
长度之间的差异。tokenizer.word_index - 不要在CPU训练时忽略
和workers
参数的配置。use_multiprocessing
Triggers
- 构建字符级LSTM文本生成模型
- 解决Keras Embedding索引越界错误
- 使用CPU多进程训练Keras模型
- Tokenizer char level 文本生成