Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
monticore
EmbeddedMontiArc
generators
CNNArch2Caffe2
Commits
477fea7c
Commit
477fea7c
authored
Aug 22, 2018
by
Carlos Alfredo Yeverino Rodriguez
Browse files
Add new tests (adapted from CNNTrainLang) for generation of CNNTrainer.
Fix for missing quotes in eval_metric value.
parent
da2dd576
Pipeline
#69756
failed with stages
Changes
10
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/main/resources/templates/caffe2/CNNTrainer.ftl
View file @
477fea7c
...
...
@@ -29,7 +29,7 @@ if __name__ == "__main__":
normalize = $
{
config
.normalize
?
string
(
"True"
,
"False"
)}
,
</#
if
>
<#
if
(config.evalMetric)??>
eval_metric = $
{
config
.evalMetric
}
,
eval_metric =
'
$
{
config
.evalMetric
}
'
,
</#
if
>
<#
if
(config.configuration.optimizer)??>
optimizer = '$
{
config
.optimizerName
}
',
...
...
src/test/java/de/monticore/lang/monticar/cnnarch/caffe2generator/GenerationTest.java
View file @
477fea7c
...
...
@@ -156,4 +156,107 @@ public class GenerationTest extends AbstractSymtabTest{
Arrays
.
asList
(
"CNNTrainer_main.py"
));
}
@Test
public
void
testFullCfgGeneration
()
throws
IOException
,
TemplateException
{
Log
.
getFindings
().
clear
();
List
<
ConfigurationSymbol
>
configurations
=
new
ArrayList
<>();
List
<
String
>
instanceName
=
Arrays
.
asList
(
"main_net1"
,
"main_net2"
);
final
ModelPath
mp
=
new
ModelPath
(
Paths
.
get
(
"src/test/resources/valid_tests"
));
GlobalScope
scope
=
new
GlobalScope
(
mp
,
new
CNNTrainLanguage
());
CNNTrainCompilationUnitSymbol
compilationUnit
=
scope
.<
CNNTrainCompilationUnitSymbol
>
resolve
(
"FullConfig"
,
CNNTrainCompilationUnitSymbol
.
KIND
).
get
();
CNNTrainCocos
.
checkAll
(
compilationUnit
);
configurations
.
add
(
compilationUnit
.
getConfiguration
());
compilationUnit
=
scope
.<
CNNTrainCompilationUnitSymbol
>
resolve
(
"FullConfig2"
,
CNNTrainCompilationUnitSymbol
.
KIND
).
get
();
CNNTrainCocos
.
checkAll
(
compilationUnit
);
configurations
.
add
(
compilationUnit
.
getConfiguration
());
CNNArch2Caffe2
generator
=
new
CNNArch2Caffe2
();
Map
<
String
,
String
>
trainerMap
=
generator
.
generateTrainer
(
configurations
,
instanceName
,
"mainFull"
);
for
(
String
fileName
:
trainerMap
.
keySet
()){
FileWriter
writer
=
new
FileWriter
(
generator
.
getGenerationTargetPath
()
+
fileName
);
writer
.
write
(
trainerMap
.
get
(
fileName
));
writer
.
close
();
}
assertTrue
(
Log
.
getFindings
().
isEmpty
());
checkFilesAreEqual
(
Paths
.
get
(
"./target/generated-sources-cnnarch"
),
Paths
.
get
(
"./src/test/resources/target_code"
),
Arrays
.
asList
(
"CNNTrainer_mainFull.py"
));
}
@Test
public
void
testSimpleCfgGeneration
()
throws
IOException
,
TemplateException
{
Log
.
getFindings
().
clear
();
List
<
ConfigurationSymbol
>
configurations
=
new
ArrayList
<>();
List
<
String
>
instanceName
=
Arrays
.
asList
(
"main_net1"
,
"main_net2"
);
final
ModelPath
mp
=
new
ModelPath
(
Paths
.
get
(
"src/test/resources/valid_tests"
));
GlobalScope
scope
=
new
GlobalScope
(
mp
,
new
CNNTrainLanguage
());
CNNTrainCompilationUnitSymbol
compilationUnit
=
scope
.<
CNNTrainCompilationUnitSymbol
>
resolve
(
"SimpleConfig1"
,
CNNTrainCompilationUnitSymbol
.
KIND
).
get
();
CNNTrainCocos
.
checkAll
(
compilationUnit
);
configurations
.
add
(
compilationUnit
.
getConfiguration
());
compilationUnit
=
scope
.<
CNNTrainCompilationUnitSymbol
>
resolve
(
"SimpleConfig2"
,
CNNTrainCompilationUnitSymbol
.
KIND
).
get
();
CNNTrainCocos
.
checkAll
(
compilationUnit
);
configurations
.
add
(
compilationUnit
.
getConfiguration
());
CNNArch2Caffe2
generator
=
new
CNNArch2Caffe2
();
Map
<
String
,
String
>
trainerMap
=
generator
.
generateTrainer
(
configurations
,
instanceName
,
"mainSimple"
);
for
(
String
fileName
:
trainerMap
.
keySet
()){
FileWriter
writer
=
new
FileWriter
(
generator
.
getGenerationTargetPath
()
+
fileName
);
writer
.
write
(
trainerMap
.
get
(
fileName
));
writer
.
close
();
}
assertTrue
(
Log
.
getFindings
().
isEmpty
());
checkFilesAreEqual
(
Paths
.
get
(
"./target/generated-sources-cnnarch"
),
Paths
.
get
(
"./src/test/resources/target_code"
),
Arrays
.
asList
(
"CNNTrainer_mainSimple.py"
));
}
@Test
public
void
testEmptyCfgGeneration
()
throws
IOException
,
TemplateException
{
Log
.
getFindings
().
clear
();
List
<
ConfigurationSymbol
>
configurations
=
new
ArrayList
<>();
List
<
String
>
instanceName
=
Arrays
.
asList
(
"main_net1"
);
final
ModelPath
mp
=
new
ModelPath
(
Paths
.
get
(
"src/test/resources/valid_tests"
));
GlobalScope
scope
=
new
GlobalScope
(
mp
,
new
CNNTrainLanguage
());
CNNTrainCompilationUnitSymbol
compilationUnit
=
scope
.<
CNNTrainCompilationUnitSymbol
>
resolve
(
"EmptyConfig"
,
CNNTrainCompilationUnitSymbol
.
KIND
).
get
();
CNNTrainCocos
.
checkAll
(
compilationUnit
);
configurations
.
add
(
compilationUnit
.
getConfiguration
());
CNNArch2Caffe2
generator
=
new
CNNArch2Caffe2
();
Map
<
String
,
String
>
trainerMap
=
generator
.
generateTrainer
(
configurations
,
instanceName
,
"mainEmpty"
);
for
(
String
fileName
:
trainerMap
.
keySet
()){
FileWriter
writer
=
new
FileWriter
(
generator
.
getGenerationTargetPath
()
+
fileName
);
writer
.
write
(
trainerMap
.
get
(
fileName
));
writer
.
close
();
}
assertTrue
(
Log
.
getFindings
().
isEmpty
());
checkFilesAreEqual
(
Paths
.
get
(
"./target/generated-sources-cnnarch"
),
Paths
.
get
(
"./src/test/resources/target_code"
),
Arrays
.
asList
(
"CNNTrainer_mainEmpty.py"
));
}
}
src/test/resources/target_code/CNNTrainer_mainEmpty.py
0 → 100644
View file @
477fea7c
import
logging
import
mxnet
as
mx
import
CNNCreator_main_net1
if
__name__
==
"__main__"
:
logging
.
basicConfig
(
level
=
logging
.
DEBUG
)
logger
=
logging
.
getLogger
()
handler
=
logging
.
FileHandler
(
"train.log"
,
"w"
,
encoding
=
None
,
delay
=
"true"
)
logger
.
addHandler
(
handler
)
main_net1
=
CNNCreator_main_net1
.
CNNCreator_main_net1
()
main_net1
.
train
(
)
src/test/resources/target_code/CNNTrainer_mainFull.py
0 → 100644
View file @
477fea7c
import
logging
import
mxnet
as
mx
import
CNNCreator_main_net1
import
CNNCreator_main_net2
if
__name__
==
"__main__"
:
logging
.
basicConfig
(
level
=
logging
.
DEBUG
)
logger
=
logging
.
getLogger
()
handler
=
logging
.
FileHandler
(
"train.log"
,
"w"
,
encoding
=
None
,
delay
=
"true"
)
logger
.
addHandler
(
handler
)
main_net1
=
CNNCreator_main_net1
.
CNNCreator_main_net1
()
main_net1
.
train
(
batch_size
=
100
,
num_epoch
=
5
,
load_checkpoint
=
True
,
context
=
'gpu'
,
normalize
=
True
,
eval_metric
=
'mse'
,
optimizer
=
'rmsprop'
,
optimizer_params
=
{
'weight_decay'
:
0.01
,
'centered'
:
True
,
'gamma2'
:
0.9
,
'gamma1'
:
0.9
,
'clip_weights'
:
10.0
,
'learning_rate_decay'
:
0.9
,
'epsilon'
:
1.0E-6
,
'rescale_grad'
:
1.1
,
'clip_gradient'
:
10.0
,
'learning_rate_minimum'
:
1.0E-5
,
'learning_rate_policy'
:
'step'
,
'learning_rate'
:
0.001
,
'step_size'
:
1000
}
)
main_net2
=
CNNCreator_main_net2
.
CNNCreator_main_net2
()
main_net2
.
train
(
batch_size
=
100
,
num_epoch
=
10
,
load_checkpoint
=
False
,
context
=
'gpu'
,
normalize
=
False
,
eval_metric
=
'topKAccuracy'
,
optimizer
=
'adam'
,
optimizer_params
=
{
'epsilon'
:
1.0E-6
,
'weight_decay'
:
0.01
,
'rescale_grad'
:
1.1
,
'beta1'
:
0.9
,
'clip_gradient'
:
10.0
,
'beta2'
:
0.9
,
'learning_rate_minimum'
:
0.001
,
'learning_rate_policy'
:
'exp'
,
'learning_rate'
:
0.001
,
'learning_rate_decay'
:
0.9
,
'step_size'
:
1000
}
)
src/test/resources/target_code/CNNTrainer_mainSimple.py
0 → 100644
View file @
477fea7c
import
logging
import
mxnet
as
mx
import
CNNCreator_main_net1
import
CNNCreator_main_net2
if
__name__
==
"__main__"
:
logging
.
basicConfig
(
level
=
logging
.
DEBUG
)
logger
=
logging
.
getLogger
()
handler
=
logging
.
FileHandler
(
"train.log"
,
"w"
,
encoding
=
None
,
delay
=
"true"
)
logger
.
addHandler
(
handler
)
main_net1
=
CNNCreator_main_net1
.
CNNCreator_main_net1
()
main_net1
.
train
(
batch_size
=
100
,
num_epoch
=
50
,
optimizer
=
'adam'
,
optimizer_params
=
{
'learning_rate'
:
0.001
}
)
main_net2
=
CNNCreator_main_net2
.
CNNCreator_main_net2
()
main_net2
.
train
(
batch_size
=
100
,
num_epoch
=
5
,
optimizer
=
'sgd'
,
optimizer_params
=
{
'learning_rate'
:
0.1
}
)
src/test/resources/valid_tests/EmptyConfig.cnnt
0 → 100644
View file @
477fea7c
configuration EmptyConfig{
}
src/test/resources/valid_tests/FullConfig.cnnt
0 → 100644
View file @
477fea7c
configuration FullConfig{
num_epoch : 5
batch_size : 100
load_checkpoint : true
eval_metric : mse
context : gpu
normalize : true
optimizer : rmsprop{
learning_rate : 0.001
learning_rate_minimum : 0.00001
weight_decay : 0.01
learning_rate_decay : 0.9
learning_rate_policy : step
step_size : 1000
rescale_grad : 1.1
clip_gradient : 10
gamma1 : 0.9
gamma2 : 0.9
epsilon : 0.000001
centered : true
clip_weights : 10
}
}
src/test/resources/valid_tests/FullConfig2.cnnt
0 → 100644
View file @
477fea7c
configuration FullConfig2{
num_epoch : 10
batch_size : 100
load_checkpoint : false
context : gpu
eval_metric : top_k_accuracy
normalize : false
optimizer : adam{
learning_rate : 0.001
learning_rate_minimum : 0.001
weight_decay : 0.01
learning_rate_decay : 0.9
learning_rate_policy : exp
step_size : 1000
rescale_grad : 1.1
clip_gradient : 10
beta1 : 0.9
beta2 : 0.9
epsilon : 0.000001
}
}
src/test/resources/valid_tests/SimpleConfig1.cnnt
0 → 100644
View file @
477fea7c
configuration SimpleConfig1{
num_epoch : 50
batch_size : 100
optimizer : adam{
learning_rate : 0.001
}
}
src/test/resources/valid_tests/SimpleConfig2.cnnt
0 → 100644
View file @
477fea7c
configuration SimpleConfig2{
num_epoch:5
batch_size:100
optimizer:sgd{
learning_rate:0.1
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment