Skip to content

Commit

Permalink
add wrapper for out_prod_layer (#83)
Browse files Browse the repository at this point in the history
  • Loading branch information
Haonan authored and emailweixu committed Sep 16, 2016
1 parent df28da7 commit a9d327b
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
36 changes: 35 additions & 1 deletion python/paddle/trainer_config_helpers/layers.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
'cross_entropy_with_selfnorm', 'cross_entropy',
'multi_binary_label_cross_entropy',
'rank_cost', 'lambda_cost', 'huber_cost',
'block_expand_layer',
'block_expand_layer', 'out_prod_layer',
]


Expand Down Expand Up @@ -93,6 +93,7 @@ class LayerType(object):
POWER_LAYER = 'power'
SCALING_LAYER = 'scaling'
TRANS_LAYER = 'trans'
OUT_PROD_LAYER = 'out_prod'

MEMORY = 'memory'
MAXID_LAYER = 'maxid'
Expand Down Expand Up @@ -2345,6 +2346,39 @@ def maxid_layer(input, name=None, layer_attr=None):
layer_type=LayerType.MAXID_LAYER,
parents=[input])

@wrap_name_default()
def out_prod_layer(input1, input2, name=None, layer_attr=None):
"""
A layer for computing the outer product of two vectors
The result is a matrix of size(input1) x size(input2)
The example usage is:
.. code-block:: python
out_prod = out_prod_layer(input1=vec1, input2=vec2)
:param name: Layer name.
:type name: basestring
:param input1: The first input layer name.
:type input: LayerOutput
:param input2: The second input layer name.
:type input2: LayerOutput
:param layer_attr: extra layer attributes.
:type layer_attr: ExtraLayerAttribute.
:return: LayerOutput object.
:rtype: LayerOutput
"""

assert isinstance(input1, LayerOutput)
assert isinstance(input2, LayerOutput)
Layer(name=name,
type="out_prod",
inputs=[input1.name, input2.name],
**ExtraLayerAttribute.to_kwargs(layer_attr))
return LayerOutput(name=name,
layer_type=LayerType.OUT_PROD_LAYER,
parents=[input1,input2])

@wrap_name_default()
def eos_layer(input, eos_id, name=None, layer_attr=None):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
x = data_layer(name="input1", size=3)
y = data_layer(name="input2", size=5)

z = out_prod_layer(input1=x, input2=y)

x1 = fc_layer(input=x, size=5)
y1 = fc_layer(input=y, size=5)
y2 = fc_layer(input=y, size=15)
Expand All @@ -28,7 +30,7 @@

linear_comb = linear_comb_layer(weights=x1, vectors=y2, size=3)

out = fc_layer(input=[cos1, cos3, linear_comb],
out = fc_layer(input=[cos1, cos3, linear_comb, z],
size=num_classes,
act=SoftmaxActivation())

Expand Down

0 comments on commit a9d327b

Please sign in to comment.