Общедоступные наборы данных питают исследовательскую ракету по машинному обучению (h / t Andrew Ng), но по-прежнему слишком сложно просто передать эти наборы данных в конвейер машинного обучения. Каждый исследователь испытывает трудности с написанием разовых сценариев для загрузки и подготовки каждого набора данных, с которым он работает, который имеет разные исходные форматы и сложность. Уже нет.

Сегодня мы рады представить наборы данных TensorFlow (GitHub), которые представляют наборы данных общедоступных исследований как tf.data.Datasets и как массивы NumPy. Он выполняет всю грубую работу по извлечению исходных данных и подготовке их к общему формату на диске, а также использует tf.data API для создания высокопроизводительных конвейеров ввода, которые готовы к TensorFlow 2.0 и могут использоваться с tf.keras моделями. Мы запускаем 29 популярных исследовательских наборов данных, таких как MNIST, Street View House Numbers, эталонный тест модели языка 1 миллиард слов и набор данных Большие обзоры фильмов, и в ближайшие месяцы добавим больше; мы надеемся, что вы присоединитесь и сами добавите набор данных.

tl;dr

Попробуйте tfds в тетрадке Colab.

tfds.load и DatasetBuilder

Каждый набор данных представлен как DatasetBuilder, который знает:

  • Откуда скачать данные и как их извлечь и записать в стандартный формат (DatasetBuilder.download_and_prepare).
  • Как загрузить с диска (DatasetBuilder.as_dataset).
  • И вся информация о наборе данных, такая как имена, типы и формы всех функций, количество записей в каждом разбиении, исходные URL-адреса, ссылка на набор данных или связанный документ и т. Д. (DatasetBuilder.info).

Вы можете напрямую создать экземпляр любого из DatasetBuilder или получить их по строке с помощью tfds.builder:

as_dataset() принимает аргумент batch_size, который будет выдавать вам партии примеров вместо одного примера за раз. Для небольших наборов данных, которые умещаются в памяти, вы можете передать batch_size=-1, чтобы получить сразу весь набор данных как tf.Tensor. Все tf.data.Datasets можно легко преобразовать в итерации массивов NumPy с помощью tfds.as_numpy().

Для удобства вы можете сделать все вышеперечисленное с помощью tfds.load, который выбирает DatasetBuilder по имени, вызывает download_and_prepare() и вызывает as_dataset().

Вы также можете легко получить объект DatasetInfo из tfds.load, передав with_info=True. См. Документацию по API для получения информации обо всех вариантах.

Управление версиями набора данных

Каждый набор данных имеет версии (builder.info.version), поэтому вы можете быть уверены, что данные не изменяются внутри вас и что результаты воспроизводимы. На данный момент мы гарантируем, что если данные изменятся, версия будет увеличена.

Обратите внимание: хотя мы гарантируем, что значения данных и разбиения идентичны для одной и той же версии, в настоящее время мы не гарантируем упорядочение записей для одной и той же версии.

Конфигурация набора данных

Наборы данных с различными вариантами настраиваются с помощью BuilderConfigs. Например, набор данных просмотра большого фильма (tfds.text.IMDBReviews) может иметь разные кодировки для входящего текста (например, обычный текст, или кодировку символов, или кодировку подслова). Встроенные конфигурации перечислены в документации по набору данных и могут быть адресованы по строке, или вы можете передать свою собственную конфигурацию.

См. Раздел о настройке набора данных в нашей документации по добавлению набора данных.

Текстовые наборы данных и словари

С текстовыми наборами данных часто бывает сложно работать из-за разных кодировок и файлов словаря. tensorflow-datasets делает это намного проще. Он поставляется с множеством текстовых задач и включает три типа текстовых кодировщиков, каждый из которых поддерживает Unicode:

  • ByteTextEncoder для кодировок на уровне байтов / символов
  • TokenTextEncoder для кодировок на уровне слов на основе файла словаря
  • SubwordTextEncoder для кодировок на уровне подслов (и возможность создавать словарь подслов, настроенный на конкретный корпус текста) с резервным вариантом на уровне байтов, чтобы он был полностью обратимым. Например, «hello world» можно разделить на [«he», «llo», «», «wor», «ld»], а затем закодировать целыми числами. Подслова представляют собой золотую середину между кодировками на уровне слов и на уровне байтов и популярны в некоторых проектах исследования естественного языка.

Доступ к кодировщикам и размерам их словаря можно получить через DatasetInfo:

Наборы данных TensorFlow и TensorFlow будут работать над улучшением поддержки текста в будущем.

Начиная

Наш сайт документации - лучшее место для начала использования tensorflow-datasets. Вот несколько дополнительных указателей для начала:

Мы ожидаем добавления наборов данных в ближайшие месяцы и надеемся, что сообщество присоединится к нам. Откройте GitHub Issue, чтобы запросить набор данных, проголосовать за то, какие наборы данных следует добавить в следующий раз, обсудить реализацию или попросить о помощи. И запросы на вытягивание очень приветствуются! Добавьте популярный набор данных, чтобы внести свой вклад в сообщество, или, если у вас есть собственные данные, внесите их в TFDS, чтобы сделать ваши данные известными!

Теперь, когда данные доступны, счастливого моделирования!

Благодарности

Наборы данных TensorFlow - это командная работа. Наши основные разработчики - Этьен Пот,
Афроз Мохиуддин, Пьер Рюссен, Марчин Михальски и Райан Сепасси. Мы также
благодарим Иржи Симсу за помощь с tf.data и Мартина Вике
за поддержку проекта. Спасибо всем!

Мы хотели бы поблагодарить Стефана Уэбба из Оксфорда за разрешение использовать tensorflow-datasets имя PyPI. Спасибо, Стефан!

Мы также хотели бы поблагодарить Лукаша Кайзера и проект Tensor2Tensor за вдохновляющие и направляющие тензорные потоки / наборы данных. Спасибо, Лукаш! T2T скоро перейдет на tenorflow / datasets.