Skip to content

Commit 68cfdf6

Browse files
authored
Merge pull request #1809 from qingqing01/trans_op
Fix a bug for TransLayer and add unit testing.
2 parents fb05a73 + 2c2947f commit 68cfdf6

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

paddle/gserver/layers/TransLayer.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,14 @@ void TransLayer::backward(const UpdateCallback& callback) {
5656
return;
5757
}
5858
MatrixPtr preGrad = getInputGrad(0);
59-
outputGrad->transpose(preGrad, false);
59+
if (preGrad) {
60+
MatrixPtr transGrad = Matrix::create(preGrad->getHeight(),
61+
preGrad->getWidth(),
62+
/* trans= */ false,
63+
preGrad->useGpu());
64+
outputGrad->transpose(transGrad, false);
65+
preGrad->add(*transGrad);
66+
}
6067
}
6168

6269
} // namespace paddle

paddle/gserver/tests/test_LayerGrad.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,6 +1689,22 @@ TEST(Layer, smooth_l1) {
16891689
}
16901690
}
16911691

1692+
TEST(Layer, TransLayer) {
1693+
TestConfig config;
1694+
const int height = 128;
1695+
const int width = 1028;
1696+
config.layerConfig.set_type("trans");
1697+
config.layerConfig.set_size(width);
1698+
1699+
config.inputDefs.push_back(
1700+
{INPUT_DATA, "layer_0", /* dim= */ height * width, /* paraSize= */ 0});
1701+
config.layerConfig.add_inputs();
1702+
1703+
for (auto useGpu : {false, true}) {
1704+
testLayerGrad(config, "trans", height, /* trans= */ false, useGpu);
1705+
}
1706+
}
1707+
16921708
int main(int argc, char** argv) {
16931709
testing::InitGoogleTest(&argc, argv);
16941710
initMain(argc, argv);

0 commit comments

Comments
 (0)