• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

Tensorflow 2.x로 만든 모델의 중간 출력값들을 Numpy array로 변환하는 방법

22.03.08 17:49 작성 조회수 984

0

안녕하세요! 공부를 하다가 중간에 궁금한 점이 생겨 질문드립니다! Tensorflow 2.x 버전으로 만든 모델을 학습(fit) 시킨 후에 중간 레이어들의 출력값들을 관찰하고 싶은데요! 그래서 tf.Tensor 에서 Numpy array 로 변환시켜서 보려고 했는데, 어려움이 생겨 질문드립니다. 우선 아래 코드를 보시면 하나는 그냥 tf.Constants 로 정의한 텐서이고 나머지 하나는 모델의 중간 레이어 출력값의 텐서입니다. 

그런데 두 개 중 tf.Constants 로 정의한 텐서는 numpy() 메소드를 활용해서 넘파이 배열로 변환이 가능한데, 모델의 중간 출력값 텐서는 numpy() 메소드가 존재하지 않더라구요.. 그래서 두 개의 타입을 비교해보니 아래 처럼 서로 다른 클래스 이더라구요.. 

아래 그림을 보시면 아시겠지만 tf.Constants로 정의한 텐서는 tensorflow.python.framework.ops.EagerTensor 라는 클래스인 반면, 모델 중간 레이어의 출력값 텐서 클래스는 tensorflow.python.framework.ops.Tensor 입니다.

구글링을 해보니 비슷한 문제를 겪은 질문들이 있었지만 명쾌한 해결책을 찾을 수는 없었습니다..

혹시 tensorflow.python.framework.ops.Tensor 클래스를 갖는 텐서를 넘파이로 변환하는 방법을 아시는지 문의드립니다!

답변 1

답변을 작성해보세요.

1

안녕하십니까, 

Eager 모드가 아니면 numpy로 변환되지 않습니다. Graph 모드에서 사용되는 Tensor는 실행중에 numpy로 변환 될 수 없습니다. 

학습이 완료된 model이 있으면 해당 모델에서 layer를 찾고 해당 layer의 weight를 볼수는 있습니다. 

가령 아래와 같이 모델을 만들고 학습이 완료 되었다면

model = tf.keras.Sequential([

  input_layer,

  hidden_layer,

  output_layer

  ])

 

이들중 hidden_layer의 weight값을 보고 싶다면 hidden_layer.get_weights()[0] 

감사합니다. 

답변 감사합니다! 그래서 조금 더 찾아 보았더니.. 중간 결과값들을 일일이 확인하려면 확인하려는 중간 레이어를 임시로 output 에 놓고 하면서 일종의 '트릭(?)'을 이용할 수는 있다고 하네요..