Как правильно рисовать блоки остаточной нейронной сети с помощью Graphviz? - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь создать график, показывающий архитектуру Con vNet с остаточными соединениями. Я использую следующее определение графика.

digraph Model {
    node [shape=box];

    input [label="Input"];
    n1 [label="Conv2d(256, BN, ReLU)"];
    n2 [label="Conv2D(256, BN, ReLU)"];
    n3 [label="Conv2D(128, BN, ReLU)"];
    n4 [label="Conv2D(128, BN, ReLU)"];
    n5 [label="GlobalPool2d"];
    n6 [label="Flatten"];
    top [label="Dense(1, Sigmoid)"];

    add1 [label="Add"];
    add2 [label="Add"];

    input -> n1;
    n1 -> n2;
    n1 -> add1;
    n2 -> add1;
    add1 -> n3;

    n3 -> n4;
    n3 -> add2;
    n4 -> add2;
    add2 -> n5;

    n5 -> n6 -> top;
}

Сгенерированный график выглядит так, как показано на следующем рисунке.

enter image description here

Проблема заключается в что остаточные соединения сдвигают слои свертки влево. Интересно, можно ли выровнять прямоугольники по вертикальной оси? Таким образом, все слои находятся на одной вертикальной линии, а остаточные соединения go вокруг. Я пытался сделать некоторые манипуляции с rank и rankdir, но безуспешно.

Не могли бы вы помочь мне с этим? Или, может быть, укажите на соответствующую часть документации, где я могу прочитать, как правильно делать то, что мне нужно?

1 Ответ

1 голос
/ 15 февраля 2020

Атрибут weight сделает то, что вы хотите. Измените две строки на:

   n1 -> add1 [weight=0];
   n3 -> add2 [weight=0];

Вы получите это: enter image description here

...