Google Development Days China 2018 недавно прошел в Китае. Очень жаль, что редактор застрял в Хэфэй из-за непреодолимых факторов и не смог принять участие. Но моему другу посчастливилось побывать на конференции и привезти информацию о tensorlfow из первых рук. Следуйте за редактором здесь, чтобы сосредоточиться на лучшем применении tensorflow в производственной среде.
Фэн Ифэй, инженер-программист в Google Brain, представил нам замечательный отчет под названием «Прототипирование модели, обучение и ввод в производство с помощью высокоуровневых API-интерфейсов Tensorflow».
Сестра Фэн Ифэй рассказала нам о некоторых изменениях в новом API tensorflwo и, самое главное, выдвинула несколько предложений по использованию tensorflow.
Можно сделать вывод, что существует шесть аспектов, а именно:
-
Прототип с шаблоном Eager Pattern
-
Работа с данными с наборами данных
-
Извлечение функций с помощью столбцов функций
-
Моделирование с помощью Keras
-
Заимствование стандартных оценщиков
-
Упаковка модели с помощью SavedModel
Давайте рассмотрим эти шесть аспектов по очереди.
Прототип с шаблоном Eager Pattern
Как часть компьютерного мира, мы знаем, что эффективность статических графов естественно высока, но использование динамических графов делает наше использование очень удобным. В 2017 году стали популярными динамические графики основных фреймворков, поэтому Google предложила tf.contrib.eager для решения этой задачи.
Каковы преимущества использования Eager? Вспоминая, что при отладке тензорных программ нам приходилось использовать sess.run(), что было хлопотно, но с помощью Eager можно напрямую выводить переменные, что значительно облегчало нам отладку, пользы не так много, в модели при построении , нам нужно было тщательно рассмотреть форму тензора раньше, и было нелегко найти его после того, как была допущена ошибка. С помощью Eager вы можете построить сетевую структуру во время печати формы, чтобы убедиться, что она верна. Это облегчает нам построение сети, кроме того, после использования Eager будет намного проще настроить Operation и Gradient.
Вот простой небольшой пример. Сначала установите Eager с помощью pip install tf-nightly (или pip install tf-nightly-gpu для версий GPU).
import tensorflow as tfimport tensorflow.contrib.eager as tfetfe.enable_eager_execution() #开启Eager模式a = tf.constant([5], dtype=tf.int32)for i in range(a): print (i)
После использования Eager мы можем плавно выполнить приведенный выше код. Но если нет Eager, будет сообщено об ошибке, что объект Tensor не может быть интерпретирован как целое число. Что касается недостатков, то внедрение Eager неизбежно повлечет за собой дополнительные расходы.
Работа с данными с наборами данных
Есть три способа чтения данных в тензорном потоке: через подачу, через конвейер и прямое чтение данных, хранящихся в переменных или константах. Наборы данных относятся ко второму предложенному выше методу, который позволяет упростить процесс ввода данных и повысить эффективность чтения данных.
Состав наборов данных показан выше. в:
-
Набор данных: основы создания и преобразования наборов данных;
-
TextLineDataset: читать строки из текстового файла;
-
TFRecordDataset: читать файлы TFRecord;
-
FixedLengthRecordDataset: чтение записей фиксированного размера из двоичных файлов;
-
Итератор: предоставляет способ доступа к элементам набора данных по одному.
Для использования наборов данных мы можем использовать методы, предоставляемые подклассами набора данных, или напрямую использовать методы базового класса: tf.data.Dataset.from_tensors() или tf.data.Dataset.from_tensor_slices().
Извлечение функций с помощью столбцов функций
Столбцы функций на самом деле представляют собой структуру данных, структуру данных, используемую для описания функций. Используя Feature Columns, очень удобно обрабатывать функции перед вводом обучающей модели. Например, при идентификации радужной оболочки для входных данных каждый столбец представляет разные характеристики, такие как длина лепестков, длина чашечки и т. д. Мы хотим обрабатывать разные столбцы отдельно (или обрабатывать все столбцы), использовать Столбцы функций могут быть легко достигнуты.
Как показано на рисунке выше, столбцы признаков формируют структурное описание входного набора данных. Нам удобно обрабатывать каждый столбец данных, и делает код более читабельным.
Моделирование с помощью Keras
Предположительно все хорошо понимают Keras Использование Keras для построения нейронной сети просто быстро и полностью совместимо с тензорным потоком.
simple_model=Sequential()simple_model.add(Dense(3,input_shape=(x.shape[1],),activation='relu',name='layer1'))simple_model.add(Dense(5,activation='relu',name='layer2'))simple_model.add(Dense(1,activation='sigmoid',name='layer3'))
Построить модель так же просто, как описано выше, а для вызова модели, определенной в API, требуется всего одно предложение, что чрезвычайно удобно.
Заимствование стандартных оценщиков
Estimators API предоставляет ряд функций для выбора модели, оценки, обучения и многого другого. После версии 1.3 Google добавил еще один слой под названием Canned Estimators. Глубокие модели можно создать с помощью всего одной строки кода. Оценщики можно использовать в сочетании с столбцами признаков, упомянутыми выше.
tf.estimator.Estimator — это базовый класс; Pre-made Estimators — это подкласс базового класса, который является определенной моделью, и мы можем использовать его напрямую; Custom Estimators — это фактический столбец базового класса, который не определен и должно быть Мы сами реализуем определение модели.
Для модели здесь он состоит из трех частей:
-
Функция ввода: функция ввода, то есть наборы данных, о которых мы упоминали ранее, представляет данные;
-
Функция модели: обучение, проверка, тестирование экспериментальных моделей и мониторинг параметров модели;
-
Оценщики: управляйте потоком данных и различными операциями с моделью.
Упаковка модели с помощью SavedModel
По сравнению со способом сохранения модели в оригинальном tf.train.Saver tensorflow, SavedModel предоставляет лучшие средства развертывания модели в среде генерации, что больше подходит для коммерческих целей.
Как показано в нижней правой части рисунка выше, при использовании SavedModel для упаковки модели можно создать две модели:
В соответствии с первой моделью анализ модели Tensorflow может помочь нам проанализировать модель, есть ли проблема с параметрами, модель не спроектирована должным образом и т. д. После анализа мы чувствуем, что модель хороша, мы можем использовать Tensorflow Serving для развертывания.
Кроме того, по сравнению с методом Saver, нам не нужно переопределять График (модель) во время вывода.Если мы используем Saver, нам нужно переопределить модель при использовании модели.Если он разработан и используется программистом, он Также хорошо, если другая обезьяна использует эту модель и он не знает тензор модели, это будет неловко. Таким образом, использование SavedModel упрощает использование модели.
Суммировать
Google Developer Days подарили нам праздник, и мы надеемся почерпнуть новые знания вместе с вами. Если можно, поставьте лайк этой статье. Говорят, что любой, кому это нравится, может попасть в Google.
читать далее
Плюсы и минусы реактивной технологии
Один трюк, который научит вас понимать разницу между JVM и Dalvik
(Android) Ответы на вопросы уровня интервью (выборочное издание)
Программисты из неклассов: Как получить профессиональные ресурсы и попасть в хорошую компанию?