|
|
|
@ -168,13 +168,17 @@ void SequenceConcatLayer::backward(const UpdateCallback& callback) {
|
|
|
|
|
size_t rightNumIns = 0;
|
|
|
|
|
for (size_t seqId = 0; seqId < numSequences1; ++seqId) {
|
|
|
|
|
leftNumIns = starts1[seqId + 1] - starts1[seqId];
|
|
|
|
|
inputGrad1->subMatrix(starts1[seqId], leftNumIns)
|
|
|
|
|
->add(*(outputGrad->subMatrix(offset, leftNumIns)));
|
|
|
|
|
if (inputGrad1) {
|
|
|
|
|
inputGrad1->subMatrix(starts1[seqId], leftNumIns)
|
|
|
|
|
->add(*(outputGrad->subMatrix(offset, leftNumIns)));
|
|
|
|
|
}
|
|
|
|
|
offset += leftNumIns;
|
|
|
|
|
|
|
|
|
|
rightNumIns = starts2[seqId + 1] - starts2[seqId];
|
|
|
|
|
inputGrad2->subMatrix(starts2[seqId], rightNumIns)
|
|
|
|
|
->add(*(outputGrad->subMatrix(offset, rightNumIns)));
|
|
|
|
|
if (inputGrad2) {
|
|
|
|
|
inputGrad2->subMatrix(starts2[seqId], rightNumIns)
|
|
|
|
|
->add(*(outputGrad->subMatrix(offset, rightNumIns)));
|
|
|
|
|
}
|
|
|
|
|
offset += rightNumIns;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|