Глава 1 Основные понятия TensorFlow
Учебное пособие по TensorFlow Xiaobai: понимание глубокого обучения
Учебное пособие по TensorFlow Xiaobai: базовое руководство по TensorFlow
Учебное пособие по TensorFlow Xiaobai: базовое руководство по сеансу
Учебное пособие по TensorFlow Xiaobai: Учебное пособие по вычислительным графам
Что такое график
Граф расчета Граф можно просто понять как печатную плату.Мы определяем схему на печатной плате (определение расчета и тензора), а затем включаем питание через вилку (расчет через сеанс), и вся схема запускается работать.
График вычислений по умолчанию автоматически поддерживается в TensorFlow, поэтому любой тензор или операция, которую мы можем определить напрямую, будут преобразованы в узел на графе вычислений.
v1 = tf.constant(value=1,name='v1',shape=(1,2),dtype=tf.float32)
v2 = tf.constant(value=2,name='v2',shape=(1,2),dtype=tf.float32)
add = v1 + v2
with tf.Session() as sess:
# 判断v1所在的graph是否是默认的graph
print(v1.graph is tf.get_default_graph())
print(add)
# 输出 True
# 输出 [[3. 3.]]
мы можем пройтиtf.get_default_graph()чтобы получить вычислительный граф, где находится текущий узел. мы судимv1Сравните график расчета, на котором расположен тензор, с графиком расчета по умолчанию и найдите, чтоv1Значение находится в вычислительном графе по умолчанию, который также проверен: TensorFlow автоматически поддерживает вычислительный граф по умолчанию и добавляет наши узлы в вычислительный граф по умолчанию.
Мы видим, что на графике расчета по умолчанию есть три узла, которыеv1иv1узлов, которые вместе составляютaddузел.
Как создать график
мы можем пройтиtf.Graph()Добавьте график расчета и передайтеas_default()Добавьте переменные и вычисления к текущему графику вычислений и, наконец, передайте сеансgraph=计算图вычислить заданный вычислительный граф.
# 新增计算图
new_graph = tf.Graph()
with new_graph.as_default():
# 在新增的计算图中进行计算
v1 = tf.constant(value=3, name='v1', shape=(1, 2), dtype=tf.float32)
v2 = tf.constant(value=4, name='v2', shape=(1, 2), dtype=tf.float32)
add = v1 + v2
# 通过graph=new_graph指定Session所在的计算图
with tf.Session(graph=new_graph) as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(add))
# 在默认计算图中进行计算
v1 = tf.constant(value=1,name='v1',shape=(1,2),dtype=tf.float32)
v2 = tf.constant(value=2,name='v2',shape=(1,2),dtype=tf.float32)
add = v1 + v2
# 通过graph=tf.get_default_graph()指定Session所在默认的计算图
with tf.Session(graph=tf.get_default_graph()) as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(add))
# 输出:[[7. 7.]]
# 输出:[[3. 3.]]
Мы видим, что в разных графах вычислений тензоры и вычисления между ними изолированы друг от друга. Это как бы две печатные платы, цепи на них изолированы друг от друга.
Организуйте ресурсы через Graph
Мы знаем, что тензоры и вычисления на двух графах изолированы друг от друга, и в каждом графе вычислений у нас будет несколько коллекций для управления ресурсами разных категорий. Ниже приведены некоторые часто используемые коллекции, которыми автоматически управляет TensorFlow.
| название коллекции | Содержание коллекции | сцены, которые будут использоваться |
|---|---|---|
| tf.GraphKeys.VARIABLES | все переменные | Постоянные модели TensorFlow |
| tf.GraphKeys.TRAINABLE_VARIABLES | Обучаемые переменные (обычно относятся к параметрам в нейронных сетях) | Обучение модели, создание контента для визуализации модели |
| tf.GraphKeys.SUMMARIES | тензоры, связанные с генерацией журнала | Вычислительная визуализация TensorFlow |
| tf.GraphKeys.QUEUE_RUNNERS | QueueRunner, который обрабатывает ввод | обработка ввода |
| tf.GraphKeys.MOVING_AVERAGE_VARIABLES | Все переменные, для которых рассчитываются скользящие средние | Вычислить скользящее среднее переменной |
Мы также можем пройтиtf.add_to_collection(key,value)метод добавления нашей пользовательской коллекции черезtf.get_collection(key)Получить ресурс коллекции по соответствующему ключу.
v1 = tf.constant(value=1,name='v1',shape=(1,2),dtype=tf.float32)
v2 = tf.constant(value=2,name='v2',shape=(1,2),dtype=tf.float32)
add = v1 + v2
# 添加自定义的集合
tf.add_to_collection('my_collection',v1)
tf.add_to_collection('my_collection',v2)
with tf.Session(graph=tf.get_default_graph()) as sess:
# 获得对应的集合
print(tf.get_collection('my_collection'))
# 输出:[<tf.Tensor 'v1:0' shape=(1, 2) dtype=float32>, <tf.Tensor 'v2:0' shape=(1, 2) dtype=float32>]
В приведенном выше коде мы настроилиmy_collectionколлекция и будетv1иv2пройти черезadd_to_collectionметод добавляется в соответствующую коллекцию. и черезget_collectionметод для получения соответствующей коллекции.
В будущем процессе разработки мы будем использовать коллекции для управления различными категориями ресурсов, чтобы упростить доступ к ресурсам в нейронной сети.
Обзор
Мы узнали о Graph (вычислительный граф) сегодня. Узлы и вычисления, которые мы определяем, определены на этом вычислительном графе. Когда мы выполняем соответствующее вычисление через сеанс, ресурсы на нашем вычислительном графе начинают работать, и окончательный результат получается из расчет.
Вычислительные графы также предоставляют коллекции, которые облегчают нам получение различных типов ресурсов, которые нам нужны в вычислительном графе.