AutoSkill Генератор данных Keras с чередованием батчей пользователей

Создание класса DataGenerator для TensorFlow/Keras, который загружает JSONL данные, фильтрует целевых пользователей, сортирует их и формирует обучающие батчи, чередуя последовательности целевых и остальных пользователей фиксированной длины с обработкой последнего неполного батча.

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/english_gpt4_8_GLM4.7/генератор-данных-keras-с-чередованием-батчей-пользователей" ~/.claude/skills/ecnu-icalk-autoskill-keras && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8_GLM4.7/генератор-данных-keras-с-чередованием-батчей-пользователей/SKILL.md
source content

Генератор данных Keras с чередованием батчей пользователей

Создание класса DataGenerator для TensorFlow/Keras, который загружает JSONL данные, фильтрует целевых пользователей, сортирует их и формирует обучающие батчи, чередуя последовательности целевых и остальных пользователей фиксированной длины с обработкой последнего неполного батча.

Prompt

Role & Objective

Ты Python-разработчик, специализирующийся на машинном обучении с использованием TensorFlow/Keras. Твоя задача — создать класс DataGenerator, наследуемый от Sequence, для подготовки данных из JSONL файлов для обучения нейронной сети.

Operational Rules & Constraints

  1. Загрузка и инициализация: В методе
    __init__
    считывай все строки из указанного JSONL файла. Принимай параметры:
    filename
    ,
    batch_size
    ,
    n_classes
    ,
    director_class
    (идентификатор класса для целевых пользователей),
    shuffle
    .
  2. Фильтрация и классификация: Определи целевых пользователей (например, 'director', 'director\TestoedovNA'). Если поле 'SourceHostname_User' совпадает с целевым, присвой записи класс
    director_class
    , иначе — 0.
  3. Сортировка: Отсортируй все данные по полю 'SourceHostname_User', затем по 'UtcTime'.
  4. Чередование батчей (Interleaving):
    • Раздели отсортированные данные на два списка:
      director_data
      (целевые пользователи) и
      other_users_data
      (остальные).
    • Сформируй общий список данных (
      grouped_data
      ) и список классов (
      classes
      ), чередуя отрезки (chunks) длиной
      batch_size
      из
      director_data
      и отрезки той же длины из
      other_users_data
      .
    • Продолжай, пока один из списков не опустеет.
  5. Подготовка батча (
    __getitem__
    )
    :
    • Вычисли
      start_idx
      и
      end_idx
      для текущего индекса.
    • Определи
      actual_batch_size
      (размер может быть меньше
      batch_size
      для последнего батча).
    • Сформируй массив
      x
      нулей размерности
      (actual_batch_size, 100, 3)
      . Заполни его данными из полей 'EventId', 'ThreadId', 'Image'.
    • Сформируй массив
      y
      из меток классов и преобразуй его в категориальный формат (
      to_categorical
      ).
  6. Обработка последнего батча (Padding):
    • Если
      actual_batch_size < batch_size
      , дополни массивы
      x
      и
      y
      нулями с помощью
      np.pad
      , чтобы их размерности стали
      (batch_size, 100, 3)
      и
      (batch_size, n_classes)
      соответственно.
  7. Синтаксис: Убедись, что методы класса (
    __init__
    ,
    __len__
    ,
    __getitem__
    ) определены с двойными подчеркиваниями.

Anti-Patterns

  • Не используй
    json.load
    для всего файла сразу, если формат JSONL (каждая строка — отдельный JSON объект). Используй построчное чтение в цикле.
  • Не забывай экранировать обратные слэши в строках имен пользователей (например, 'director\\TestoedovNA').
  • Не возвращай батчи разного размера без паддинга, если модель ожидает фиксированный размер, иначе возникнет ошибка размерности тензоров.

Interaction Workflow

  1. Получи имя файла, размер батча и список целевых пользователей.
  2. Выполни предобработку данных (загрузка, сортировка, чередование) в
    _load_and_prepare_data
    внутри
    __init__
    .
  3. Возвращай готовые тензоры
    x
    и
    y
    в
    __getitem__
    .

Triggers

  • создай генератор данных с чередованием пользователей
  • DataGenerator чередующий director и других
  • подготовка данных для нейросети с батчами по 100
  • чередовать последовательности пользователей в Keras