본문 바로가기

CS/etc.

RNN을 이용한 SRCNN 만들기

RNN은 다들 뭔지 대충 알거라고 생각한다. 간략히 설명하자면 Recurrent NN으로, weight parameter를 재사용하며, hidden state의 결과가 다시 hidden state로 들어가기 때문에 Recurrent가 붙여졌다고 (수업시간에 졸면서) 들었다

딥러닝 수업을 들으면서 교수님이 SRCNN(Super Resolution : 저화질 -> 고화질로 만드는 네트워크) 를 구현하게 하셨다. 처음에는 간단하게 CNN을 이용했고, 그 다음으로 이번엔 tf.nn.rnn_cell 안 쓰고 RNN으로 SRCNN 구현하기를 시키셨다.

교수님이 주셨던 structure는 다음과 같다.

원래 짜놨던 거에서 variable_scope을 이용해 variable들을 reuse할 수 있게만 해주면 되었고, layer도 그냥 그 variable들 이용해서 3개씩 3번만 돌리게 하면 됐다. 수정되는 코드가 별로 없어 금방 구현했는데 이게 당최 돌아가지가 않아서 미치는 줄 알았다. 

매번 돌리고 돌려도 다음과 같은 에러가 떴다.

AbortedError (see above for traceback): Operation received an exception:Status: 5, message: could not create a view primitive descriptor, in file tensorflow/core/kernels/mkl_slice_op.cc:435
         [[node Train/gradients/rnn_cell_3/concat_grad/Slice_1 (defined at RNN.py:103) ]]

이 에러가 어디서 났는지 해서 Trace back을 보는데

...which was originally created as op 'rnn_cell_3/concat', defined at:
  File "RNN.py", line 203, in <module>
    srcnn = SRCNN(sess)
  File "RNN.py", line 18, in __init__
    self.build_model()
  File "RNN.py", line 69, in build_model
    x2 = tf.concat([self.images,self.predicted2],3)

이렇게 concat에서 자꾸 에러가 났다는 거다!!! 그래서 reuse가 뭐가 잘못되서 predicted 2번째 거가 제대로 생성이 안된건가?? 해서 이것저것  수정해봤는데 여전히 같은 에러가 떴다.

구글링을 진짜 오지게 한 결과 "python과 tensorflow의 버전이 너무 높아서 그런 거야" (그 때 내 conda venv는 python=3.7, tensorflow=1.13.0 버전을 가지고 있었다.)라는 한 중국인의 답변을 보고 python=3.6, tensorflow=1.12.0인 venv 를 다시만들어서 돌려봤더니 엄청 잘 돌아간다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ아니 뭐임?

뭐야.. 뭐 버전 때문에 안돌아가... 나는 몇일동안 미치는 줄 알았는디....

하여튼 잘 된다! 나 같은 경우를 겪을 사람들이 또 있을까..? 싶지만 혹시나 해서 포스팅 해봤다.

'CS > etc.' 카테고리의 다른 글

Conventional Commits  (5) 2020.04.21
HTML 꿀팁  (3) 2019.08.29
Learning Depth Map From Monocular Videos using Direct Methods (CVPR 2018)  (129) 2019.05.28