Comments (3)
ohh... I see, you are trying to replace/extend the default embeddings layer, cool!
I believe, because the l_bert
instance is not part of the graph, actually because, the weights get instantiated here (out of any context/scope):
output = bert_layer.encoders_layer(new_emb)
the prefix/name_scope is missing. As a workaround, you could put the relevant peaces (or everything) in a name_scope like this:
from tensorflow.python.keras import backend as K
# https://github.com/tensorflow/tensorflow/issues/27298
with K.get_graph().as_default(), K.name_scope('bert'):
emb_mask = bert_layer.embeddings_layer(mask_ids) # shape(1, seq_len, emb_size)
output = bert_layer.encoders_layer(new_emb)
as a minimal example:
import os
import bert
from tensorflow import keras
from tensorflow.python.keras import backend as K
model_name = "chinese_L-12_H-768_A-12"
model_dir = bert.fetch_google_bert_model(model_name, ".models")
model_ckpt = os.path.join(model_dir, "bert_model.ckpt")
bert_params = bert.params_from_pretrained_ckpt(model_dir)
# https://github.com/tensorflow/tensorflow/issues/27298
with K.get_graph().as_default(), K.name_scope('bert'):
l_bert = bert.BertModelLayer.from_params(bert_params, name="bert")
inp_ids = keras.layers.Input(shape=(128,), dtype='int32')
new_emb = l_bert.embeddings_layer(inp_ids)
output = l_bert.encoders_layer(new_emb)
output = keras.layers.Dense(3, activation='softmax')(output + new_emb)
model = keras.models.Model(inp_ids, output, name='bert')
bert.load_bert_weights(l_bert, model_ckpt)
model.summary()
as an alternative consider extending BertModelLayer
, and overriding the relevant methods (i.e. call()
,build()
,...).
from bert-for-tf2.
I'm not able to reproduce, can you try posting a minimal but complete executable example, i.e. something like:
import os
import bert
from tensorflow import keras
model_name = "chinese_L-12_H-768_A-12"
model_dir = bert.fetch_google_bert_model(model_name, ".models")
model_ckpt = os.path.join(model_dir, "bert_model.ckpt")
bert_params = bert.params_from_pretrained_ckpt(model_dir)
l_bert = bert.BertModelLayer.from_params(bert_params, name="bert")
# use in Keras Model here, and call model.build()
model = keras.models.Sequential([
keras.layers.InputLayer(input_shape=(128,)),
l_bert,
keras.layers.Lambda(lambda x: x[:, 0, :]),
keras.layers.Dense(2)
])
model.build(input_shape=(None, 128))
bert.load_bert_weights(l_bert, model_ckpt)
model.summary()
from bert-for-tf2.
the prefix/name_scope is missing
Thanks for your reply. And yes, it is because of missing the prefix/name_scope. Your example is feasible. Cool!
from bert-for-tf2.
Related Issues (20)
- Custom tokenizer layer HOT 5
- ResourceExhaustedError: OOM when allocating tensor with shape[501153,768] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc [Op:Mul]
- mixed precision HOT 3
- example (gpu_movie_reviews) has some mistake
- Failed to get weights from pretrained google model HOT 2
- Paddings must be non-negative
- albert classification error(Failed copying input tensor from GPU in order to run Identity: GPU sync failed [Op:Identity])
- ValueError: Found unexpected keys that do not correspond to any Model output
- More comments for the code
- Can't train BERT with loaded weights on QA Task HOT 3
- Setting unexpected parameter 'name' in Params instance 'Params' HOT 2
- how to using this in functional model
- may be there is some problem work with tf hub
- AttributeError: module 'bert' has no attribute 'Layer'
- type error HOT 5
- Activation after bert-layer differs
- Count of weight not found[196]
- OSS License compatibility question
- tensorflow.python.keras.layer.input_spec should be replaced with tensorflow.keras.layers.InputSpec HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bert-for-tf2.