Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ModelZoo
ResNet50_tensorflow
Commits
52e4ded8
Commit
52e4ded8
authored
May 09, 2020
by
A. Unique TensorFlower
Browse files
Internal change
PiperOrigin-RevId: 310762203
parent
5e641c43
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
15 additions
and
4 deletions
+15
-4
official/nlp/transformer/attention_layer.py
official/nlp/transformer/attention_layer.py
+15
-4
No files found.
official/nlp/transformer/attention_layer.py
View file @
52e4ded8
...
...
@@ -18,6 +18,8 @@ from __future__ import absolute_import
from
__future__
import
division
from
__future__
import
print_function
import
math
import
tensorflow
as
tf
from
official.nlp.modeling
import
layers
...
...
@@ -47,25 +49,34 @@ class Attention(tf.keras.layers.Layer):
"""Builds the layer."""
# Layers for linearly projecting the queries, keys, and values.
size_per_head
=
self
.
hidden_size
//
self
.
num_heads
def
_glorot_initializer
(
fan_in
,
fan_out
):
limit
=
math
.
sqrt
(
6.0
/
(
fan_in
+
fan_out
))
return
tf
.
keras
.
initializers
.
RandomUniform
(
minval
=-
limit
,
maxval
=
limit
)
attention_initializer
=
_glorot_initializer
(
input_shape
[
-
1
],
self
.
hidden_size
)
self
.
query_dense_layer
=
layers
.
DenseEinsum
(
output_shape
=
(
self
.
num_heads
,
size_per_head
),
kernel_initializer
=
"glorot_uniform"
,
kernel_initializer
=
attention_initializer
,
use_bias
=
False
,
name
=
"query"
)
self
.
key_dense_layer
=
layers
.
DenseEinsum
(
output_shape
=
(
self
.
num_heads
,
size_per_head
),
kernel_initializer
=
"glorot_uniform"
,
kernel_initializer
=
attention_initializer
,
use_bias
=
False
,
name
=
"key"
)
self
.
value_dense_layer
=
layers
.
DenseEinsum
(
output_shape
=
(
self
.
num_heads
,
size_per_head
),
kernel_initializer
=
"glorot_uniform"
,
kernel_initializer
=
attention_initializer
,
use_bias
=
False
,
name
=
"value"
)
output_initializer
=
_glorot_initializer
(
self
.
hidden_size
,
self
.
hidden_size
)
self
.
output_dense_layer
=
layers
.
DenseEinsum
(
output_shape
=
self
.
hidden_size
,
num_summed_dimensions
=
2
,
kernel_initializer
=
"gloro
t_
u
ni
form"
,
kernel_initializer
=
outpu
t_
i
ni
tializer
,
use_bias
=
False
,
name
=
"output_transform"
)
super
(
Attention
,
self
).
build
(
input_shape
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment