Ale*_*huk 2 nlp keras tensorflow
出于实验目的,我需要访问编码器的嵌入层。也就是说,假设 Tensorflow 实现,该层定义为 tf.keras.layers.Embedding(...)。
例如,在变压器的编码器部分设置 Embedding() 层的 'embeddings_regularizer=' 参数的方法是什么?
您可以像任何其他模型一样迭代 BERT 模型,如下所示:
for layer in model.layers:
if isinstance(layer ,tf.keras.layers.Embedding):
layer.embeddings_regularizer = argument
Run Code Online (Sandbox Code Playgroud)
isinstance 检查图层的类型,因此您实际上可以在此处放置任何图层类型并更改您需要的内容。
我没有具体检查是否embeddings_regularizer可用,但是如果您想查看该特定层可以使用哪些方法,请运行调试器并dir(layer)在上述函数内调用。
更新的问题
TFBertForSequenceClassification 模型有 3 层:
>>> 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
Run Code Online (Sandbox Code Playgroud)
同样,调用model.layers给出:
[<transformers.models.bert.modeling_tf_bert.TFBertMainLayer at 0x7efda85595d0>,
<tensorflow.python.keras.layers.core.Dropout at 0x7efd6000ae10>,
<tensorflow.python.keras.layers.core.Dense at 0x7efd6000afd0>]
Run Code Online (Sandbox Code Playgroud)
我们可以访问里面的层TFBertMainLayer:
>>> model.layers[0]._layers
[<transformers.models.bert.modeling_tf_bert.TFBertEmbeddings at 0x7efda8080f90>,
<transformers.models.bert.modeling_tf_bert.TFBertEncoder at 0x7efda855ced0>,
<transformers.models.bert.modeling_tf_bert.TFBertPooler at 0x7efda84f0450>,
DictWrapper({'name': 'bert'})]
Run Code Online (Sandbox Code Playgroud)
因此,从上面我们可以通过以下方式访问 TFBertEmbeddings 层:
model.layers[0].embeddings
OR
model.layers[0]._layers[0]
Run Code Online (Sandbox Code Playgroud)
如果您检查文档(搜索“TFBERtEmbeddings”类),您可以看到它继承了一个标准tf.keras.layers.Layer,这意味着您可以访问所有正常的正则化器方法,因此您应该能够调用类似以下内容的方法:
from tensorflow.keras import regularizers
model.layers[0].embeddings.activity_regularizer = regularizers.l2(1e-5)
Run Code Online (Sandbox Code Playgroud)
或者您需要更改的任何参数/正则化器。请参阅此处的正则化器文档。
| 归档时间: |
|
| 查看次数: |
4911 次 |
| 最近记录: |