В Tensorflow, в чем разница между именем, ^ именем и именем: цифры? [Дубликат]

Если вы похожи на меня, когда я впервые начал использовать Java, я хотел использовать оператор «==» для проверки того, были ли два экземпляра String одинаковыми, но к лучшему или худшему это не правильный способ сделать это в Java.

В этом уроке я продемонстрирую несколько разных способов правильно сравнить строки Java, начиная с подхода, который я использую большую часть времени. В конце этого руководства по сопоставлению Java String я также обсужу, почему оператор «==» не работает при сравнении строк Java.

Вариант 1: Сравнение строк Java с методом equals Большая часть (возможно, в 95% случаев). Я сравниваю строки с методом equals класса Java String следующим образом:

if (string1.equals(string2))

Этот метод String равен методу для двух строк Java, и если они содержат точно такую ​​же строку символов, они считаются равными.

Взглянув на быстрый пример сравнения строк с методом equals, если был выполнен следующий тест, две строки не будут считаться равными, поскольку символы не являются точно такими же (случай символов различен):

String string1 = "foo";
String string2 = "FOO";

if (string1.equals(string2))
{
    // this line will not print because the
    // java string equals method returns false:
    System.out.println("The two strings are the same.")
}

Но, когда две строки содержат одну и ту же строку символов, метод equals вернет true, как в этот пример:

String string1 = "foo";
String string2 = "foo";

// test for equality with the java string equals method
if (string1.equals(string2))
{
    // this line WILL print
    System.out.println("The two strings are the same.")
}

Вариант 2: Сравнение строк с методом equalsIgnoreCase

В некоторых строковых сравнительных тестах вы захотите игнорируйте, являются ли строки строчными или строчными. Если вы хотите проверить свои строки на равенство в этом случае нечувствительным образом, используйте метод equalsIgnoreCase класса String, например:

String string1 = "foo";
String string2 = "FOO";

 // java string compare while ignoring case
 if (string1.equalsIgnoreCase(string2))
 {
     // this line WILL print
     System.out.println("Ignoring case, the two strings are the same.")
 }

Вариант 3: сравнение строк Java с методом compareTo

Существует также третий, менее распространенный способ сравнения строк Java, и это с методом сравнения String класса. Если две строки точно совпадают, метод compareTo вернет значение 0 (ноль). Ниже приведен краткий пример того, как выглядит этот метод сравнения строк:

String string1 = "foo bar";
String string2 = "foo bar";

// java string compare example
if (string1.compareTo(string2) == 0)
{
    // this line WILL print
    System.out.println("The two strings are the same.")
}

Пока я пишу об этой концепции равенства в Java, важно отметить, что язык Java включает в себя метод equals в базовый класс Java Object. Всякий раз, когда вы создаете свои собственные объекты, и вы хотите предоставить средства для проверки того, являются ли два экземпляра вашего объекта «равными», вы должны переопределить (и реализовать) этот метод equals в своем классе (точно так же, как язык Java предоставляет это равенство / сравнение в методе String равно).

Вы можете посмотреть на это ==, .equals (), compareTo () и compare ()

24
задан nbro 3 January 2018 в 21:09
поделиться

1 ответ

Ваши наблюдения над наименованием Tensor абсолютно правильны: имя Tensor является конкатенацией

  1. имени выполняемой операции,
  2. двоеточие (:) и
  3. индекс этого тензора на выходах операции, которая его произвела.

Поэтому тензор с именем "foo:2" является выходом op с именем "foo" в позиции 2 (с индексами, начинающимися с нуля).

Именование объектов tf.Variable немного странно. Каждый tf.Variable содержит объект изменчивого тензора , который содержит состояние переменной (и несколько других тензоров). A "Variable" op (который имеет имя "variable_name" в вашем примере) «производит» этот изменяемый тензор каждый раз, когда он запускается как его 0-й выход, поэтому имя изменяемого тензора "variable_name:0".

Поскольку a tf.Variable в основном неотличим от tf.Tensor & mdash; в нем его можно использовать в тех же местах: mdash; мы приняли решение сделать имена переменных похожими на имена тензоров, поэтому свойство Variable.name возвращает имя изменяемый тензор. (Это контрастирует с объектами tf.QueueBase и tf.ReaderBase , которые не используются непосредственно в качестве тензоров (вместо этого вы должны вызывать методы на них для создания ops, которые работают на их состоянии), поэтому они не имеют тензорного имени.)

34
ответ дан nbro 15 August 2018 в 22:02
поделиться
  • 1
    Есть ли простой способ создать имя вывода? Без файла pb и только контрольных точек? – rambossa 19 September 2017 в 17:11
  • 2
    есть ли пример, показывающий правило 3: индекс этого тензора на выходах операции, которая его произвела?. – Alpha 18 July 2018 в 08:16
  • 3
    @Alpha Sure: print(tf.split([0, 1, 2, 3, 4, 5], 5, name="split_op")[3].name), который печатает имя тензора в индексе 3 на выходах "split_op", будет печатать "split_op:3". – mrry 18 July 2018 в 21:49
Другие вопросы по тегам:

Похожие вопросы: