[태그:] python

  • Monte Carlo Method 코드 분석

    여기에 있는 코드 참조..
    책은 “파이썬과 케라스로 배우는 강화학습” 내용.

    Monte Carlo Method의 코드가 설명되어 있지 않아, python 디버그로 그 결과를 잠깐 살폈다.

    메인 코드.

    # 메인 함수
    if __name__ == "__main__":
        env = Env()
        agent = MCAgent(actions=list(range(env.n_actions)))
    
        for episode in range(1000):
            state = env.reset()
            action = agent.get_action(state)
    
            while True:
                env.render()
    
                # 다음 상태로 이동
                # 보상은 숫자이고, 완료 여부는 boolean
                next_state, reward, done = env.step(action)
                agent.save_sample(next_state, reward, done)
                ##테스트용.
                print(agent.samples)
                print("\n")
    
                # 다음 행동 받아옴
                action = agent.get_action(next_state)
    
                # 에피소드가 완료됐을 때, 큐 함수 업데이트
                if done:
                    print("episode : ", episode)
                    agent.update()
                    agent.samples.clear()
                    break
    

    6번행: episode를 1,000번 반복.
    10번행: 무한번 반복이나, 25번 결과를 보고 break 결정. done은 15번 행에서 업데이트.

    (Pdb) l
    109                 # 보상은 숫자이고, 완료 여부는 boolean
    110                 next_state, reward, done = env.step(action)
    111                 agent.save_sample(next_state, reward, done)
    112                 ##테스트용.
    113                 print(agent.samples)
    114  ->              print("\n")
    115     
    116                 # 다음 행동 받아옴
    117                 action = agent.get_action(next_state)
    118
    119 # 에피소드가 완료됐을 때, 큐 함수 업데이트
    (Pdb) l
    120 if done:
    121 print("episode : ", episode)
    122 agent.update()
    123 agent.samples.clear()
    124 break
    [EOF]
    (Pdb) p agent.samples
    [[[0, 0], 0, False], [[0, 1], 0, False], [[1, 1], 0, False], [[1, 2], -100, True]]
    (Pdb)
    
    

    에피소드가 끝나면, 자신이 방문한 모든 셀을 list로 기억.
    아래 좌표 중, 행과 열이 바뀜.

    22번행: 현재 스테이트에서 다음 스테이트를 예측.

    (Pdb) l
     27             for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29                 if state not in visit_state:
     30                     visit_state.append(state)
     31                     G_t = self.discount_factor * (reward[1] + G_t)
     32  ->                  value = self.value_table[state]
     33                     ##테스트..
     34                     print("Value is ",value)
     35                     self.value_table[state] = (value +
     36                                                self.learning_rate * (G_t - value))
     37     
    (Pdb) 
     38                     print("Value state is", state)
     39                     #print("type of value_table is", type(self.value_table))
     40                     print("Value table is", self.value_table)
     41                     #print("Value table is",self.value_table[state])
     42     
     43                     print("\n")
     44     
     45         # 큐 함수에 따라서 행동을 반환
     46         # 입실론 탐욕 정책에 따라서 행동을 반환
     47         def get_action(self, state):
     48             if np.random.rand() < self.epsilon:
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(34)update()
    -> print("Value is ",value)
    (Pdb) n
    Value is  0.0
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(35)update()
    -> self.value_table[state] = (value +
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(36)update()
    -> self.learning_rate * (G_t - value))
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(38)update()
    -> print("Value state is", state)
    (Pdb) 
    Value state is [1, 2]
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(40)update()
    -> print("Value table is", self.value_table)
    (Pdb) 
    Value table is defaultdict(<class 'float'>, {'[0, 0]': 0.0, '[0, 1]': 0.0, '[1, 0]': 0.0, '[1, 2]': -0.9, '[2, 1]': 0.0, '[1, 1]': 0.0, '[1, 3]': 0.0, '[0, 2]': 0.0, '[2, 2]': 0.0})
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(43)update()
    -> print("\n")
    (Pdb) p self.value_table
    defaultdict(<class 'float'>, {'[0, 0]': 0.0, '[0, 1]': 0.0, '[1, 0]': 0.0, '[1, 2]': -0.9, '[2, 1]': 0.0, '[1, 1]': 0.0, '[1, 3]': 0.0, '[0, 2]': 0.0, '[2, 2]': 0.0})
    (Pdb) 
    
    

    self.value_table을 각 state 관리. 방문한 state를 list로 추가하고, 각 value를 update. 나중에 현재 state를 보고 action을 산출 할 때 필요.

    update 하면 teminal state의 reward를 감가율로 계속 감소시켜 시작 스테이트까지 value_table[state]로 업데이트..

    아래 코드에서

    if state not in visit_state가 있기 때문에, 처음 방문한 state만 관심을 갖음.

     19        # 메모리에 샘플을 추가
     20         def save_sample(self, state, reward, done):
     21             self.samples.append([state, reward, done])
     22     
     23         # 모든 에피소드에서 에이전트가 방문한 상태의 큐 함수를 업데이트
     24  ->      def update(self):
     25             G_t = 0
     26             visit_state = []
     27             for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29                 if state not in visit_state:
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(25)update()
    -> G_t = 0
    (Pdb) p self.samples
    [[[1, 0], 0, False], [[1, 0], 0, False], [[2, 0], 0, False], [[3, 0], 0, False], [[3, 1], 0, False], [[3, 2], 0, False], [[2, 2], 100, True]]
    (Pdb) 
    ...
    (Pdb) l
     24         def update(self):
     25             G_t = 0
     26             visit_state = []
     27             for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29  ->              if state not in visit_state:
     30                     visit_state.append(state)
     31                     G_t = self.discount_factor * (reward[1] + G_t)
     32                     value = self.value_table[state]
     33                     ##테스트..
     34                     print("Value is ",value)
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(30)update()
    -> visit_state.append(state)
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(31)update()
    -> G_t = self.discount_factor * (reward[1] + G_t)
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(32)update()
    -> value = self.value_table[state]
    (Pdb) p self.value_table
    defaultdict(<class 'float'>, {'[0, 0]': 10.523899590468769, '[0, 1]': 2.3971909843905967, '[1, 0]': 45.81574921045315, '[1, 2]': -2.67309, '[2, 1]': -19.99607765407679, '[1, 1]': 6.356969207767222, '[1, 3]': 0.0, '[0, 2]': -0.41447951099999986, '[2, 2]': 89.22430756838313, '[2, 0]': 50.92319972091863, '[3, 0]': 60.0913655106793, '[3, 1]': 66.88710703917133, '[0, 3]': -0.7290000000000001, '[0, 4]': -0.6561000000000001, '[1, 4]': 0.0, '[4, 0]': 8.302503491918047, '[4, 1]': 6.159613912118276, '[4, 2]': 6.304592658442578, '[3, 2]': 80.25132103821517, '[3, 3]': 6.970546731858152, '[2, 3]': 0.0, '[3, 4]': 0.6561000000000001, '[4, 3]': 0.0, '[2, 4]': 0.0, '[4, 4]': 0.0})
    
    

    500회 시행 후, 과거 이력을 보면 아래와 같다.

    (Pdb) p agent.samples
    [[[0, 1], 0, False], [[0, 0], 0, False], [[0, 1], 0, False], [[0, 0], 0, False], [[1, 0], 0, False], [[1, 1], 0, False], [[1, 0], 0, False], [[2, 0], 0, False], [[3, 0], 0, False], [[3, 1], 0, False], [[3, 2], 0, False], [[2, 2], 100, True]]
    (Pdb) l
    116                 # 다음 행동 받아옴
    117                 action = agent.get_action(next_state)
    118     
    119                 # 에피소드가 완료됐을 때, 큐 함수 업데이트
    120                 if done:
    121 B->                  print("episode : ", episode)
    122                     agent.update()
    123                     agent.samples.clear()
    124                     break
    [EOF]
    (Pdb) n
    episode :  500
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(122)<module>()
    -> agent.update()
    (Pdb) l
    117                 action = agent.get_action(next_state)
    118     
    119                 # 에피소드가 완료됐을 때, 큐 함수 업데이트
    120                 if done:
    121 B                   print("episode : ", episode)
    122  ->                  agent.update()
    123                     agent.samples.clear()
    124                     break
    [EOF]
    (Pdb) s
    --Call--
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(24)update()
    -> def update(self):
    (Pdb) l
     19         # 메모리에 샘플을 추가
     20         def save_sample(self, state, reward, done):
     21             self.samples.append([state, reward, done])
     22     
     23         # 모든 에피소드에서 에이전트가 방문한 상태의 큐 함수를 업데이트
     24  ->      def update(self):
     25             G_t = 0
     26             visit_state = []
     27             for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29                 if state not in visit_state:
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(25)update()
    -> G_t = 0
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(26)update()
    -> visit_state = []
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(27)update()
    -> for reward in reversed(self.samples):
    (Pdb) p visit_state
    []
    (Pdb) l
     22     
     23         # 모든 에피소드에서 에이전트가 방문한 상태의 큐 함수를 업데이트
     24         def update(self):
     25             G_t = 0
     26             visit_state = []
     27  ->          for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29                 if state not in visit_state:
     30                     visit_state.append(state)
     31                     G_t = self.discount_factor * (reward[1] + G_t)
     32                     value = self.value_table[state]
    (Pdb) p self.samples
    [[[0, 1], 0, False], [[0, 0], 0, False], [[0, 1], 0, False], [[0, 0], 0, False], [[1, 0], 0, False], [[1, 1], 0, False], [[1, 0], 0, False], [[2, 0], 0, False], [[3, 0], 0, False], [[3, 1], 0, False], [[3, 2], 0, False], [[2, 2], 100, True]]
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(28)update()
    -> state = str(reward[0])
    (Pdb) p state
    [0, 0]
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(29)update()
    -> if state not in visit_state:
    (Pdb) p state
    '[2, 2]'
    (Pdb) p self.value_table
    defaultdict(<class 'float'>, {'[0, 0]': 12.843038729477103, '[0, 1]': 3.6010347623049843, '[1, 0]': 45.739579013968516, '[0, 2]': 0.38742048900000015, '[1, 1]': 4.629255057991681, '[2, 0]': 50.83890751506551, '[2, 2]': 89.2397438477723, '[3, 1]': 66.85889829029591, '[2, 1]': -19.99607765407679, '[3, 0]': 60.06357418599044, '[4, 0]': 8.024660160565901, '[3, 2]': 80.26033687696258, '[4, 1]': 5.96080478456966, '[3, 3]': 6.970546731858152, '[4, 2]': 6.029123110357315, '[3, 4]': 1.3056390000000002, '[2, 4]': 0.47829690000000014, '[4, 4]': 0.5904900000000002, '[2, 3]': 0.81, '[4, 3]': 0.5314410000000002, '[1, 3]': 0.0, '[1, 4]': 0.0, '[1, 2]': 0.0, '[0, 3]': 0.0})
    

  • 스토리지의 모든 경우를 python permutation으로 구현

    스토리지의 모든 경우를 python으로 출력하기

    스토리지의 모든 경우를 python으로 구현하여, 모든 경우에 대한 행동할 값을 테이블로 작성이 가능하다. 이후 중복된 데이터를 엑셀로 정리가 가능하다. 각 경우에 대한 값을 입력으로 보고, 어떻게 행동할 지를 출력으로 임의로 작성하면 X->Y의 관계를 가르칠 수 있다.

    스토리지의 상황

    어느셀에서대차를뺄것인가

    라인 프로그램을 작성하다 보면, 모든 경우에서 어는 부분을 처리해주는 부분이 없어 중단되는 상황이 있다. 셔틀과 스토리지로 구성된 라인이 있다고 할 때, 마지막 공정이 대차를 아래와 같이 세가지 경우 중 하나로 처리할 수 있다.

    1. 생산 데이터와 마지막 공정 대차가 일치하여 시작 공정으로 다시 돌림
    2. 생산 데이터와 마지막 공정 대차가 같지 않아, 스토리지에서 새로운 대차를 빼고, 마지막 대차는 빈 셀로 넣기
      • 간단하게 만들기 위해서, 스토리지에 생산 데이터의 대차가 있어도 라인에 있는 대차를 먼저 사용

    3. 생산 데이터와 마지막 공정 대차가 같지 않아, 다음 턴에서 맞을 것으로 보고 마지막 대차를 시작 공정으로 다시 돌림

    Python Permutation으로 구현하기

    모든 경우에 대한 데이터를 파악하고, 사용자가 엑셀에서 함수를 데이터를 입력하다면 쉽게 입력/출력 테이블을 만들 수 있다. 모든 경우를 엑셀로 출력하는 vba가 있으나, 사용하기 복잡해 보인다. stack overflow 인터넷의 누군가 python으로 간단하게 구현할 수 있는 코드를 작성하여 참조할 수 있도록 정리했다. 왜 pyhon을 많은 사람들을 쓰는지 이해가 된다.

    import itertools
    
    #all cell are full
    mylist8 = ["UM","UM","UM","UM","UM","UM","UM"]
    mylist1 = ["QF","UM","UM","UM","UM","UM","UM"]
    mylist2 = ["QF","QF","UM","UM","UM","UM","UM"]
    mylist3 = ["QF","QF","QF","UM","UM","UM","UM"]
    mylist4 = ["QF","QF","QF","QF","UM","UM","UM"]
    mylist5 = ["QF","QF","QF","QF","QF","UM","UM"]
    mylist6 = ["QF","QF","QF","QF","QF","QF","UM"]
    mylist7 = ["QF","QF","QF","QF","QF","QF","QF"]
    
    #1 cell is empty
    mylist9 = ["UM","UM","UM","UM","UM","UM","Vacant"]
    mylist10 = ["QF","UM","UM","UM","UM","UM","Vacant"]
    mylist11 = ["QF","QF","UM","UM","UM","UM","Vacant"]
    mylist12 = ["QF","QF","QF","UM","UM","UM","Vacant"]
    mylist13 = ["QF","QF","QF","QF","UM","UM","Vacant"]
    mylist14 = ["QF","QF","QF","QF","QF","UM","Vacant"]
    mylist15 = ["QF","QF","QF","QF","QF","QF","Vacant"]
    
    #2 cell are empty
    mylist16 = ["UM","UM","UM","UM","UM","Vacant","Vacant"]
    mylist17 = ["QF","UM","UM","UM","UM","Vacant","Vacant"]
    mylist18 = ["QF","QF","UM","UM","UM","Vacant","Vacant"]
    mylist19 = ["QF","QF","QF","UM","UM","Vacant","Vacant"]
    mylist20 = ["QF","QF","QF","QF","UM","Vacant","Vacant"]
    mylist21 = ["QF","QF","QF","QF","QF","Vacant","Vacant"]
    
    #3 cell are empty
    mylist22 = ["UM","UM","UM","UM","Vacant","Vacant","Vacant"]
    mylist23 = ["QF","UM","UM","UM","Vacant","Vacant","Vacant"]
    mylist24 = ["QF","QF","UM","UM","Vacant","Vacant","Vacant"]
    mylist25 = ["QF","QF","QF","UM","Vacant","Vacant","Vacant"]
    mylist26 = ["QF","QF","QF","QF","Vacant","Vacant","Vacant"]
    
    #4 cell are empty
    mylist27 = ["UM","UM","UM","Vacant","Vacant","Vacant","Vacant"]
    mylist28 = ["QF","UM","UM","Vacant","Vacant","Vacant","Vacant"]
    mylist29 = ["QF","QF","UM","Vacant","Vacant","Vacant","Vacant"]
    mylist30 = ["QF","QF","QF","Vacant","Vacant","Vacant","Vacant"]
    
    #5 cell are empty
    mylist31 = ["UM","UM","Vacant","Vacant","Vacant","Vacant","Vacant"]
    mylist32 = ["QF","UM","Vacant","Vacant","Vacant","Vacant","Vacant"]
    mylist33 = ["QF","QF","Vacant","Vacant","Vacant","Vacant","Vacant"]
    
    #6 cell are empty
    mylist34 = ["UM","Vacant","Vacant","Vacant","Vacant","Vacant","Vacant"]
    mylist35 = ["QF","Vacant","Vacant","Vacant","Vacant","Vacant","Vacant"]
    
    
    myPermutation1 = itertools.permutations(mylist1)
    myPermutation2 = itertools.permutations(mylist2)
    myPermutation3 = itertools.permutations(mylist3)
    myPermutation4 = itertools.permutations(mylist4)
    myPermutation5 = itertools.permutations(mylist5)
    myPermutation6 = itertools.permutations(mylist6)
    myPermutation7 = itertools.permutations(mylist7)
    myPermutation8 = itertools.permutations(mylist8)
    myPermutation9 = itertools.permutations(mylist9)
    myPermutation10 = itertools.permutations(mylist10)
    myPermutation11 = itertools.permutations(mylist11)
    myPermutation12 = itertools.permutations(mylist12)
    myPermutation13 = itertools.permutations(mylist13)
    myPermutation14 = itertools.permutations(mylist14)
    myPermutation15 = itertools.permutations(mylist15)
    myPermutation16 = itertools.permutations(mylist16)
    myPermutation17 = itertools.permutations(mylist17)
    myPermutation18 = itertools.permutations(mylist18)
    myPermutation19 = itertools.permutations(mylist19)
    myPermutation20 = itertools.permutations(mylist20)
    myPermutation21 = itertools.permutations(mylist21)
    myPermutation22 = itertools.permutations(mylist22)
    myPermutation23 = itertools.permutations(mylist23)
    myPermutation24 = itertools.permutations(mylist24)
    myPermutation25 = itertools.permutations(mylist25)
    myPermutation26 = itertools.permutations(mylist26)
    myPermutation27 = itertools.permutations(mylist27)
    myPermutation28 = itertools.permutations(mylist28)
    myPermutation29 = itertools.permutations(mylist29)
    myPermutation30 = itertools.permutations(mylist30)
    myPermutation31 = itertools.permutations(mylist31)
    myPermutation32 = itertools.permutations(mylist32)
    myPermutation33 = itertools.permutations(mylist33)
    myPermutation34 = itertools.permutations(mylist34)
    myPermutation35 = itertools.permutations(mylist35)
    
    #myCombination = itertools.combinations(mylist, 2)
    
    for i in myPermutation1:
        print i
    for i in myPermutation2:
        print i
    for i in myPermutation3:
        print i
    for i in myPermutation4:
        print i
    for i in myPermutation5:
        print i
    for i in myPermutation6:
        print i
    for i in myPermutation7:
        print i
    for i in myPermutation8:
        print i
    for i in myPermutation9:
        print i
    for i in myPermutation10:
        print i
    for i in myPermutation11:
        print i
    for i in myPermutation12:
        print i
    for i in myPermutation13:
        print i
    for i in myPermutation14:
        print i
    for i in myPermutation15:
        print i
    for i in myPermutation16:
        print i
    for i in myPermutation17:
        print i
    for i in myPermutation18:
        print i
    for i in myPermutation19:
        print i
    for i in myPermutation20:
        print i
    for i in myPermutation21:
        print i
    for i in myPermutation22:
        print i
    for i in myPermutation23:
        print i
    for i in myPermutation24:
        print i
    for i in myPermutation25:
        print i
    for i in myPermutation26:
        print i
    for i in myPermutation27:
        print i
    for i in myPermutation28:
        print i
    for i in myPermutation29:
        print i
    for i in myPermutation30:
        print i
    for i in myPermutation31:
        print i
    for i in myPermutation32:
        print i
    for i in myPermutation33:
        print i
    for i in myPermutation34:
        print i
    for i in myPermutation35:
        print i

    python에 익숙하면 더 세련된 형태로 할 수 있겠으나, 일회성으로 하기 때문에 그냥 노가다로 해결했다.

    엑셀로 중복 데이터 제거

    출력 결과는 중복되는 데이터들이 많은데, 간단한 함수로 중복을 제거할 수 있다. 이를 그냥 입력으로도 사용 가능하나, 중복되는 데이터는 정확도가 떨어지므로, 정리해 주는게 맞아 보인다.
    아래는 정리한 테이블의 데이터 셋이다.
    170217datasetv4

  • 텐서플로우 링크 모음

    iris 분류 방법
    http://tneal.org/post/tensorflow-iris/TensorFlowIris/

  • matplotlib를 터미널 환경에서 사용하기

    집에 있는 서버에 tensorflow가 설치되어 있는데, ssh로 접속하여 실행한다. 결과물이 텍스트같이 터미널로 표시되면 볼수 있는데 그림으로 표시되면 터미널에 표시가 안된다.

    Traceback (most recent call last):
      File "imagetran.py", line 13, in <module>
        plt.imshow(image)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3010, in imshow
        ax = gca()
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/pyplot.py", line 928, in gca
        return gcf().gca(**kwargs)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/pyplot.py", line 578, in gcf
        return figure()
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
        **kwargs)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 46, in new_figure_manager
        return new_figure_manager_given_figure(num, thisFig)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 53, in new_figure_manager_given_figure
        canvas = FigureCanvasQTAgg(figure)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 76, in __init__
        FigureCanvasQT.__init__(self, figure)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py", line 68, in __init__
        _create_qApp()
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py", line 138, in _create_qApp
        raise RuntimeError('Invalid DISPLAY variable')
    RuntimeError: Invalid DISPLAY variable
    

    마지막에 Invalid DISPLAY variable이라고 뜨고 죽는데 아래와 같이 변경하면 된다.

    import matplotlib
    matplotlib.use('Agg')
    
    import tensorflow as tf
    import matplotlib.image as mpimg
    import matplotlib.pyplot as plt
    
    # First, load the image
    filename = "./MarshOrchid.jpg"
    image = mpimg.imread(filename)
    
    # Print out its shape
    #print(image.shape)
    
    
    plt.imshow(image)
    plt.savefig('test.jpg')
    
    
    # Create a TensorFlow Variable
    x = tf.Variable(image, name='x')
    model = tf.initialize_all_variables()
    with tf.Session() as session:
    	x = tf.transpose(x, perm=[1, 0, 2])
    	session.run(model)
    	result = session.run(x)
    print(result.shape)
    mpimg.imsave('test.jpg',image)
    mpimg.imsave('test.jpg',result)
    

    디스플레이가 있는 PC에서 다운로드해 보면 된다..이게 웹으로 보내면 좋은데, 아직 그런게는 없나보다. stack overflow의 여기에서 답을 얻었다.

    질문은..
    Generating a PNG with matplotlib when DISPLAY is undefined

    시스템에 따라 설정파일을 바꾸면 귀찮게 안써도 되는데, 나의 경우 어디에 설정파일이 있는지 몰라 그냥 써야겠다.