TFBertForSequenceClassification Keras model.layers информация детали пусты? Как проверить модель? - PullRequest
0 голосов
/ 27 марта 2020

Я использую tensorflow 2.1.0 и transformers 2.5.1 на MacOS с python 3.7. Я строю модель Keras, используя TFBertForSequenceClassification:

model = TFBertForSequenceClassification.from_pretrained('bert-base-cased',
                                                        num_labels=number_label)
model.compile(optimizer=optimizer,
                  loss=loss, 
                  metrics=[metric])

, и я могу исследовать структуру:

model.summary()

, и мы можем увидеть следующее

Model: "tf_bert_for_sequence_classification"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
bert (TFBertMainLayer)       multiple                  108310272 
_________________________________________________________________
dropout_37 (Dropout)         multiple                  0         
_________________________________________________________________
classifier (Dense)           multiple                  1538      
=================================================================
Total params: 108,311,810
Trainable params: 108,311,810
Non-trainable params: 0

Как мы видим сверху, мы видим только 3 основных слоя, и у нас нет доступа к более подробной информации.

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

model.inputs

{'attention_mask': <tf.Tensor 'attention_mask:0' shape=(None, 128) dtype=int32>,
 'input_ids': <tf.Tensor 'input_ids:0' shape=(None, 128) dtype=int32>,
 'token_type_ids': <tf.Tensor 'token_type_ids:0' shape=(None, 128) dtype=int32>}

model.outputs

[<tf.Tensor 'tf_bert_for_sequence_classification/Identity:0' shape=(None, 2) dtype=float32>]

Это хорошее начало, и теперь я хотел бы изучить слои keras:

model.layers

[<transformers.modeling_tf_bert.TFBertMainLayer at 0x1a415fd7d0>,
 <tensorflow.python.keras.layers.core.Dropout at 0x1a445c3550>,
 <tensorflow.python.keras.layers.core.Dense at 0x1a445c3890>]

, но теперь, если я попытаюсь получить больше информации, это всегда пусто:

for layer in model.layers:
    print(layer.name, layer._inbound_nodes, layer._outbound_nodes)

bert [] []
dropout_37 [] []
classifier [] []

Я пробовал другой метод, например inbound_nodes, но он всегда пуст!

Есть ли способ, чтобы иметь возможность проверить в более детали слой какой-то сложной модели, как BERT? По какой причине мы получили пустую информацию?

Я также пытался:

 tf.keras.utils.plot_model(model,
                          'model.png',
                          show_shapes=True)

, но я получаю не очень полезную информацию:

enter image description here

То же самое с использованием TensorBoard, который дает мне один график и много отключенных элементов enter image description here

Да, как вариант, я хорошо смотрю код напрямую: код но я думал, что можно программно проверить структуру такой сложной модели.

...