Я пытался увидеть результаты каждого из слоев на Keras, но я не смог найти правильный код, поэтому я создал простой код, в котором я застрял.
Вопрос: Как я могу получить выходные данные каждого слоя, где есть слой RNN во всех слоях?
Вы можете увидеть, как я пытался увидеть в следующем коде.
Вот тестовый код, который работает (1):
seq_length = 3
latent_dim = 2
inputs = Input(shape=(seq_length, latent_dim))
outputs = Dense(5)(inputs)
outputs = Flatten()(outputs)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='rmsprop', loss='mse')
print(model.summary())
Чтобы увидеть выходные данные каждого слоя (2):
layer_outputs = list()
for idx, l in enumerate(model.layers):
if idx == 0:
continue
layer_outputs.append(l.output)
get_3rd_layer_output = K.function([model.layers[0].input],
layer_outputs)
layer_output = get_3rd_layer_output([enc_input])
print('')
for l_output in layer_output:
print(l_output[0][0])
print('')
тогда вывод будет что-то вроде
[4.172303 -2.248884 1.397713 3.2669916 2.5788064]
4,172303
Однако, если я попытаюсь проверить ту же логику, что и (2), с кодом ниже, который использует RNN:
seq_length = 3
latent_dim = 2
inputs = Input(shape=(seq_length, latent_dim))
outputs, last_output = GRU(latent_dim, return_state=True, return_sequences=True)(inputs)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='rmsprop', loss='mse')
print(model.summary())
и проверить с помощью (2), он будет излучать следующим образом:
----------------------------------------------- ---------------------------- TypeError Traceback (самый последний вызов
последний) в
5 layer_outputs.append (l.output)
6 get_3rd_layer_output = K.function ([model.layers [0] .input],
----> 7 layer_outputs)
8 layer_output = get_3rd_layer_output ([enc_input])
9 отпечатков ('')
d: \ igs_projects \ nlp_nlu \ venv \ Lib \ сайт-пакеты \ keras \ бэкенд \ tensorflow_backend.py
в функции (входы, выходы, обновления, ** kwargs) 2742
msg = 'Неверный аргумент "% s" передан в K.function с TensorFlow
backend 'ключ% 2743 поднять ValueError (msg)
-> 2744 функция возврата (входы, выходы, обновления = обновления, ** kwargs) 2745 2746
d: \ igs_projects \ nlp_nlu \ venv \ Lib \ сайт-пакеты \ keras \ бэкенд \ tensorflow_backend.py
в init (self, входы, выходы, обновления, имя, ** session_kwargs)
2544 self.inputs = список (входы) 2545 self.outputs =
лист (выходы)
-> 2546 с tf.control_dependencies (self.outputs): 2547 updates_ops = [] 2548 для обновления в обновлениях:
d: \ igs_projects \ nlp_nlu \ venv \ Lib \ сайт-пакеты \ tensorflow \ питон \ Framework \ ops.py
в control_dependencies (control_inputs) 5002 возврат
_NullContextmanager () 5003 еще:
-> 5004 return get_default_graph (). Control_dependencies (control_inputs) 5005
5006
d: \ igs_projects \ nlp_nlu \ venv \ Lib \ сайт-пакеты \ tensorflow \ питон \ Framework \ ops.py
в control_dependencies (self, control_inputs) 4541, если
isinstance (c, IndexedSlices): 4542 c = c.op
-> 4543 c = self.as_graph_element (c) 4544, если isinstance (c, Тензор): 4545 c = c.op
d: \ igs_projects \ nlp_nlu \ venv \ Lib \ сайт-пакеты \ tensorflow \ питон \ Framework \ ops.py
в as_graph_element (self, obj, allow_tensor, allow_operation) 3488
3489 с self._lock:
-> 3490 возвращает self._as_graph_element_locked (объект, allow_tensor, allow_operation) 3491 3492 def _as_graph_element_locked (self,
obj, allow_tensor, allow_operation):
d: \ igs_projects \ nlp_nlu \ venv \ Lib \ сайт-пакеты \ tensorflow \ питон \ Framework \ ops.py
в _as_graph_element_locked (self, obj, allow_tensor, allow_operation)
3577 # Мы сдаемся! 3578 поднять TypeError ("Не могу
преобразовать% s в% s. "% (type (obj). name ,
-> 3579 types_str)) 3580 3581 def get_operations (self):
TypeError: Невозможно преобразовать список в Тензор или Операцию.