글 작성자: 만렙개발자

커밋하기 위해 쉬운 issue 를 하이에나처럼 찾습니다.

뭔가 기여한다는 기분이 참 좋더라구요.

 

아무래도 저는 케라스를 많이 쓰고 있다보니, 케라스에 관심이 많이 갑니다.

케라스는 인공신경망을 위한 python 오픈 소스 라이브러리입니다. tensorflow, pytorch와 같이 많이 사용되고 있으며, 딥러닝의 시대에서 매우 중요한 프레임워크 중 하나라고 생각합니다.

 

이전에는 오타 교정이나, 버전문제로 생겼던 문제들을 수정하는데 그쳤지만,

이번에는 작동하는 방식에 관련된 부분을 수정하고 있다보니 신이나서 블로그까지 쓰며 공유합니다!

한국의 개발자들도 오픈소스에 많이 기여할 수 있도록 장려하는 의미있는 글이 되기를..

 

시작은 이 issue 입니다.

https://github.com/keras-team/keras/issues/13637

 

"classes" not working on flow_from_dataframe? · Issue #13637 · keras-team/keras

the classes parameter works on flow_from_directory but not flow_from_dataframe? testing code: import keras from keras.preprocessing import image import pandas as pd gen = image.ImageDataGenerator()...

github.com

keras preprocssing 함수 중에 데이터 제네레이터를 이용해 데이터를 가져오는 flow_from_dataframe과 flow_from_directory가 있는데, 두 함수가 classes를 입력받는 방식이 다르게 작동한다는 것이 문제였습니다.

 

ref: https://github.com/keras-team/keras/issues/13637

issue를 올린 사람이 테스트한 결과입니다. 클래스 이름 'B', 'A',를 넣으면, flow_from_directory는 정렬하지 않고 'B'부터 레이블링을 0으로 시작하지만, flow_from_dataframe은 정렬하고 시작하여 무조건 'A'부터 레이블링을 0으로 시작합니다.

 

두 함수 자체가 다른 방법으로 데이터를 가져오기 때문에 어디선가 문제가 생겼을까 찾아보았습니다.

 

https://github.com/keras-team/keras-preprocessing/blob/9a836c25177e1be5940e1b2ab19fdb383225c32a/keras_preprocessing/image/dataframe_iterator.py#L243

 

keras_preprocssing.image.dataframe_iterator의 243번째 라인에서 set함수를 호출하기 때문에 정렬이되는 것을 발견하였습니다. 입력된 class 이름을 유니크하게 하면서, 정렬하지 않고 순서를 그대로 유지하는 방법은 OrderedDict를 사용하는 것이 가장 효과적이라고 판단이 되어 코드를 바로 수정하고 커밋하여 PR까지 했습니다.

 

https://github.com/keras-team/keras-preprocessing/pull/270

 

To solve issue #13637 in keras repo by seriousran · Pull Request #270 · keras-team/keras-preprocessing

Summary Set function sort 'classes' To solve it, use OrderedDict Related Issues keras-team/keras#13637 PR Overview This PR requires new unit tests [y/n] (make sure tests are included) Th...

github.com

작동에 'error'가 있는 것은 아니라는 핵심을 말하여 closed 되었지만, 'differently' 작동하는 것에대해 좀 더 논의가 되고 있는 상황이고, 현재 test 단계에 있습니다.

 

평소에 PEP8을 지키지 않았었는데, keras의 travis가 PEP8을 검사하는 항목이 있어서, 추가적으로 수정하여 관련된 항목들은 모두 pass한 상태입니다!

 

https://travis-ci.org/keras-team/keras-preprocessing/builds/634016829?utm_source=github_status&utm_medium=notification

 

Travis CI - Test and Deploy Your Code with Confidence

 

travis-ci.org

 

http://pep8online.com/