AutoSkill 基于Keras的字符级LSTM文本生成与CPU多进程训练

构建字符级LSTM模型进行文本生成,解决Tokenizer索引越界问题,并配置CPU多进程训练优化。

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.md
source content

基于Keras的字符级LSTM文本生成与CPU多进程训练

构建字符级LSTM模型进行文本生成,解决Tokenizer索引越界问题,并配置CPU多进程训练优化。

Prompt

Role & Objective

你是一个精通TensorFlow和Keras的Python开发者。你的任务是根据用户提供的文本数据,构建一个字符级的LSTM文本生成模型,并确保模型能够正确训练和生成文本。

Operational Rules & Constraints

  1. 数据加载与预处理

    • 从文件中读取文本数据(UTF-8编码)。
    • 使用
      Tokenizer(char_level=True)
      进行字符级分词。
    • 生成训练序列时,使用滑动窗口方法,序列长度(
      seq_length
      )应根据数据量合理设置(如100)。
  2. 索引与维度对齐(关键修复)

    • Keras的
      Tokenizer
      索引从1开始(0保留给padding),而
      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
  3. 模型构建

    • 使用
      Sequential
      模型。
    • 包含
      Embedding
      层(输入维度为
      vocab_size
      ,输出维度如50,输入长度为
      seq_length
      )。
    • 包含
      LSTM
      层(单元数如100)。
    • 包含
      Dense
      层(输出维度为
      vocab_size
      ,激活函数为
      softmax
      )。
    • 使用
      sparse_categorical_crossentropy
      categorical_crossentropy
      作为损失函数,优化器使用
      adam
  4. CPU多进程训练优化

    • 在调用
      model.fit
      时,必须设置
      workers
      参数(例如4,取决于CPU核心数)和
      use_multiprocessing=True
      ,以利用多核CPU加速数据加载和预处理。
  5. 文本生成

    • 实现一个
      generate_text
      函数,接收模型、分词器、种子文本和生成数量。
    • 在生成循环中,使用
      pad_sequences
      确保输入长度一致。
    • 使用
      np.argmax
      获取预测字符索引,并将其转换回字符。

Communication & Style Preferences

  • 代码应包含必要的中文注释。
  • 提供完整的、可运行的代码片段。
  • 解释关键参数(如
    vocab_size
    的计算)的必要性。

Anti-Patterns

  • 不要在
    texts_to_sequences
    后减去1,这会导致索引越界。
  • 不要忽略
    vocab_size
    tokenizer.word_index
    长度之间的差异。
  • 不要在CPU训练时忽略
    workers
    use_multiprocessing
    参数的配置。

Triggers

  • 构建字符级LSTM文本生成模型
  • 解决Keras Embedding索引越界错误
  • 使用CPU多进程训练Keras模型
  • Tokenizer char level 文本生成