인공지능 연구실에서 석사과정을 마쳤다. 석사 과정 때 지문인식과 얼굴인식 관련 연구를 했는데, 당시 첫번 째 연구 목표가 "생체인식 기능을 스마트 카드에 이식하는 것" 이었다. 두번 째는 얼굴과 지문을 잘 대표할 수 있는 양질의 feature를 뽑아 내는 것, 마지막wish 수준의 주제가 뽑아낸 feature간 유사도를 잘 판별 할 알고리즘을 찾는 것이었다. 지금와서 생각해보면 운이없게도 연구목표를 잘못 잡았다는 생각이 든다. 지금은 스마트카드와 아무 상관 없는 일을 하고 있는데...

(사실 목표를 잘 못 잡아서가 아니라, LoL때문에 더 많은 시간을 허비했다..)

 당시에 다른 연구생들은 계량기 숫자인식 프로젝트를 하면서 여러 분류기를 다뤘다. 그 중 하나가 신경망이었는데, 지도교수님께 뭘 물어보기만 하면 "응.. 신경방에다가 돌려봐"라고 하셨던 기억이 난다. 당시에는 feature base의 알고리즘이 주류를 이룰때라 "뭐만 하면 신경망이구만.. 그렇게 아무데나 갔다 붙여도 되나.." 하고 생각했다.

 그런데 그것이 실제로 일어났다... 이제는 신경망이 아니라 Deep Learning 이라는 이름을 달고 나와 세상을 바꿔 나가고 있고, 오만간데 심층신경망을 적용 했다는 뉴스가 나온다. 그래서 뒤늦게 나마 학부 때 잠깐 배웠던 기억을 떠올려 요즘 다시 deep learning을 공부하고 있는데 너무 어렵다..뭐 하나 배우면 다른걸 까먹고.. 원래 CS가 다 그렇지만, 수학이 너무 많다 수학공부좀 잘 해 놓을껄....

 여튼 그래서 여디가다 공부한걸 정리 해보려고 한다. 나중에 휙 보고 다시 기억이 떠올랐으면 좋겠다. 아울러 혼자 끙끙대며 공부하는 다른 사람들에게도 작은 도움이 되었으면 좋겠다. 아무리 구글링을 해도 쓸모없는 정보만 나올 때의 절망감을 잘 안다. 나도 공부하는 처지라 항상 정답은 아니겠지만, 혼자 끙끙대고 있는누군가에게 작은 도움이나마 된다면 이 글을 올리는데 큰 보람이 될 것 같다.

'이론 > 신경망' 카테고리의 다른 글

He 초기화 구현 in tensorflow  (0) 2018.09.19
tensorboard 간단 요약  (0) 2018.09.13
인공신경망과 학습  (0) 2018.03.05
전미분, 편미분, Gradient에 대해  (2) 2018.02.28
공부할 때 참고한 자료들  (0) 2018.02.27
Posted by 굿쟌
,

여러 PC를 사용하는 프로그램에서 PC를 제어하기 위해, TCP 서버로 XML을 교환하려고 했다.

xml문을 전달하려고 하니, xml문서를 버퍼에 저장하고 반대로 버퍼에서 xml문서를 만드는 기능이 필요했다.

다행히 tinyxml2는 버퍼에 xml을 쓰거나, 버퍼의 xml을 읽어서 XMLDocument로 만드는 기능을 지원한다.  

 

아래 예제는 m_ServerInfos에 저장된 정보를 xml로 만들어 const char*로 받고,

반대로 const char*로부터 XMLDocument를 만드는 예제를 보여준다.

 

마지막 세줄을 제외하고는 그냥 xml 문서를 만드는 구문이다.

마지막 세줄이 버퍼에 xml을 출력하는 구문인데, XMLPrinter를 하나 만들어 여기다가 doc를 출력하면 된다.

그 다음 XMLPrinter의 CStr( )을 호출하면 xml문서의 const char* 포인터를 받을 수 있다.

문자열의 길이는 XMLPrinter::CStrSize를 호출하면 알 수 있다.

반대로 버퍼속의 xml문서를 객체로 만들기 위해서는 tinyxml2::XMLDocument::parse를 하면된다.

첫번째 파라미터는 xml문서의 포인터이고 두번째 파라미터는 문서 문자열의 길이다.

파싱된 xml로부터 이전의 IP주소가 정상적으로 출력되는 것을 볼 수 있다.

 

끝!

Posted by 굿쟌
,

컴퓨터 여러대로 동작하는 프로그램에서 다른 서버의 IP 정보를 XML로 저장해 두고 싶었다.

아래와 같이 TestEnvironment라는 Root element아래 서버정보를 기록해서 파일로 만들었다.

위 XML파일을 만드는데 사용한 코드는 아래와 같다.

어려울 것 없다.

새 element를 doc로 만들고, 상위 element의 LinkEndChild를 호출 해 만들어 놓은 element추가하면 된다.

attribute를 추가하고 싶으면 해당 elelment의 setAttribute를 호출 하면 된다.

비슷하게 text를 추가하고 싶으면 setText를 호출하면 된다.

 

XML파일을 파싱 할 때도 거의 비슷하다.

차이점이라면, element의 attribute를 불러 올 때 원하는 자료형으로 가져올 수 있다.

혹은 그냥 text로 받아오는 것도 가능하다.

위 코드에서, for문은 다음 sibling이 없을때 까지, 모든 sibling의 text와 "idx" atrribute를 받아온다.

NextSiblingElement함수를 호출하면 해당 XMLElement와 동일 레벨의 sibling들을 찾아올 수 있다.

만약 현재 xmlElement가 마지막 element라면 NextSiblingElement는 NULL을 반환한다.

 

Posted by 굿쟌
,