Общедоступные наборы данных питают исследовательскую ракету по машинному обучению (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.