def DebugTrainNet(self, TaskSpec, OptionList): LogHistory = TaskSpec["LogHistory"] OperatorList = TaskSpec["OperatorList"] NetworkDecor = TaskSpec["NetworkDecor"] VertexNum = TaskSpec["OperatorNum"] InputNum = TaskSpec["InputNum"] OutputNum = TaskSpec["OutputNum"] BatchSize = TaskSpec["BatchSize"] Epochs = TaskSpec["Epochs"] ConcatOperator = TaskSpec["ConcatOperator"] InputOperator = TaskSpec["InputOperator"] TrajectoryLength = TaskSpec["TrajectoryLength"] RewardGamma = TaskSpec["RewardGamma"] TaskInput = TaskSpec["TaskInput"] TaskLabel = TaskSpec["TaskLabel"] SetBatchSize(BatchSize) self.TaskGraph = tf.Graph() self.TaskSess = tf.Session(graph=self.TaskGraph, config=self.SessConfig) Gph = Graph(VertexNum=VertexNum, OperatorList=OperatorList, InputNum=InputNum, OutputNum=OutputNum, ConcatOperator=ConcatOperator, InputOperator=InputOperator) with self.TaskGraph.as_default(): self.InitializeTaskGraph(Data=TaskInput, Label=TaskLabel) for Option in OptionList: Gph.ApplyOption(Option) self.BuildTaskGraph(Graph=Gph, OutputDecor=NetworkDecor, ID=0) for i in Gph.InternalTensor: if i is None: continue print(i, type(i).Name, i.GetTensor().shape) #return Loss, Acc = self.TrainTaskNet(Step=Epochs) print(Loss, Acc)
def StartTrial(self, TaskSpec): LogHistory = TaskSpec["LogHistory"] OperatorList = TaskSpec["OperatorList"] NetworkDecor = TaskSpec["NetworkDecor"] VertexNum = TaskSpec["OperatorNum"] InputNum = TaskSpec["InputNum"] OutputNum = TaskSpec["OutputNum"] BatchSize = TaskSpec["BatchSize"] Epochs = TaskSpec["Epochs"] ConcatOperator = TaskSpec["ConcatOperator"] InputOperator = TaskSpec["InputOperator"] TrajectoryLength = TaskSpec["TrajectoryLength"] RewardGamma = TaskSpec["RewardGamma"] TaskInput = TaskSpec["TaskInput"] TaskLabel = TaskSpec["TaskLabel"] self.HisNet = [] self.HisNetPerf = [] self.Log("Operator List " + str(OperatorList)) #ImageOperators SetBatchSize(BatchSize) self.BatchSize = BatchSize with self.QGraph.as_default(): self.ConstructQFunc3D(ImageSize=VertexNum, BitDepth=len(OperatorList), BatchSize=BatchSize) #print([i.op_def.name for i in self.QGraph.get_operations()]) QNetVar = tf.global_variables( ) #[op for op in tf.GraphKeys.GLOBAL_VARIABLES if isinstance(op,tf.Variable) and not tf.is_variable_initialized(op)] #print([i.name for i in QNetVar]) self.QNetsess.run(tf.initialize_variables( QNetVar)) #tf.global_variables_initializer()) Initial_Explore_Rate = 0.5 Explore_Rate_Decay = 0.001 QNet_Format = "3D_NoNull" for i in range(Epochs): if Epochs % 100 == 0: self.TaskGraph = tf.Graph() self.TaskSess = tf.Session(graph=self.TaskGraph, config=self.SessConfig) with self.TaskGraph.as_default(): self.InitializeTaskGraph(Data=TaskInput, Label=TaskLabel) Gph = Graph(VertexNum=VertexNum, OperatorList=OperatorList, InputNum=InputNum, OutputNum=OutputNum, ConcatOperator=ConcatOperator, InputOperator=InputOperator) Gph.InitializeCheckOptionInput([self.TaskNextData]) if Initial_Explore_Rate > 0: Initial_Explore_Rate -= Explore_Rate_Decay TrajectoryStep = 0 HisNetTemp = [] HisPerfTemp = [] self.InitializedVar = [] for j in range(TrajectoryLength): OptionList = Gph.ConnectOptions() ValidOptionList = [] for Option in OptionList: if Gph.CheckOption(Option): ValidOptionList.append(Option) RandDie = random.random() if RandDie > Initial_Explore_Rate: ChooseType = "QLearning" else: ChooseType = "Random" if ChooseType == 'QLearning': QNetInputList = [] for Option in ValidOptionList: Gph.ApplyOption(Option) QNetInput = Gph.UnifiedTransform(QNet_Format) QNetInputList.append(QNetInput) Gph.RevokeOption(Option) QNetInput = np.array(QNetInputList) QValuesClip = self.PredictQNet(QNetInput) PossQValues = np.exp(QValuesClip) _Sum = np.sum(PossQValues) ExpDist = PossQValues / _Sum ChosenOption = self.MakeChoice(Distribution=ExpDist, ChoiceList=ValidOptionList) elif ChooseType == 'Random': ChosenOption = ValidOptionList[random.randint( 0, len(ValidOptionList) - 1)] self.Log("ChosenOption " + str(ChosenOption)) Gph.ApplyOption(ChosenOption) Step = 100 #print(i,j) with self.TaskGraph.as_default(): self.BuildTaskGraph(Graph=Gph, OutputDecor=NetworkDecor, ID=i) Loss, Acc = self.TrainTaskNet(Step=Epochs) HisItem = { "Traj": j, "OptionList": Gph.ConnectOptions(), "TrainStep": Step, "Loss": Loss, "Acc": Acc, "UnifiedNet": Gph.UnifiedTransform(QNet_Format) } if LogHistory == True: pass #self.Log(HisItem) HisNetTemp.append(HisItem["UnifiedNet"]) HisPerfTemp.append(HisItem["Acc"]) TrajectoryStep += 1 self.HisNet.extend(HisNetTemp) for i in range(TrajectoryStep - 1): print("HisNet", HisPerfTemp[i]) HisPerfTemp[TrajectoryStep - i - 2][0] += RewardGamma * HisPerfTemp[TrajectoryStep - i - 1][0] self.HisNetPerf.extend(HisPerfTemp) QStep = Epochs self.TrainQNet(self.QNetOutput, self.HisNet, self.HisNetPerf, QStep)
"ConcatOperator": ConcatOperatorDense, "InputOperator": ImageInput, "TrajectoryLength": OperatorLimit - 4, "RewardGamma": 0.9 } if Mode == "Train": logging.getLogger().setLevel(logging.DEBUG) now = datetime.datetime.now() logging.basicConfig( level=logging.INFO, format= '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='%s_%s.log' % ("MNISTTask", now.strftime("%Y-%m-%d %H-%M")), filemode='w') RL_Exp.StartTrial(TaskSpec) elif Mode == "TestBuildGraph": OptionList = [[1, 1, 1, 0], [11, 1, 1, 1], [13, 1, 1, 2], [2, 1, 1, 3], [12, 1, 1, 4], [13, 1, 1, 5], [6, 1, 1, 6]] RL_Exp.DebugTrainNet(TaskSpec, OptionList) elif Mode == "TestUnifiedTrans": g = Graph(10, Op_List, 1, 1, ConcatOperatorDense, InputOperator=ImageInput) OptionList = [[1, 1, 1, 0], [11, 1, 1, 1], [13, 1, 1, 2], [2, 1, 1, 3], [12, 1, 1, 4], [13, 1, 1, 5], [6, 1, 1, 6]] np.set_printoptions(threshold=np.inf) for Option in OptionList: g.ApplyOption(Option) print(np.array(g.UnifiedTransform("3D_NoNull").astype(np.int8)))