Skip to content

Commit 28c5010

Browse files
authored
Merge pull request #976 from pengli09/add_label_seq_pos_to_inputdef
Support user specified label input in tests
2 parents adc5839 + d09564b commit 28c5010

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

paddle/gserver/tests/LayerGradUtil.cpp

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,13 +303,31 @@ void initDataLayer(TestConfig testConf,
303303
ICpuGpuVectorPtr sequenceStartPositions;
304304
ICpuGpuVectorPtr subSequenceStartPositions;
305305
IVectorPtr cpuSequenceDims;
306-
for (size_t i = 0; i < testConf.inputDefs.size(); i++) {
306+
for (size_t i = 0; i < testConf.inputDefs.size(); ++i) {
307+
if (testConf.inputDefs[i].inputType != INPUT_SEQUENCE_LABEL) continue;
308+
309+
const std::vector<int>& labelSeqStartPositions =
310+
testConf.inputDefs[i].labelSeqStartPositions;
311+
if (labelSeqStartPositions.size() != 0) {
312+
CHECK(!sequenceStartPositions);
313+
CHECK_GE(labelSeqStartPositions.size(), 2);
314+
315+
sequenceStartPositions =
316+
ICpuGpuVector::create(labelSeqStartPositions.size(), useGpu);
317+
sequenceStartPositions->copyFrom(
318+
labelSeqStartPositions.data(), labelSeqStartPositions.size(), useGpu);
319+
}
320+
}
321+
322+
for (size_t i = 0; i < testConf.inputDefs.size(); ++i) {
307323
LayerConfig config;
308324
config.set_name(testConf.inputDefs[i].name);
309325
config.set_type("data");
310326
config.set_size(testConf.inputDefs[i].dim);
311327
LayerPtr layer = LayerPtr(new DataLayer(config));
312-
size_t numSequence = batchSize / 10 + 1;
328+
size_t numSequence = sequenceStartPositions
329+
? sequenceStartPositions->getSize() - 1
330+
: batchSize / 10 + 1;
313331

314332
Argument data;
315333
auto fillData = [&](bool trans, int height, int width) {
@@ -336,9 +354,17 @@ void initDataLayer(TestConfig testConf,
336354
break;
337355
case INPUT_LABEL:
338356
case INPUT_SEQUENCE_LABEL:
339-
data.ids = VectorT<int>::create(batchSize, useGpu);
340-
// now rand number can be 0 to inputDefs[i].dim
341-
data.ids->rand(testConf.inputDefs[i].dim);
357+
if (testConf.inputDefs[i].labelInitValue.size() != 0) {
358+
const std::vector<int>& labelInitValue =
359+
testConf.inputDefs[i].labelInitValue;
360+
CHECK_EQ(labelInitValue.size(), batchSize);
361+
data.ids = VectorT<int>::create(batchSize, useGpu);
362+
data.ids->copyFrom(labelInitValue.data(), batchSize);
363+
} else {
364+
data.ids = VectorT<int>::create(batchSize, useGpu);
365+
// now rand number can be 0 to inputDefs[i].dim
366+
data.ids->rand(testConf.inputDefs[i].dim);
367+
}
342368
break;
343369
case INPUT_SPARSE_NON_VALUE_DATA:
344370
data.value = makeRandomSparseMatrix(

paddle/gserver/tests/LayerGradUtil.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ struct InputDef {
6464
size_t paraSize;
6565
ParaSparse sparse;
6666
bool isStatic;
67+
std::vector<int> labelInitValue;
68+
std::vector<int> labelSeqStartPositions;
69+
6770
InputDef(InputType type, string nameIn, size_t dimIn, size_t sizeIn) {
6871
inputType = type;
6972
name = nameIn;
@@ -72,6 +75,23 @@ struct InputDef {
7275
sparse = {""};
7376
isStatic = false;
7477
}
78+
79+
InputDef(InputType type,
80+
string nameIn,
81+
size_t dimIn,
82+
size_t sizeIn,
83+
const std::vector<int>& labelInitValue,
84+
const std::vector<int>& labelSeqStartPositions)
85+
: labelInitValue(labelInitValue),
86+
labelSeqStartPositions(labelSeqStartPositions) {
87+
inputType = type;
88+
name = nameIn;
89+
dim = dimIn;
90+
paraSize = sizeIn;
91+
sparse = {""};
92+
isStatic = false;
93+
}
94+
7595
InputDef(InputType type,
7696
string nameIn,
7797
size_t dimIn,

0 commit comments

Comments
 (0)