Что такое ТензорФлоу?

TensorFlow

предисловие

Только лысая голова может стать сильнее.

Текст был включен в мой репозиторий GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…

Оглядываясь назад на фронт:

Что означает TensorFlow? Тензор? Поток? В этой статье представлены некоторые из самых базовых знаний о TensorFlow.

1. Введение в тензор

Прежде чем вводить, сначала запомните вывод:TensorFlow использует тензоры для представления данных

Давайте взглянемЧто такое тензор, в документации на официальном сайте Tensor переводится как "Тензор". Там же дается определение:

Тензорявляется обобщением векторов и матриц до потенциально более высоких измерений, а TensorFlow внутренне представляет тензоры какn-мерный массив примитивных типов данных.

Я не знаю, что вы чувствуете, прочитав это предложение. Во всяком случае, я не понимал этого в то время. Что такое "тензор"? . Итак, я побежал к Чжиху и использовал его.ключевые словаИскал: "что такое тензор". Я действительно нашел для себя связанный с этим вопрос: «Как понимать тензоры вообще?»

Я думал, что через Zhihu я смогу понять, что такое тензор, в простой для понимания форме и дать мне четкое представление. Как известно, большинство респондентов отвечают вФизика и математикаОпределение тензора в середине, а дальше выложена куча формул, которые я не могу понять. Среди них также виделиотносительноПростое для понимания определение:

Величина, которая преобразуется по определенному правилу в различных системах отсчета, является тензором.

Прочитайте все ответы респондентов и прочитайте ихболее абстрактный. Вернитесь к официальной документации и посмотрите пример официального введения тензоров.по-видимомуЯ немного понимаю.

Пока у нас два вывода:

  • TensorFlow использует тензоры для представления данных
  • TensorFlow внутренне представляет тензоры какn-мерный массив примитивных типов данных

Позвольте мне перевести два предложения выше:Все данные в TensorFlow представляют собой n-мерный массив, но мы даем ему имя Tensor.

Там много метаний посередине, но по сути это пока первый вывод и официальное определениеретранслироватьЕсли вы думаете, что это легко понять... но во многих случаях обучение — это именно такой процесс.

1.1 Основа тензора

Из вышесказанного мы уже узнали, что Tensor (тензор) на самом деле является n-мерным массивом. Это расширяет несколько терминов:

  • орден (ранг)
  • форма

1.1.1 орден (ранг)

На самом деле порядок такой, что мы обычно говоримизмерение.

  • Например, если у нас есть двумерный массив, то этот порядок равен 2.
  • Например, если у нас есть трехмерный массив, то этот порядок равен 3.

В прошлом при написании Java вы, как правило, сталкивались с двухмерностью, но в машинном обучении она, вероятно, будет иметь очень большие размерности.Как мы считаем измерения? очень просто, мычисловые скобкиВот и все. Например, мы можем увидеть вывод массива в следующем виде:

[[[9 6]
  [6 9]
  [8 8]
  [7 9]]
 [[6 1]
  [3 5]
  [1 7]
  [9 4]]]

Мы прямо смотрим на первую скобку до первого числа, и мы будем знать, сколько там скобок.[[[9Можно найти, что скобок 3, значит это трехмерный массив, и его порядок (ранг) равен 3

1.1.2 Форма

тензорформапозволяет нам видетьколичество элементов в каждом измерении.

Например, мы создаем двумерный массив в Java:int [][] array = new int[3][4], мы можем знать, что массивЕсть три строки и четыре столбца. Но если мы создадим многомерный массив, то не понятно только со строками и столбцами. Итак, в TensorFlow мы обычно описываем это так:

  • Количество элементов в первом измерении равно 3, а количество элементов во втором измерении равно 4.
  • По сути, это все равно означает то же самое, но толькоутверждениеПросто изменился.

Если мы хотим напечатать форму указанного выше массива, мы можем получить такой результат:shape = (3,4). Давайте посмотрим на первую статью, когда мы писали «Машинное обучение HelloWorld», а затем посмотрим на результаты, напечатанные в то время:shape = (60000, 28, 28). Через форму мы можемполучить некоторую информацию:

  • Текущий массив трехмерный
  • В первом измерении 60000 элементов.
  • Во втором измерении 28 элементов.
  • В третьем измерении 28 элементов.

Тогда, если мы получим массив, как нам передатьневооруженным глазомА как насчет его формы?

Например:m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]], это очень просто, сразу видно, что это двумерный массив (матрица) с тремя строками и тремя столбцами. Таким образом, результат формы должен быть (3,3)

Давайте посмотрим еще на один:t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]], из нескольких скобок видно, что это трехмерное изображение. Давайте положимкрайняя скобкаРезультат его удаления[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]

