Keras Tensor получить имя - PullRequest
       2

Keras Tensor получить имя

3 голосов
/ 28 марта 2019

У меня есть список тензоров кератов, и для каждого я даю имя с параметром name.
Например, я хочу назвать BatchNormalization layer как "a":

layer = BatchNormalization(axis=3, name="a")(input)

Но когда я пытаюсь получить имя, которое я дал уровню, это выглядит так:

print(layer.name)
>>> a_2/cond/Merge:0

Как я могу получить точное имя, которое я дал моему layer объекту ("a" для этого примера)?

Ответы [ 3 ]

3 голосов
/ 28 марта 2019

Давайте разделим эту строку на две строки:

layer = BatchNormalization(axis=3, name="a")
node = layer(input)

Теперь, если вы попытались вывести

layer.name 

это будет "а".

То, что вы пытались сделать, - это вывести имя выходного тензора этого слоя пакетной формы, который по сути является тензором тензорного потока, который получается в результате этой операции слияния.

Таким образом, чтобы сделать это, вы должны сделать это для слоя, как показано выше, или выполнить некоторую обработку имени операции, так как оно всегда будет содержать имя слоя.

1 голос
/ 28 марта 2019

Я знаю, что на вопрос дан ответ, но обновление вопроса стерло проблему, на которую указывал автор, поэтому я все равно напишу свой ответ для людей, которые придут дальше.

Как и OP, я создаю слой (который будет плотным):

>>> l = Dense(20,activation='softmax',name='a')
>>> l.name
a

если я запускаю этот код в той же консоли, я получаю те же результаты. Однако , когда я запускаю код вопроса:

>>> l = Dense(20,activation='softmax',name='a')(inputs)
>>> l.name
a/Softmax:0

и когда я запускаю код:

>>> l = Dense(20,activation='softmax',name='a')(inputs)
>>> l.name
a_1/Softmax:0

и если я немного изменим:

>>> l = Dense(20,activation='softmax',name='a')(l)
>>> l.name
a_2/Softmax:0

SO Будьте осторожны при создании слоев: вы создаете независимый слой или тензор, полученный в результате исчисления (как указано в принятом ответе)

Вы можете получить имя простым разделением Но только при первом запуске сети. В случае повторного запуска (новый экземпляр) имена изменятся!

0 голосов
/ 28 марта 2019

Вы можете сделать

[layer.name for layer in model.layers]

Это выведет список всех имен слоев.Или это может быть получено из модели.

model.get_layer('a').name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...