Глава 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 (вычислительный граф) сегодня. Узлы и вычисления, которые мы определяем, определены на этом вычислительном графе. Когда мы выполняем соответствующее вычисление через сеанс, ресурсы на нашем вычислительном графе начинают работать, и окончательный результат получается из расчет.
Вычислительные графы также предоставляют коллекции, которые облегчают нам получение различных типов ресурсов, которые нам нужны в вычислительном графе.