Хорошо, на данный момент мы можем понять, что естьтриподмассивы, поэтому наша форма может быть записана сначала какshape(3,?,?)

  • Мы судили по скобкам, что он должен быть трехмерным, значит, он должен быть(?,?,?)из. Из числа «подмассивов» заполняем первый «?» цифрами 3

Затем мы продолжаем удалять внешние скобки и получаем такой результат:[2], [4], [6], там тоже три элемента, так что нашу фигуру можно заполнитьshape(3,3,?)

Наконец, сняв круглые скобки, мы можем обнаружить, что существует только один элемент, поэтому окончательный результат будетshape(3,3,1)

Мы можем видеть изображение нижеконсолидироватьРассмотрим понятия, упомянутые выше:

例子

1.1.3 Тип данных тензора

TensorFlow внутренне представляет тензоры какбазовый тип данныхn-мерный массив , это верно. В массиве мы всегда должны знать, что представляют собой наши хранимые данные.тип.

  • Мы можем сериализовать произвольные структуры данных какstringи сохранить его вtf.Tensorсередина. пройти черезtf.castможетtf.TensorПриведение от одного типа данных к другому.

Тип данных Tensor следующий:

Tenor的数据类型

2. Специальные тензоры

Специальные тензоры состоят из следующего:

На этот раз давайте поговорим о первых трех (простых для понимания) переменных, константах и ​​заполнителях.

2.1 Константы

Постоянный означает постоянный,После создания он не будет изменен. (Я верю, что вы все еще можете понять)

В TensorFlow способ создания констант очень прост:

a = tf.constant(2)
b = tf.constant(3)

2.2 Переменные

Переменные также легко понять (просто сравните понятия языков программирования с этой аналогией). Вообще говоря, мыПараметры во время тренировкиОбычно хранится в переменных, потому что наши параметры постоянно меняются.

Создайте переменные в TensorFlow с помощьюдваСпособ:


# 1.使用Variable类来创建
# tf.random_normal 方法返回形状为(1,4)的张量。它的4个元素符合均值为100、标准差为0.35的正态分布。
W = tf.Variable(initial_value=tf.random_normal(shape=(1, 4), mean=100, stddev=0.35), name="W")
b = tf.Variable(tf.zeros([4]), name="b")

# 2.使用get_variable的方式来创建
my_int_variable = tf.get_variable("my_int_variable", [1, 2, 3], dtype=tf.int32,
  initializer=tf.zeros_initializer)

Стоит отметить, что:После того, как мы создали переменную, нам нужно инициализировать ее каждый раз, когда мы ее используем!

tf.global_variables_initializer()

2.3 Заполнители

Впервые я столкнулся с концепцией заполнителей в JDBC. из-за SQLПараметры, которые необходимо передать, можно определить, поэтому мы могли бы написать оператор SQL следующим образом:select * from user where id =?

Точно так же заполнители в TensorFlow также являются такой концепцией, которая может потребоватьПодождите, пока среда выполнения определит определенные переменные, поэтому у нас есть заполнители.

Использовать заполнители в TensorFlow также просто:

# 文件名需要等到运行的时候才确定下来
train_filenames = tf.placeholder(tf.string, shape=[None])

#  ..省略一堆细节
# 运行的时候,通过feed_dict将占位符具体的值给确定下来
feed_dict={train_filenames: training_filenames}

Вышеперечисленные вещи прямо доступны в языках программирования,Просто грамматика изменилась.

3. Поток? Знакомство с графами и узлами

Переводим Flow на китайский язык:поток, так и сейчасТензорный поток?

На самом деле в TensorFlowИспользуйте графики для представления вычислительных задач. На самом деле TensorFlow по умолчанию выдаст нам пустуюрисунок, обычно мы называем это "схема потока данных". Граф потока данных состоит из направленных ребер и узлов, и при использовании TensorFlow мы создаем различныеузел, а Тензор будет в этих узлахобращение. Итак, это называется TensorFlow.

Тогда кому-то будет любопытно, какую операцию мы выполняем для создания узла? В TensorFlow типы узлов можно разделить на три типа:

  • Узлы хранения: операции с переменными с отслеживанием состояния, обычно используемые для хранения параметров модели.
  • Вычислительный узел: вычисления без сохранения состояния и операции управления, в основном отвечающие за управление логикой или процессом алгоритма.
  • Узлы данных: операции-заполнители для данных, которые описывают данные, введенные вне графика.

