@@ -1263,150 +1263,6 @@ TEST(Matrix, MaxOutFwdBwd) {
12631263 }
12641264}
12651265
1266- void testCrossMapNormalFwd (
1267- int numSamples, int channels, int imgSizeH, int imgSizeW, int sizeX) {
1268- float scale = 1.5 ;
1269- float pow = 0.5 ;
1270- int width = imgSizeH * imgSizeW * channels;
1271- CpuMatrix inputs (numSamples, width);
1272- CpuMatrix denoms (numSamples, width);
1273- CpuMatrix outputs (numSamples, width);
1274- GpuMatrix inputsGpu (numSamples, width);
1275- GpuMatrix denomsGpu (numSamples, width);
1276- GpuMatrix outputsGpu (numSamples, width);
1277-
1278- inputs.randomizeUniform ();
1279- outputs.randomizeUniform ();
1280- inputsGpu.copyFrom (inputs);
1281- outputsGpu.copyFrom (outputs);
1282-
1283- FunctionBase* cpu =
1284- FunctionBase::funcRegistrar_.createByType (FUNC_NAME (CrossMapNormal, CPU));
1285- FunctionBase* gpu =
1286- FunctionBase::funcRegistrar_.createByType (FUNC_NAME (CrossMapNormal, GPU));
1287- cpu->init (FuncConfig ()
1288- .set (" size" , (size_t )sizeX)
1289- .set (" scale" , scale)
1290- .set (" pow" , pow));
1291- gpu->init (FuncConfig ()
1292- .set (" size" , (size_t )sizeX)
1293- .set (" scale" , scale)
1294- .set (" pow" , pow));
1295-
1296- Dims dims{
1297- (size_t )numSamples, (size_t )channels, (size_t )imgSizeH, (size_t )imgSizeW};
1298- cpu->calc ({Tensor (inputs.getData (), dims)},
1299- {Tensor (outputs.getData (), dims), Tensor (denoms.getData (), dims)},
1300- {});
1301-
1302- gpu->calc (
1303- {Tensor (inputsGpu.getData (), dims)},
1304- {Tensor (outputsGpu.getData (), dims), Tensor (denomsGpu.getData (), dims)},
1305- {});
1306-
1307- TensorCheckErr (outputs, outputsGpu);
1308- TensorCheckErr (denoms, denomsGpu);
1309- }
1310-
1311- TEST (Matrix, crossMapNormalFwd) {
1312- for (auto numSamples : {5 , 32 }) {
1313- for (auto channels : {1 , 5 , 32 }) {
1314- for (auto imgSizeH : {5 , 33 , 100 }) {
1315- for (auto imgSizeW : {5 , 32 , 96 }) {
1316- for (auto sizeX : {1 , 2 , 3 , 5 , 7 }) {
1317- VLOG (3 ) << " numSamples=" << numSamples << " channels=" << channels
1318- << " imgSizeH=" << imgSizeH << " imgSizeW=" << imgSizeW
1319- << " sizeX=" << sizeX;
1320- testCrossMapNormalFwd (
1321- numSamples, channels, imgSizeH, imgSizeW, sizeX);
1322- }
1323- }
1324- }
1325- }
1326- }
1327- }
1328-
1329- void testCrossMapNormalBwd (
1330- int numSamples, int channels, int imgSizeH, int imgSizeW, int sizeX) {
1331- float scale = 1.5 ;
1332- float pow = 0.5 ;
1333- size_t width = imgSizeH * imgSizeW * channels;
1334-
1335- CpuMatrix inputsGrad (numSamples, width);
1336- CpuMatrix inputsValue (numSamples, width);
1337- CpuMatrix outputsGrad (numSamples, width);
1338- CpuMatrix outputsValue (numSamples, width);
1339- CpuMatrix denoms (numSamples, width);
1340-
1341- outputsGrad.randomizeUniform ();
1342- denoms.randomizeUniform ();
1343- inputsValue.randomizeUniform ();
1344- outputsValue.randomizeUniform ();
1345- inputsGrad.randomizeUniform ();
1346- denoms.add (0.01 );
1347-
1348- GpuMatrix inputsGradGpu (numSamples, width);
1349- GpuMatrix inputsValueGpu (numSamples, width);
1350- GpuMatrix outputsGradGpu (numSamples, width);
1351- GpuMatrix outputsValueGpu (numSamples, width);
1352- GpuMatrix denomsGpu (numSamples, width);
1353-
1354- outputsGradGpu.copyFrom (outputsGrad);
1355- denomsGpu.copyFrom (denoms);
1356- inputsValueGpu.copyFrom (inputsValue);
1357- outputsValueGpu.copyFrom (outputsValue);
1358- inputsGradGpu.copyFrom (inputsGrad);
1359-
1360- FunctionBase* cpu = FunctionBase::funcRegistrar_.createByType (
1361- FUNC_NAME (CrossMapNormalGrad, CPU));
1362- FunctionBase* gpu = FunctionBase::funcRegistrar_.createByType (
1363- FUNC_NAME (CrossMapNormalGrad, GPU));
1364- cpu->init (FuncConfig ()
1365- .set (" size" , (size_t )sizeX)
1366- .set (" scale" , scale)
1367- .set (" pow" , pow));
1368- gpu->init (FuncConfig ()
1369- .set (" size" , (size_t )sizeX)
1370- .set (" scale" , scale)
1371- .set (" pow" , pow));
1372-
1373- Dims dims{
1374- (size_t )numSamples, (size_t )channels, (size_t )imgSizeH, (size_t )imgSizeW};
1375- cpu->calc ({Tensor (inputsValue.getData (), dims),
1376- Tensor (outputsValue.getData (), dims),
1377- Tensor (outputsGrad.getData (), dims),
1378- Tensor (denoms.getData (), dims)},
1379- {Tensor (inputsGrad.getData (), dims)},
1380- {});
1381-
1382- gpu->calc ({Tensor (inputsValueGpu.getData (), dims),
1383- Tensor (outputsValueGpu.getData (), dims),
1384- Tensor (outputsGradGpu.getData (), dims),
1385- Tensor (denomsGpu.getData (), dims)},
1386- {Tensor (inputsGradGpu.getData (), dims)},
1387- {});
1388-
1389- TensorCheckErr (inputsGrad, inputsGradGpu);
1390- }
1391-
1392- TEST (Matrix, crossMapNormalBwd) {
1393- for (auto numSamples : {5 , 32 }) {
1394- for (auto channels : {1 , 5 , 32 }) {
1395- for (auto imgSizeH : {5 , 33 , 100 }) {
1396- for (auto imgSizeW : {5 , 32 , 96 }) {
1397- for (auto sizeX : {1 , 2 , 3 , 5 , 7 }) {
1398- VLOG (3 ) << " numSamples=" << numSamples << " channels=" << channels
1399- << " imgSizeH=" << imgSizeH << " imgSizeW=" << imgSizeW
1400- << " sizeX=" << sizeX;
1401- testCrossMapNormalBwd (
1402- numSamples, channels, imgSizeH, imgSizeW, sizeX);
1403- }
1404- }
1405- }
1406- }
1407- }
1408- }
1409-
14101266int main (int argc, char ** argv) {
14111267 testing::InitGoogleTest (&argc, argv);
14121268 initMain (argc, argv);
0 commit comments