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
}