Когда вы видите здесь студентов, вы, возможно, отреагировали: переменные, константы и заполнители, созданные выше, сгенерируют узел в TensorFlow! Для этого типа операции Операция (поведение) обычно описывается какop

Итак, op — это операция, выполняемая в TensorFlow.коллективноВот и все (это может быть операция по созданию переменной, а может быть операция вычисления). Общие операции в TensorFlow следующие:

Tensorflow常见的op

На самом деле, грубо говоря, TensorFlow выдаст нам пустую диаграмму потока данных, и мы перейдем к этой диаграмме потока данных.заполнение(создать узел) для достижения желаемого эффекта.

  • Начните с картинки, все содержимое отредактировано!

数据流图的组成

Давайте взглянем на официальную гифку диаграммы потока данных, чтобы углубить наше впечатление.

  • TensorFlow использует графы потоков данных для представления вычислительных задач.
  • TensorFlow использует тензоры для представления данных, а поток тензоров — в графе потока данных.
  • В TensorFlow «создание узлов, операций» и другие действия вместе называются операциями.

数据流图

4. Что такое сеанс?

Программы TensorFlow обычно организованы какЭтап сборки и этап выполнения, На этапе сборкиЭтапы выполнения описаны в виде диаграммы, На этапе выполненияиспользовать выполнение сеансаВыполните операцию на схеме.

  • Примечание. Поскольку это направленное ребро, поэтомуТекущий узел может выполнять операцию только после завершения состояния вычисления предыдущих узлов в степени..

Проще говоря, когда мы пишем код, мы фактически даем нам TensorFlow.пустая фигураописывается как изображение насжелаемое изображение. Но если мы хотим запустить результат графа, он должен выполняться через сессию.

В качестве небольшого примера:

import tensorflow as tf
# 创建数据流图:y = W * x + b,其中W和b为存储节点,x为数据节点。
x = tf.placeholder(tf.float32)
W = tf.Variable(1.0)
b = tf.Variable(1.0)
y = W * x + b

# =========如果不使用session来运行,那上面的代码只是一张图。我们通过session运行这张图,得到想要的结果
with tf.Session() as sess:
    tf.global_variables_initializer().run() # Operation.run
    fetch = y.eval(feed_dict={x: 3.0})      # Tensor.eval
    print(fetch)   # fetch = 1.0 * 3.0 + 1.0

4.1 Что такое выборка?

Получить можно по адресуsession.runкогдаПередайте несколько операций (тензор),Потомвернуть несколько тензоров(Если передается только один тензор, то возвращается тензор)

4.2tensor.eval() и Operation.run()

Когда некоторые студенты ищут информацию, они обнаруживают, что их могут не вызвать.session.run, ноtensor.eval()和Operation.run(). На самом деле ониПоследний звонок ещеsession.run. разница в томsession.runМожетоднаждыВозвращает несколько тензоров (через Fetch).

最后实际还是掉session.run

Наконец

Однажды я увидел предложение, которое хорошо резюмировало это:

  • Используйте тензор для представления данных.
  • Используйте графики для представления вычислительных задач.
  • Запуск графа в сеансе
  • пройти через变量 (Variable)состояние обслуживания.

TensorFlow — это система программирования, которая использует графы для представления вычислительных задач.Вершины графа называютсяop(аббревиатура от операции).Операция получает ноль или болееTensor, выполняет вычисление, возвращая 0 или болееTensor. Каждый тензор представляет собой типизированный многомерный массив.

В этой статье кратко рассказывается о том, что означает TensorFlow, и некоторых основных понятиях. Но я простов моем пониманииОбсуждаются некоторые общие концепции. В нем по-прежнему много знаний (например, при создании переменных мы обычно указываем, какие параметры...), и это оставлено для изучения на официальном сайте, в блоге и в книгах.

Я верю, что пока вы понимаете эти концепции, вы получите в два раза больше результата с половиной усилий!

Оставайтесь с нами для следующей статьи о TensorFlow~

Использованная литература:

рад вывестигалантерейные товарыОбщедоступный номер технологии Java: Java3y. В паблике более 200 статейоригинальныйТехнические статьи, обширные видеоресурсы, красивые карты мозга — идите сюдаобрати внимание нанемного!

帅的人都关注了

Я думаю, что моя статья хорошо написана, пожалуйста, нажмитеотличный!