CNNTrain.mc4 11.1 KB
Newer Older
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
1
package de.monticore.lang.monticar;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
2

3
grammar CNNTrain extends de.monticore.lang.monticar.Common2, de.monticore.NumberUnit{
4
    symbol scope CNNTrainCompilationUnit = "configuration"
5
                                 name:Name&
6
7
8
                                 Configuration;

    Configuration =  "{"entries:ConfigEntry* "}";
9

Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
10
11
12
13
14
    interface Entry;
    ast Entry = method String getName(){}
                method ASTConfigValue getValue(){};
    interface ConfigValue;
    interface ConfigEntry extends Entry;
15
16
    interface VariableReference;
    ast VariableReference = method String getName(){};
17

Nicola Gatto's avatar
Nicola Gatto committed
18
19
20
21
22
23
24
25
26
    // General Values
    DataVariable implements VariableReference = Name&;
    IntegerValue implements ConfigValue = NumberWithUnit;
    NumberValue implements ConfigValue = NumberWithUnit;
    StringValue implements ConfigValue = StringLiteral;
    BooleanValue implements ConfigValue = (TRUE:"true" | FALSE:"false");
    ComponentNameValue implements ConfigValue = Name ("."Name)*;
    DoubleVectorValue implements ConfigValue = "(" number:NumberWithUnit ("," number:NumberWithUnit)* ")";

Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
27
28
    NumEpochEntry implements ConfigEntry = name:"num_epoch" ":" value:IntegerValue;
    BatchSizeEntry implements ConfigEntry = name:"batch_size" ":" value:IntegerValue;
29
    LoadCheckpointEntry implements ConfigEntry = name:"load_checkpoint" ":" value:BooleanValue;
30
    NormalizeEntry implements ConfigEntry = name:"normalize" ":" value:BooleanValue;
Nicola Gatto's avatar
Nicola Gatto committed
31
    OptimizerEntry implements ConfigEntry = (name:"optimizer" | name:"actor_optimizer") ":" value:OptimizerValue;
32
    TrainContextEntry implements ConfigEntry = name:"context" ":" value:TrainContextValue;
33
    EvalMetricEntry implements ConfigEntry = name:"eval_metric" ":" value:EvalMetricValue;
34
    LossEntry implements ConfigEntry = name:"loss" ":" value:LossValue;
35
36
37
38
39
40
41
42

    EvalMetricValue implements ConfigValue =(accuracy:"accuracy"
                                               | crossEntropy:"cross_entropy"
                                               | f1:"f1"
                                               | mae:"mae"
                                               | mse:"mse"
                                               | rmse:"rmse"
                                               | topKAccuracy:"top_k_accuracy");
43

Nicola Gatto's avatar
Nicola Gatto committed
44
45
46
47
    LossValue implements ConfigValue =(euclidean:"euclidean"
                                           | l1: "l1"
                                           | crossEntropy:"cross_entropy"
                                           | huberLoss: "huber_loss");
48

Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
49
50
51
52
53
54
    LRPolicyValue implements ConfigValue =(fixed:"fixed"
                                         | step:"step"
                                         | exp:"exp"
                                         | inv:"inv"
                                         | poly:"poly"
                                         | sigmoid:"sigmoid");
55
    TrainContextValue implements ConfigValue = (cpu:"cpu" | gpu:"gpu");
56

Nicola Gatto's avatar
Nicola Gatto committed
57
    interface OptimizerParamEntry extends Entry;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
58
    interface OptimizerValue extends ConfigValue;
Nicola Gatto's avatar
Nicola Gatto committed
59
    interface SGDEntry extends OptimizerParamEntry;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
60
61
    SGDOptimizer implements OptimizerValue = name:"sgd" ("{" params:SGDEntry* "}")?;

Nicola Gatto's avatar
Nicola Gatto committed
62
    interface AdamEntry extends OptimizerParamEntry;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
63
64
    AdamOptimizer implements OptimizerValue = name:"adam" ("{" params:AdamEntry* "}")?;

Nicola Gatto's avatar
Nicola Gatto committed
65
    interface RmsPropEntry extends OptimizerParamEntry;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
66
67
    RmsPropOptimizer implements OptimizerValue = name:"rmsprop" ("{" params:RmsPropEntry* "}")?;

Nicola Gatto's avatar
Nicola Gatto committed
68
    interface AdaGradEntry extends OptimizerParamEntry;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
69
70
71
72
    AdaGradOptimizer implements OptimizerValue = name:"adagrad" ("{" params:AdaGradEntry* "}")?;

    NesterovOptimizer implements OptimizerValue = name:"nag" ("{" params:SGDEntry* "}")?;

Nicola Gatto's avatar
Nicola Gatto committed
73
    interface AdaDeltaEntry extends OptimizerParamEntry;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
74
75
76
77
    AdaDeltaOptimizer implements OptimizerValue = name:"adadelta" ("{" params:AdaDeltaEntry* "}")?;

    interface GeneralOptimizerEntry extends SGDEntry,AdamEntry,RmsPropEntry,AdaGradEntry,AdaDeltaEntry;

78
    MinimumLearningRateEntry implements GeneralOptimizerEntry = name:"learning_rate_minimum" ":" value:NumberValue;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
    LearningRateEntry implements GeneralOptimizerEntry = name:"learning_rate" ":" value:NumberValue;
    WeightDecayEntry implements GeneralOptimizerEntry = name:"weight_decay" ":" value:NumberValue;
    LRDecayEntry implements GeneralOptimizerEntry = name:"learning_rate_decay" ":" value:NumberValue;
    LRPolicyEntry implements GeneralOptimizerEntry = name:"learning_rate_policy" ":" value:LRPolicyValue;
    RescaleGradEntry implements GeneralOptimizerEntry = name:"rescale_grad" ":" value:NumberValue;
    ClipGradEntry implements GeneralOptimizerEntry = name:"clip_gradient" ":" value:NumberValue;
    StepSizeEntry implements GeneralOptimizerEntry = name:"step_size" ":" value:IntegerValue;


    MomentumEntry implements SGDEntry = name:"momentum" ":" value:NumberValue;
    Beta1Entry implements AdamEntry = name:"beta1" ":" value:NumberValue;
    Beta2Entry implements AdamEntry = name:"beta2" ":" value:NumberValue;
    EpsilonEntry implements AdamEntry,AdaGradEntry,RmsPropEntry,AdaDeltaEntry = name:"epsilon" ":" value:NumberValue;
    Gamma1Entry implements RmsPropEntry = name:"gamma1" ":" value:NumberValue;
    Gamma2Entry implements RmsPropEntry = name:"gamma2" ":" value:NumberValue;
    CenteredEntry implements RmsPropEntry = name:"centered" ":" value:BooleanValue;
    ClipWeightsEntry implements RmsPropEntry = name:"clip_weights" ":" value:NumberValue;
    RhoEntry implements AdaDeltaEntry = name:"rho" ":" value:NumberValue;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
97

Nicola Gatto's avatar
Nicola Gatto committed
98
99
100
101
    // Reinforcement Extensions
    interface MultiParamValue extends ConfigValue;

    LearningMethodEntry implements ConfigEntry = name:"learning_method" ":" value:LearningMethodValue;
Nicola Gatto's avatar
Nicola Gatto committed
102
    RLAlgorithmEntry implements ConfigEntry = name:"rl_algorithm" ":" value:RLAlgorithmValue;
Nicola Gatto's avatar
Nicola Gatto committed
103
104
105
106
107
108
109
110
    NumEpisodesEntry implements ConfigEntry = name:"num_episodes" ":" value:IntegerValue;
    DiscountFactorEntry implements ConfigEntry = name:"discount_factor" ":" value:NumberValue;
    NumMaxStepsEntry implements ConfigEntry = name:"num_max_steps" ":" value:IntegerValue;
    TargetScoreEntry implements ConfigEntry = name:"target_score" ":" value:NumberValue;
    TrainingIntervalEntry implements ConfigEntry = name:"training_interval" ":" value:IntegerValue;
    SnapshotIntervalEntry implements ConfigEntry = name:"snapshot_interval" ":" value:IntegerValue;
    AgentNameEntry implements ConfigEntry = name:"agent_name" ":" value:StringValue;
    RewardFunctionEntry implements ConfigEntry = name:"reward_function" ":" value:ComponentNameValue;
Nicola Gatto's avatar
Nicola Gatto committed
111
112
    StartTrainingAtEntry implements ConfigEntry = name:"start_training_at" ":" value:IntegerValue;
    EvaluationSamplesEntry implements ConfigEntry = name:"evaluation_samples" ":" value:IntegerValue;
Nicola Gatto's avatar
Nicola Gatto committed
113
114
115

    LearningMethodValue implements ConfigValue = (supervisedLearning:"supervised" | reinforcement:"reinforcement");

Nicola Gatto's avatar
Nicola Gatto committed
116
117
    RLAlgorithmValue implements ConfigValue = (dqn:"dqn-algorithm" | ddpg:"ddpg-algorithm");

Nicola Gatto's avatar
Nicola Gatto committed
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
    interface MultiParamConfigEntry extends ConfigEntry;

    // Replay Memory
    ReplayMemoryEntry implements MultiParamConfigEntry = name:"replay_memory" ":" value:ReplayMemoryValue;
    interface ReplayMemoryValue extends MultiParamValue;

    interface ReplayMemoryBufferEntry extends Entry;
    ReplayMemoryBufferValue implements ReplayMemoryValue = name:"buffer" ("{" params:ReplayMemoryBufferEntry* "}")?;

    ReplayMemoryOnlineValue implements ReplayMemoryValue = name:"online";

    interface ReplayMemoryCombinedEntry extends Entry;
    ReplayMemoryCombinedValue implements ReplayMemoryValue = name:"combined" ("{" params:ReplayMemoryCombinedEntry* "}")?;

    interface GeneralReplayMemoryEntry extends ReplayMemoryBufferEntry, ReplayMemoryCombinedEntry;

    MemorySizeEntry implements GeneralReplayMemoryEntry = name:"memory_size" ":" value:IntegerValue;
    SampleSizeEntry implements GeneralReplayMemoryEntry = name:"sample_size" ":" value:IntegerValue;

Nicola Gatto's avatar
Nicola Gatto committed
137
138
139
140
141
142
143
144
145
    // Strategy
    StrategyEntry implements MultiParamConfigEntry = name:"strategy" ":" value:StrategyValue;
    interface StrategyValue extends MultiParamValue;

    interface StrategyEpsGreedyEntry extends Entry;
    StrategyEpsGreedyValue implements StrategyValue = name:"epsgreedy" ("{" params:StrategyEpsGreedyEntry* "}")?;

    interface StrategyOrnsteinUhlenbeckEntry extends Entry;
    StrategyOrnsteinUhlenbeckValue implements StrategyValue = name:"ornstein_uhlenbeck" ("{" params:StrategyOrnsteinUhlenbeckEntry* "}")?;
Nicola Gatto's avatar
Nicola Gatto committed
146

Nicola Gatto's avatar
Nicola Gatto committed
147
148
149
    StrategyOUMu implements StrategyOrnsteinUhlenbeckEntry = name: "mu" ":" value:DoubleVectorValue;
    StrategyOUTheta implements StrategyOrnsteinUhlenbeckEntry = name: "theta" ":" value:DoubleVectorValue;
    StrategyOUSigma implements StrategyOrnsteinUhlenbeckEntry = name: "sigma" ":" value:DoubleVectorValue;
Nicola Gatto's avatar
Nicola Gatto committed
150

Nicola Gatto's avatar
Nicola Gatto committed
151
152
153
154
155
156
    interface GeneralStrategyEntry extends StrategyEpsGreedyEntry, StrategyOrnsteinUhlenbeckEntry;

    GreedyEpsilonEntry implements GeneralStrategyEntry = name:"epsilon" ":" value:NumberValue;
    MinEpsilonEntry implements GeneralStrategyEntry = name:"min_epsilon" ":" value:NumberValue;
    EpsilonDecayStartEntry implements GeneralStrategyEntry = name:"epsilon_decay_start" ":" value:IntegerValue;
    EpsilonDecayMethodEntry implements GeneralStrategyEntry = name:"epsilon_decay_method" ":" value:EpsilonDecayMethodValue;
Nicola Gatto's avatar
Nicola Gatto committed
157
    EpsilonDecayMethodValue implements ConfigValue = (linear:"linear" | no:"no");
Nicola Gatto's avatar
Nicola Gatto committed
158
    EpsilonDecayEntry implements GeneralStrategyEntry = name:"epsilon_decay" ":" value:NumberValue;
Nicola Gatto's avatar
Nicola Gatto committed
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173

    // Environment
    EnvironmentEntry implements MultiParamConfigEntry = name:"environment" ":" value:EnvironmentValue;
    interface EnvironmentValue extends MultiParamValue;

    interface GymEnvironmentEntry extends Entry;
    GymEnvironmentValue implements EnvironmentValue = name:"gym" ("{" params:GymEnvironmentEntry* "}");
    GymEnvironmentNameEntry implements GymEnvironmentEntry = name:"name" ":" value:StringValue;

    interface RosEnvironmentEntry extends Entry;
    RosEnvironmentValue implements EnvironmentValue = | name:"ros_interface" ("{" params:RosEnvironmentEntry* "}")?;
    RosEnvironmentStateTopicEntry implements RosEnvironmentEntry = name:"state_topic" ":" value:StringValue;
    RosEnvironmentActionTopicEntry implements RosEnvironmentEntry = name:"action_topic" ":" value:StringValue;
    RosEnvironmentResetTopicEntry implements RosEnvironmentEntry = name:"reset_topic" ":" value:StringValue;
    RosEnvironmentTerminalStateTopicEntry implements RosEnvironmentEntry = name:"terminal_state_topic" ":" value:StringValue;
Nicola Gatto's avatar
Nicola Gatto committed
174
175
176
177
178
179
180
181
182
183
184
185
    RosEnvironmentRewardTopicEntry implements RosEnvironmentEntry = name:"reward_topic" ":" value:StringValue;

    // DQN exclusive parameters
    UseFixTargetNetworkEntry implements ConfigEntry = name:"use_fix_target_network" ":" value:BooleanValue;
    TargetNetworkUpdateIntervalEntry implements ConfigEntry = name:"target_network_update_interval" ":" value:IntegerValue;
    UseDoubleDQNEntry implements ConfigEntry = name:"use_double_dqn" ":" value:BooleanValue;


    // DDPG exclusive parameters
    CriticNetworkEntry implements ConfigEntry = name:"critic" ":" value:ComponentNameValue;
    SoftTargetUpdateRateEntry implements ConfigEntry = name:"soft_target_update_rate" ":" value:NumberValue;
    CriticOptimizerEntry implements ConfigEntry = name:"critic_optimizer" ":" value:OptimizerValue;
Thomas Michael Timmermanns's avatar
Thomas Michael Timmermanns committed
186
}