tf.Operation
представляет узел графа и выполняет вычисления на тензорах. tf.constant
возвращает специальный вид tf.Operation
, который принимает 0 тензоров в качестве входных данных и производит 0 тензоров в качестве выходных, поскольку он не выполняет вычислений.
Хотя tf.Variable
фактически является вложенной операцией (или подграфом), состоит из 3 узлов. Дважды щелкните переменную подграфа на тензорной доске, и вы увидите:
Он начинается с константы (например, initial_value
, которая выделена), записывает свое значение в память устройства и читает значение, чтобы накормить его потребителям.
РЕДАКТИРОВАТЬ для вопроса в комментарии:
Насколько я понимаю, когда пользователи вызывают этот метод, скажем, a = tf.constant([1, 2, 3], name='input_a')
, две вещи будут происходить в разных аспектах:
Const
будет добавлен в граф вычислений, как вы можете видеть на 3-м изображении, которое вы предоставили. Его точное значение известно во время построения графа, но (я полагаю) его нельзя вызвать в базовой реализации. Таким образом, тензорная доска говорит, что этот узел не имеет входов и выходов . Возможно, этот узел похож на указатель, указывающий на соответствующую память устройства со своим значением, ожидая, пока другие вызываемые узлы найдут его. Constant Tensor
будет возвращено , и вы можете использовать его позже, используя его обработчик a
, например, c = tf.multiply(a, b, name="mul_c")
как и вы. Таким образом, « return » означает возврат обработчика в Python методом Python, в то время как « выводит » (в графе вычисления тензорного потока) перечисляет всех потребителей вызываемого узла. выход.
Я только что попробовал это:
rm -rf clone?
# clone 1 is the working copy
mkdir clone1
(
cd clone1
git init
echo foo >> file1
git add file1
git commit -m "Initial state"
)
# clone 2 is the staging repo
git clone clone1 clone2
# create patches
(
cd clone1
git tag staging # tag to track what's in staging
echo feature1 >> file1
git add file1
git commit -m "Feature 1"
echo feature2 >> file1
git add file1
git commit -m "Feature 2"
rm *.patch
git format-patch staging
)
# apply patches
(
cd clone2
git am ../clone1/*.patch
# Cygwin/msysgit line ending weirdness when patching. Aborting and
# reapplying clears it up.
git am --abort
git am ../clone1/*.patch
git log
git status
)
Имеет незначительную проблему с нечетким применением патчей без двойного выполнения am, но я получаю чистый рабочий каталог в клоне 2 с нужным содержимым из файла1. Так что, похоже, в вашем рабочем процессе нет ничего плохого.
Git apply будет только обновлять рабочее дерево, а не выполнять фиксацию.
Тем не менее, я не буду использовать репозиторий git для поэтапного размещения. Мой рабочий процесс, вероятно, сделал бы ветку релиза / ветку репозитория разработки (или нет) и просто развернул бы полные чистые копии этого.
Для инкрементных обновлений промежуточной среды просто используйте git tag staging
в ветке релиза, «git diff staging..HEAD> update.patch» для отправки по электронной почте и стандартный unix «patch -p1 «применить это должно работать.
Did you try a
git am -3
? From the git-am doc,
-3
--3way
When the patch does not apply cleanly, fall back on 3-way merge
Note: From Git Google Summer of Code 2009, there is a project to "Teach git-apply the 3-way merge fallback git-am knows":
When
git-apply
patches file(s) the files may not patch cleanly. In such a casegit-apply
currently rejects the patch.
Если он вызывается изgit-am
, то выполняется трехстороннее слияние:
- извлекают данные «index ...» из патча и
- создают временное дерево,
- применяя к этому патч, затем
- сливаем временное дерево с текущей веткой.
По разным причинам было бы неплохо сделать весь танец временного дерева непосредственно внутри git-apply, так как это может быть полезно, скажем, Команда git-sequence «apply», ускоряет обработку git-am, меньше разветвляется и т. д.