
ã¯ãããã®ãããªèŠåºãã¯ããŸãæå³ããããŸããã®ã§ããã«ããã«è¡ããã©ããããšãŸã èããŠãã人ã®ããã«ããã€ãã®èª¬æãããŸãã
Shark-æ©æ¢°åŠç¿ïŒæ©æ¢°åŠç¿ïŒã®C ++ã©ã€ãã©ãªã®ã»ãããã€ãŸãç·åœ¢ããã³éç·åœ¢æé©åããã¥ãŒã©ã«ãããã¯ãŒã¯ãæåž«ããããªãã®åŠç¿ãé²åçã¢ã«ãŽãªãºã ãªã©ã ãã詳现ãªèª¬æã¯
ããããžã§ã¯ãã®ãŠã§ããµã€ãã§èŠã€ããããšãã§ããŸãã
次ã®è³ªåãžã®åçã«èå³ãããå Žå
- iOSçšã®éçã©ã€ãã©ãªãæ§ç¯ããæ¹æ³ã¯ïŒ
- iOSçšã®ãã¬ãŒã ã¯ãŒã¯ãäœæããæ¹æ³ã¯ïŒ
- CocoaPodsãä»ããŠiOSããã³OSXãã¬ãŒã ã¯ãŒã¯ãå
¬éããæ¹æ³ã¯ïŒ
ããããããªãã¯ç«ã®äžã«ããŸãã
ã
ãªãã§ïŒ
ãiOSã«ãšã£ãŠäŸ¿å©ã§äŸ¿å©ãªã©ã€ãã©ãªãå¢ããããã«ããšç°¡åã«çããããšãã§ããŸããããå¥ã®çç±ããããŸããã iOSåãã®ããŒãã²ãŒã ã®éçºäžã«ãæ©æ¢°åŠç¿ã䜿çšããŠã察æŠçžæã®äººå·¥ç¥èœïŒAIïŒãéçºãããã£ãã®ã§ãã
èšç»ã¯åçŽã§ãæåã«æ°äžã®ã²ãŒã ãéããŠãã¥ãŒã©ã«ãããã¯ãŒã¯ãé§åããŠAIããã¬ãŒãã³ã°ããMac OSã§åŒ·åãªããŒããŠã§ã¢ã§å®è¡ããŠããããã¬ãŒãã³ã°ããããããã¯ãŒã¯ãå©çšããŠiPhone / iPadã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããŸãã
brew install shark
ã䜿çšããŠSharkããŒãžã§ã³2.3.4ããããŒã«ã€ã³ã¹ããŒã«ã§ããå Žåã®ã¿ãèšç»ã®æåã®éšåã¯æ¯èŒçç°¡åã«å®è£
ã§ããŸããã
ããã§ãèšäºãã©ã€ãã©ãª2.3.4ã®ããŒãžã§ã³ã«é¢ãããã®ã§ããããšã«æ³šæããŠãã ããã ãããžã§ã¯ãèªäœã¯ãã§ã«2.3.4ãã倧ããå€ããŠãããçŸåšããŒã¿ããŒãžã§ã³3.0ãå©çšå¯èœã§ã ã æ°ããããŒãžã§ã³ã®ã³ãŒãã¯å€§å¹
ã«åèšèšããããµãŒãããŒãã£ã©ã€ãã©ãªãšããŠboostã䜿çšããŠãããã ãç¹ã«iOSã®ã³ã³ããã¹ãã§ã¯ãããã¯ãŸã£ããç°ãªã話ã§ãã
èšç»ã®2çªç®ã®éšåã«æ»ããŸãããã ãã¬ãŒãã³ã°åŸãç§ã¯ãŸã ãã¥ãŒã©ã«ãããã¯ãŒã¯ä¿æ°ã®ãã¡ã€ã«ãæã«ããŠããŸãã ãã®ãã¡ã€ã«ã®åœ¢åŒã¯ã©ãã«ãèšè¿°ãããŠããŸããïŒãŸãã¯æ€çŽ¢ãäžååã§ãïŒã®ã§ãèªã¿åããšäœ¿çšã®æãå®äŸ¡ãªæ¹æ³ã¯åãSharkã䜿çšããããšã§ããã€ãŸããã©ã€ãã©ãªãiOSã«ç§»æ€ããå¿
èŠããããŸãã
ã©ããã£ãŠïŒ
ç°¡åãªçãã¯ããœãŒã¹ãååŸããŠã³ã³ãã€ã«ããããšã§ãã詳现ãªçãã¯ãHabréã®èšäºã§ãã
æ確ãªããžãã¹ãHabrã§æžãåã«ãç§ã¯æåã«ã©ã€ãã©ãªãçµã¿ç«ãŠã
GitHubã®ãªããžããªã®åœ¢ã§ãã®ãã¹ãŠãèšèšããŸããã ãã®ãããããããããããããã«ããã«ãã¹ã¯ãªããã®ã³ãŒãã䜿çšããŠæçš¿ã«ã·ãŒãºãã³ã°ãè¡ããŸãã
ããã»ã¹å
šäœã次ã®ã¹ãããã«åããããšãã§ããŸã
- ãœãŒã¹ã³ãŒããããŠã³ããŒããã
- ãœãŒã¹ã³ãŒãã«ããããåœãŠã
- æ§æããã³æ§ç¯
- ãåããã©ã€ãã©ãªãäœæãã
- ãã¬ãŒã ã¯ãŒã¯ã«ããã¯ãã
- CocoaPodsãžã®æçš¿
ã¯ããã€ãŸããiOSããã€ã¹ããã³ã·ãã¥ã¬ãŒã¿ãŒïŒããã³OSXã®åå¥ïŒã®éçºçšã«ã倪ããïŒã倪ãããŸãã¯ã倪ããïŒéçã©ã€ãã©ãªãŒãåéããã ãã§ãªãããã¹ãŠããã¬ãŒã ã¯ãŒã¯ãšããŠæŽçãã
CocoaPodsããã¢ã¯ã»ã¹ã§ããããã«ããŸãã
ããã§ã¯ãäžæ©äžæ©å§ããŸãããã
ãœãŒã¹ã³ãŒããããŠã³ããŒããã
ããã§ã¯ãã¹ãŠãç°¡åã§ããããŸã詳现ã«èª¬æããããšã¯ãããŸããã®ã§ãåã¿ãããããã¢ãŒã«ã€ããããŠã³ããŒãããŠè§£åãããããªãããã«ããŸãã
ããŠã³ããŒãããŠè§£åãã VERSION=2.3.4 SHARK_ZIP=shark-$VERSION.zip
ãœãŒã¹ã³ãŒãã«ããããåœãŠã
åœåãã³ãŒãã¯gcc 4.2ã䜿çšããŠéçºãããŸããããclangããŒãžã§ã³5.0ã䜿çšããŠã³ã³ãã€ã«ããããšããŠããŸãã gcc 4.2ã®ãªãªãŒã¹ä»¥æ¥ãã³ã³ãã€ã©ãšC ++æšæºã¯å€§ããé²æ©ãããããclangãäžéšã®ã³ãŒãã奜ãŸãªãããšã¯é©ãããšã§ã¯ãããŸããã ä¿®æ£ãã以å€ã«äœãæ®ã£ãŠããªããããªãã¡ ããããåé¡ã®ããã³ãŒãã
ããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒ
åããŠãã³ã³ãã€ã©ã¯
ReClaM/EarlyStopping.cpp
78è¡ç®ã§ã€ãŸãã
ReClaM/EarlyStopping.cpp
ã
EarlyStopping::EarlyStopping(unsigned sl = 5)
EarlyStopping
ã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¯åäžã®åŒæ°ïŒ
unsigned sl
ïŒãããããã®åŒæ°ã«ã¯ããã©ã«ãå€ïŒ
5
ïŒãæå®ãããŠããŸãã ãããã£ãŠããã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«ãªããŸããããŸãããããèãããŠã-gcc 4.2ã¯èšããŸãããclangã¯ããã«ã€ããŠå®å
šã«ç°ãªãæèŠãæã£ãŠããŸãã
StackOverflow ã§ãã®ãšã©ãŒã®
説æãèŠã€ããããšãã§ããŸãã
ãé¡ããä¿®æ£ããŸããã€ãŸãã ããã©ã«ãå€ãåé€ããã ãã§ãã
EarlyStopping::EarlyStopping(unsigned sl)
ã¡ãã£ãšåŸ
ã£ãŠïŒ -ããªããèšã-ãã®ã³ã³ã¹ãã©ã¯ã¿ãåŒæ°ãªãã§ã©ã€ãã©ãªã³ãŒãã®ã©ããã§äœ¿çšãããŠããå Žåã¯ã©ããªããŸããïŒ
絶察ã«å
¬æ£ãªè³ªåã 幞ããªããšã«ããã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ã³ãŒãã®ä»ã®ã©ãã§ãïŒæ瀺çãŸãã¯æé»çã«ïŒåŒã³åºãããŸãããã€ãŸãããã®ãããªå€æŽã«ãã害ã¯ãããŸããããã³ãŒãã§åŒã³åºããšãã¯æ³šæããŠ
sl
å€ãæž¡ãå¿
èŠããããŸã
finiteã¯iOSã§ã¯äœ¿çšã§ããŸãã
次ã®ãšã©ãŒã¯ãããã€ã¹ãšã·ãã¥ã¬ãŒã¿ãŒã®äž¡æ¹ã§ãiOSã§
finite(x)
é¢æ°ã䜿çšã§ããªãïŒå«ãŸããªãïŒããšã§ãã ãã®åé¡ãžã®åç
§ã¯ãããšãã°
ãã¡ãã® Webã§èŠã€ããããšãã§ããŸãã
解決çã¯ã
isfinite(x)
é¢æ°ã䜿çšããããšã§ãã ããªããã»ããµãã¯ãã䜿çšããŠã
finite(x)
ã
isfinite(x)
finite(x)
ãšããŠåå®çŸ©ããŸããããè¡ãã«ã¯ã
SharkDefs.h
次ã®ã³ãŒããè¿œå ããŸã
SharkDefs.h #if defined(__APPLE__) && defined(__MACH__) #include <TargetConditionals.h> #if TARGET_IPHONE_SIMULATOR == 1 /* iOS in Xcode simulator */ #define finite(x) isfinite(x) #elif TARGET_OS_IPHONE == 1 /* iOS on iPhone, iPad, etc. */ #define finite(x) isfinite(x) // #define drem(x, y) remainder(x, y) #elif TARGET_OS_MAC == 1 /* OSX */ #endif #endif
ããã§ã®ããžãã¯ã¯ãApple OSã®1ã€ãã€ãŸã
__APPLE__
ããã³
__MACH__
å Žåã
TargetConditionals.h
ããããŒãã¡ã€ã«ãå«ããŠããã
TARGET_IPHONE_SIMULATOR
ã
TARGET_OS_IPHONE
ããã³
TARGET_OS_MAC
å€ã確èªããiOSããã€ã¹ããã³ã·ãã¥ã¬ãŒã¿ãŒã®
finite(x)
ãåå®çŸ©ããŸãã
drem(x, y)
é¢æ°ãšãŸã£ããåãåé¡ã§ã
drem(x, y)
ã«çœ®ãæããå¿
èŠããããŸãã ãã ããShark
drem(x, y)
ã¯äœ¿çšããªããããããã¯åãªãæ
å ±ã®ã¡ã¢ã§ãã
FileUtilã®ä¿®æ£
次ã®ãšã©ãŒã¯ã
FileUtil
ã¢ãžã¥ãŒã«ãã€ãŸã
FileUtil.h
ãã¡ã€ã«ã«é¢é£ããŠããŸãã
æåã¯ãclangã¯
iotype
ãš
SetDefault
ã
ScanFrom
ããã³
PrintTo
ãèŠã€ããããšãã§ããŸããã åå空éïŒåå空éïŒã䜿çšããŠãã³ã³ãã€ã©ã«ãã³ããäžããŸãããã å¿
èŠã«å¿ããŠç°¡åãªäº€æãè¡ããŸã
iotype -> FileUtil::iotype SetDefault -> FileUtil::SetDefault ScanFrom -> FileUtil::ScanFrom PrintTo -> FileUtil::PrintTo
ãã®ãã¡ã€ã«ã®æåŸã®åé¡ã¯
io_strict
é¢æ°ã§ãããã®é¢æ°ã¯ã
io_strict
宣èšããã
scanFrom_strict
ããã³
printTo_strict
é¢æ°ãåŒã³åºããŸãã
解決çïŒ
io_strict
ããã¡ã€ã«ã®æåŸã«ç§»åããã ãã§åé¡ãããŸããã
double erfïŒdoubleïŒ throwïŒïŒ ;
Mixture/MixtureOfGaussians.cpp
ã³ã³ãã€ã«
Mixture/MixtureOfGaussians.cpp
ã次ã®ã³ãŒã
Mixture/MixtureOfGaussians.cpp
ãšããŠããŒã¯ãããŸãã
extern "C" double erf(double) throw();
extern "C"
宣èšã¯å
ã®ãããã¿ã€ããšäžèŽããŸããã
ãã®å Žåãåé¡ã¯
throw()
åé€ããããšã§è§£æ±ºãããŸãã
extern "C" double erf(double);
äžéšã®ä¿®æ£ã«ã€ããŠã¯ã throw()
ãåé€ãããªã©ã詳现ãªèª¬æãæäŸããŠããªãããšãèªèããŠããŸãã ã³ã¡ã³ãæ¬ã«ã³ã¡ã³ããããã ããã°ããããã§ãã
RandomVector this-> p
次ã®è¡ã¯ã
Mixture/RandomVector.h
72è¡
Mixture/RandomVector.h
ãã³ã³ãã€ã©ãŒã¯ã
p
ã©ã®ããã«
Mixture/RandomVector.h
ãããããŸããã ãŸãããã®è¡ã®ã³ãŒãã³ã¡ã³ãïŒ
// !!!
ïŒãèŠåãããŸãã
for (unsigned k = x.dim(0); k--;) { l += log(Shark::max(p(x[ k ]), 1e-100));
ã³ãŒããåæããçµæãããã¯éåžžã«
p
ã§ããã
RandomVector
ã¯ãã倱ããããã¡ãœãã
p
ã宣èšãã
RandomVar
ç¶æ¿ããŸãã
this->p
ã®æ§ç¯ã¯
this->p
ãŸãã
for (unsigned k = x.dim(0); k--;) { l += log(Shark::max(this->p(x[ k ]), 1e-100));
CMakeLists.txt
ææ°ã®ãããã¯ãã³ã³ãã€ã«ãšã©ãŒãšã¯é¢ä¿ãããŸããã
iOSçšã®ã©ã€ãã©ãªãååŸããããããã®ã©ã€ãã©ãªã¯éçã§ããå¿
èŠããããŸããããããžã§ã¯ãã¯ããã©ã«ãã§åçã©ã€ãã©ãªãæ§ç¯ããŸãã ç®çã®çµæãåŸãã«ã¯ã
CMakeLists.txt
ãã¡ã€ã«ã®1è¡ã眮ãæããŸãã
ADD_LIBRARY( shark SHARED ${SRCS} )
ååãšããŠããã®è¡ããSHAREDãã§çœ®ãæããããšã¯ã§ããŸããããåã«ãSTATICãã§å¥ã®è¡ãè¿œå ãããšãåçã©ã€ãã©ãªãšéçã©ã€ãã©ãªã®äž¡æ¹ãã³ã³ãã€ã«ãããŸãã
ããããé©çšãã
ãã¡ããããã®ããã»ã¹ãç¹°ãè¿ãããšã«ããå Žåãã³ãŒããæåã§éžæããããšã¯æå³ããããŸããã æéãšç¥çµãç¯çŽããããã«
ãæ¢è£œã®ãããããããŸãã
èå³ã®ããæ¹ã¯ããã®ãããã¯
diff
ãŠãŒãã£ãªãã£ã䜿çšããŠå
¥æãã
diff -crB shark_orig shark_patched > shark.patch
ãã®ããããé©çšããã«ã¯ããŠãŒãã£ãªãã£ãã¢ãã³ã·ã§ã³ã
patch
ã䜿çšããå¿
èŠããããŸã
SRC_DIR=src
æ§æããã³æ§ç¯
æåŸã«ããããã¯çµäºããŸãããã¢ã»ã³ããªã«çŽæ¥é²ãããšãã§ããŸãã
make
ã䜿çšããŠãããžã§ã¯ãããã«ãããŸãããã©ãããã©ãŒã ããšã«ãã¹ãŠãæ£ããæ§æããããã«ã®ã¿æ®ããŸã
cmake
ïŒconfigure makeïŒãŠãŒãã£ãªãã£ã¯ã
Makefile
ããã³
make
å¿
èŠãªä»ã®ãã¡ã€ã«ãäœæããã®ã«åœ¹ç«ã¡ãŸãã 次ã®ãã©ãããã©ãŒã ãšã¢ãŒããã¯ãã£ã®ããã«ãã©ã€ãã©ãªã3åæ§æããã³æ§ç¯ããå¿
èŠããããŸãã
- iOSããã€ã¹
armv7
ã armv7s
ã arm64
ã¢ãŒããã¯ã㣠- iOSã·ãã¥ã¬ãŒã¿ãŒ
i386
ããã³x86_64
- OSX-
x86_64
ã¯ããéèŠãªç¹ã¯ãXcode 5ã䜿çšããããšã§ãarmv6
ã¢ãŒããã¯ãã£ã®ãµããŒãã¯Xcode 5ããå
¬åŒã«åé€ãããããããŸã£ããèæ
®ããŸããã
iOSããã€ã¹ãšã·ãã¥ã¬ãŒã¿ãŒã®ã©ã€ãã©ãªã1ã€ã®ãåããã©ã€ãã©ãªãŒã«ããŒãžããŸãããããã®ã©ã€ãã©ãªãŒã¯ãäžèŠãªãžã§ã¹ãã£ãŒãªãã§ããã€ã¹ãšã·ãã¥ã¬ãŒã¿ãŒã®éçºã«åæã«äœ¿çšã§ããŸãã
Cmakeã®åºæ¬
ã ãã
cmake
ã ãã©ãããã©ãŒã ããšã«ã次ã®èšå®ã䜿çšããŠç°å¢ãé©åã«æ§æããå¿
èŠããããŸã
- C ++ã³ã³ãã€ã© ïŒ
CMAKE_CXX_COMPILER
ïŒ
ããã©ã«ãã¯/usr/bin/c++
clang++
ããXcodeããŒã«ãã§ãŒã³ã®clang++
ã䜿çšããå¿
èŠããããŸãã - C ++ã³ã³ãã€ã©ãã©ã° ïŒ
CMAKE_CXX_FLAGS
ïŒ
ãããã®ãã©ã°ã䜿çšããŠãå¿
èŠãªã¢ãŒããã¯ãã£ããã³ãã®ä»ã®éèŠãªã³ã³ãã€ã«ãªãã·ã§ã³ãèšå®ããŸãã - Cã³ã³ãã€ã© ïŒ
CMAKE_C_COMPILER
ïŒ
ããããªCã³ãŒãããªãã«ããããããããã®ãã©ã¡ãŒã¿ãŒãæ£ããæ§æããå¿
èŠããããŸãã - ã«ãŒãã·ã¹ãã ãã£ã¬ã¯ã㪠ïŒ
CMAKE_OSX_SYSROOT
ïŒ
ãã®èšå®ã«ãããéžæãããã©ãããã©ãŒã ã®ãã¹ãŠã®æšæºã·ã¹ãã ã©ã€ãã©ãªãæ¢ãå Žæãã³ã³ãã€ã©ã«æ瀺ããŸãã - ã€ã³ã¹ããŒã«æ¥é èŸ ïŒ
CMAKE_INSTALL_PREFIX
ïŒ
ãã®ãã©ã¡ãŒã¿ãŒã¯ãªãã·ã§ã³ã§ãã make install
ã³ãã³ãã§äœ¿çšãããŸãããããã¯è¡ããŸããã - ãã«ããžã§ãã¬ãŒã¿ãŒ ïŒ
-G
ãã©ã°ïŒ
ãã®ãã©ã°ã䜿çšãããšãå€ãã®ãã«ãã·ã¹ãã ã®ãããããéžæã§ããŸãã ç§ãã¡ã®å ŽåããUnix Makefilesããã€ãŸã cmake
䜿ãæ
£ããMakefile
cmake
çæãMakefile
ã Xcodeãããžã§ã¯ãã䜿çšããã®ã¯è«ççã§ããããã®æ¹æ³ã§ãã¹ãŠãçµã¿ç«ãŠãããšã¯ã§ããŸããã§ããã
Xcode Toolkit
ããŒã«ãã§ãŒã³ãšããçšèªã®æãæåãã翻蚳ã§ã¯ãªããããããŸãããããããŒã«ãã§ãŒã³ãããã確ãã«åªããŠããŸãã Xcodeã«ã¯ãå¿
èŠãªãã¹ãŠã®ããŒã«ïŒã³ã³ãã€ã©ãiPhone OS SDKããã³iPhone Simulator SDKã®ã©ã€ãã©ãªãªã©ïŒãå«ãŸããŠããŸãããã¡ãããXcodeãã€ã³ã¹ããŒã«ããå¿
èŠããããŸããåãããŒã«ïŒXcodeã³ãã³ãã©ã€ã³ããŒã«ïŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã Xcodeèšå®ãŸãã¯
xcode-select --install
ã䜿çšã
xcode-select --install
ã
次ã«ã
xcode-select
ã䜿çšããŠãå¿
èŠãªãã¹ãŠã®ããŒã«ãšãã£ã¬ã¯ããªãèŠã€ããŸãã
Mac OS X SDKã®å Žåã
cmake
ã¯ãã以äžã®æ瀺ãªãã«ã«ãŒãã·ã¹ãã ãã£ã¬ã¯ããªãèŠã€ããã®ã«ååãªã»ã©ã¹ããŒãã§ãã
ãã©ãããã©ãŒã ããšã«é çªã«æ¬¡ã«ã
iOSããã€ã¹ïŒiPhone OS SDKïŒbuild/ios
å¥ã®ãã©ã«ããŒã«åéããŸãã
ã³ã³ãã€ã©ã¯ãã§ã«èŠã€ãããŸããããC ++ã³ã³ãã€ã©ã®ãã©ã°ãå®çŸ©ããŸãã
armv7
ã
armv7s
ãããã³
arm64
ã¢ãŒããã¯ãã£çšã«ãã«ãããããã
clang++
ã¯ç¹å¥ãª
-arch
ãã©ã°ã䜿çšã
clang++
ã
ARMã¢ãŒããã¯ãã£ã«å¿
èŠãªãã¹ãŠã®ã·ã¹ãã ã©ã€ãã©ãªã¯ã
SDKs/iPhoneOS7.0.sdk
ãµããã£ã¬ã¯ããª
XCODE_ARM_ROOT
CXX_FLAGS="-arch armv7 -arch armv7s -arch arm64" SYSTEM_ROOT=${XCODE_ARM_ROOT}/SDKs/iPhoneOS7.0.sdk
cmake
åŒã³åºãã¯æ¬¡ã®ããã«ãªããŸã
mkdir -p build/ios cd build/ios cmake \ -DCMAKE_CXX_COMPILER=$CXX_COMPILER \ -DCMAKE_OSX_SYSROOT="$SYSTEM_ROOT" \ -DCMAKE_C_COMPILER=$C_COMPILER \ -DCMAKE_CXX_FLAGS="$CXX_FLAGS" \ -G "Unix Makefiles" \ ../../src/Shark
ãšããã§ã cmake
ã¯ç§ãã¡ã®ããã«å€ãã®ç¹å¥ãªä»äºãããŸãã Cããã³C ++ã³ã³ãã€ã©ã®ã¿ãæå®ããã ãã§ååã§ãcmake
ã¯ãåãããŒã«ãããããä»ã®ãã¹ãŠã®ãŠãŒãã£ãªãã£ãããšãã°ranlib
ã lipo
ã ld
ãªã©ãæ€çŽ¢ããŸãã
iOSã·ãã¥ã¬ãŒã¿ãŒïŒiPhone Simulator SDKïŒåãã³ã³ãã€ã©ã
ä»åå¿
èŠãªã¢ãŒããã¯ãã£ã¯
i386
ãš
x86_64
ã§ããåŸè
ã¯ãããšãã°ãiPhone RetinaïŒ4ã€ã³ã64ãããïŒããªã©ã64ãããã¢ãŒããã¯ãã£ã®ããã€ã¹ã®ã·ãã¥ã¬ãŒã¿ã§ãã¹ãããããã«å¿
èŠã§ãã
å¿
èŠãªã©ã€ãã©ãªã¯
${XCODE_SIM_ROOT}/SDKs/iPhoneSimulator7.0.sdk
ãŸãã
ãŸããã³ãŒããåãã¢ãŒããã¯ãã£ã®OS Xã§ã¯ãªãã·ãã¥ã¬ãŒã¿å°çšã«æ§ç¯ããããšãããã1ã€ã®éåžžã«éèŠãªç¹ã¯ãã³ã³ãã€ã©ãŒã
-mios-simulator-version-min=7.0
ãã©ã°ã䜿çšããŠè¿œå ã®ãã³ããäžããå¿
èŠãããããšã§ã
mkdir -p build/sim cd build/sim CXX_FLAGS="-arch i386 -arch x86_64 -mios-simulator-version-min=7.0" SYSTEM_ROOT=${XCODE_SIM_ROOT}/SDKs/iPhoneSimulator7.0.sdk cmake \ -DCMAKE_CXX_COMPILER=$CXX_COMPILER \ -DCMAKE_OSX_SYSROOT="$SYSTEM_ROOT" \ -DCMAKE_C_COMPILER=$C_COMPILER \ -DCMAKE_CXX_FLAGS="$CXX_FLAGS" \ -G "Unix Makefiles" \ ../../src/Shark
Mac OS XãããŠæåŸã«ãMac OSXã
ä»åã¯ãCããã³C ++ã³ã³ãã€ã©ãŒã®ã¿ãæå®ããã ãã§ååã§ããã
cmake
ã¯æ®ããèŠã€ããŸãã
mkdir -p build/osx cd build/osx cmake \ -DCMAKE_CXX_COMPILER=$CXX_COMPILER \ -DCMAKE_C_COMPILER=$C_COMPILER \ -G "Unix Makefiles" \ ../../src/Shark
Cmakeã®ããªãã¯
ããã
make
ãŸãã
make
ïŒ
cmake
ã¯ãèæ
®ãã¹ã
cmake
ãããã€ããããŸãã
ã³ã³ãã€ã©ãŒãã¹ããŸããæåã®èµ·åæã«ã
cmake
ã¯Cããã³C ++ã³ã³ãã€ã©ãŒã®ãã¹ããå®è¡ããŸãã å¥åŠãªããšã«ãclangãšclang ++ã¯iOSãã©ãããã©ãŒã ã§ãã®ãã¹ãã«å€±æããŸããã ãã®ãã¹ããåé¿ããæ¹æ³ã«ã€ããŠã¯ãã€ã³ã¿ãŒãããäžã§ããã€ãã®æšå¥šäºé
ããããŸããããšãã°ã
CMakeLists.txt
ãã¡ã€ã«ã§ãããžã§ã¯ãã®èª¬æã«
NONE
ãè¿œå ããŸãããããã¯åœ¹ã«ç«ã¡ãŸããã§ããã
PROJECT( shark NONE )
ç§ã®ããã«åããæ¹æ³ã¯ãclangãšclang ++ã³ã³ãã€ã©ãšä»ã®ãªãã·ã§ã³ãæå®ããã«æåã«
cmake
ãéå§ããããšã§ãã
cmake
ã
CMakeCache.txt
ãã¡ã€ã«ãš
CMakeFiles
ãã£ã¬ã¯ããª
cmake
çæããŸãã ããŸããŸãªèšå®ã§
cmake
ãèµ·åãããšãä»åã¯ã³ã³ãã€ã©ãã¹ããå®è¡ãããŸããã
æ§æå€æŽåèšã§ã
cmake
ãå°ãªããšã2åéå§ããå¿
èŠããããŸã-ããäžåºŠèããŸãã
ãããŠåã³ããããã
CãC ++ã³ã³ãã€ã©ãªã©ã®éèŠãªãã©ã¡ãŒã¿ã次ã®èµ·åæã«å€æŽãããå Žåãå€æŽã¯ããã«ã¯æå¹ã«ãªããŸããã
cmake
ã¯èŠåãçºããå床å®è¡ããããã¢ããã€ã¹ããŸãã å®éã
cmake
ã¯ãã®ãããªããšãèšã£ãŠããŸãããã
ccmake
ãŠãŒãã£ãªãã£
ccmake
ããå€ãã®æ
å ±
ccmake
æäŸããŸãã
ccmake
ã¯
cmake
ã³ã³ãœãŒã«GUIã§ãã
äžè¬çã«
cmake
æéããã¹ãã«åæ Œãããã©ã¡ãŒã¿ãŒãªã- å¿
èŠãªãã©ã¡ãŒã¿ãŒãæã€2ã€ã®
cmake
- å€æŽãæå¹ã«ããããã®3ã€ã®
cmake
äœã
ã¯ãã倧äºãª
make
å®è¡ã§ããŸãã åŠçãé«éåããããã«ã
-j
ãã©ã°ã䜿çšããŠã¢ã»ã³ããªã䞊ååã§ããŸãã
make -j16
ãã®ããã»ã¹ã«ã¯æéãããããŸããããã®çµæã
libshark.a
éçã©ã€ãã©ãªã
libshark.a
ãŸãã
file
ãŠãŒãã£ãªãã£ã䜿çšãããã¹ãŠã®æ¶é²å£«ã«ã€ããŠãçµæã®ã©ã€ãã©ãªãå¿
èŠãªãã¹ãŠã®ã¢ãŒããã¯ãã£ããµããŒãããŠããããšã確èªããŸãã
èèªãã§ã㯠$ file build/ios/libshark.a build/ios/libshark.a: Mach-O universal binary with 3 architectures build/ios/libshark.a (for architecture armv7): current ar archive random library build/ios/libshark.a (for architecture armv7s): current ar archive random library build/ios/libshark.a (for architecture cputype (16777228) cpusubtype (0)): current ar archive random library $ file build/sim/libshark.a build/sim/libshark.a: Mach-O universal binary with 2 architectures build/sim/libshark.a (for architecture i386): current ar archive random library build/sim/libshark.a (for architecture x86_64): current ar archive random library $ file build/osx/libshark.a build/osx/libshark.a: current ar archive random library
ãåããã©ã€ãã©ãªãäœæãã
iOSããã€ã¹çšã®ã©ã€ãã©ãªãšã·ãã¥ã¬ãŒã¿ã¯ã1ã€ã®ãåããã©ã€ãã©ãªã«çµåããå¿
èŠããããŸãã
ããã§ã¯ãã¹ãŠãéåžžã«ç°¡åã§ã
lipo
ãŠãŒãã£ãªãã£ã¯ãã®ã¿ã¹ã¯ã«å¯ŸåŠããŸã
lipo
mkdir -p lib/ios $XCODE_TOOLCHAIN_BIN/lipo -create build/ios/libshark.a build/sim/libshark.a -o lib/ios/libshark.a
念ã®ãããçµæã®ã©ã€ãã©ãªïŒ
file lib/ios/libshark.a
ïŒããã§ãã¯ããŠã5ã€ã®ã¢ãŒããã¯ãã£ããã¹ãŠ
file lib/ios/libshark.a
ããŠããããšã確èªããŠãã ããã
ãã¬ãŒã ã¯ãŒã¯ã«ããã¯ãã
ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã®åœ¢ã§æ³šææ·±ãããã¯ãããšããæ¥ãŸããã ãã¬ãŒã ã¯ãŒã¯ãã£ã¬ã¯ããªã¯ãå€ãã®å Žåãã³ãã«ãšåŒã°ããŸãã
ãã³ãã«ãäœæãã
ãã®æ®µéã§ã
mkdir
ãš
ln
ã䜿çšããŠãå¿
èŠãªãã¹ãŠã®ã·ã³ããªãã¯ãªã³ã¯ã䜿çšããŠã
Shark.framework
ãã£ã¬ã¯ããªãšå¿
èŠãªãã©ã«ããŒæ§é ãå
éšã«äœæããŸãã
Shark.framework/ âââ Documentation -> Versions/Current/Documentation âââ Headers -> Versions/Current/Headers âââ Resources -> Versions/Current/Resources âââ Versions âââ A â âââ Documentation â âââ Headers â âââ Resources âââ Current -> A
ã©ã€ãã©ãªãã³ããŒ
éçã©ã€ãã©ãªããã³ãã«å
ã«ã³ããŒãããã®ååã
Shark
å€æŽããŸãã
cp build/ios/libshark.a Shark.framework/Versions/A/Shark
ããããŒãã¡ã€ã«ãã³ããŒãã
次ã«ããã¹ãŠã®
.h
ãã¡ã€ã«ã
src/Shark/include
ãããã³ãã«å
ã®
Headers
ãã©ã«ããŒã«ã³ããŒããŸãã 次ã«ãäžèŠãª
statistics.h
åé€ã
statistics.h
ã
CMakeLists.txt
ãã¡ã€ã«ã«å¯Ÿå¿ãã
INSTALL
ã³ãã³ãããªãããã ãã«ããã®ãã¡ã€ã«ã¯å¿
èŠãããŸããã
cp -r src/Shark/include/* Shark.framework/Headers/ rm Shark.framework/Headers/statistics.h
ãããããããŒãã¡ã€ã«ããããŒããã¹ãŠãã³ããŒããããã«èŠããŸããããã¯ããã¹ãŠãããã»ã©æçœã§ã¯ãããŸããã ä»ãã¬ãŒã ã¯ãŒã¯ã䜿çšããããšãããšãããããŒãã¡ã€ã«ãžã®ãã¹ã«é¢é£ããããã€ãã®äžæçãªãšã©ãŒããããã¢ããããŸãã OS Xã®åçã©ã€ãã©ãªã®å ŽåãããããŒæ€çŽ¢ãã¹ã䜿çšããŠåé¡ãåé¿ã§ãããšãããããã¬ãŒã ã¯ãŒã¯ã®å Žåããã¹ãŠãããã»ã©åçŽã§ã¯ãããŸããã
Sharkéçºè
ã¯
#include
ãã£ã¬ã¯ãã£ãã®æ£ãããã¹ãåŠçããªãã£ãããããããã®äœæ¥ãè¡ãå¿
èŠããããŸãã
é©åãªã¢ãããŒããæ¢ããŠãããæŽçãããã©ã€ãã©ãªã®äŸãããªãã¡ããŒã¹ãã«æ³šæãåããŸããã ããšãã°ã
boost/
ãã
boost/
ã§å§ãŸãã³ã³ããŒãã³ãã®
#include
ãã£ã¬ã¯ãã£ãã®ãã¹ãŠã®ãã¹
#include "boost/config.hpp" #include <boost/type_traits/remove_reference.hpp>
ãã¹ãŠã®
#include
ãã£ã¬ã¯ãã£ãã«å¯ŸããŠæ¬¡ã®ã«ãŒã«ã䜿çšããŠã
sed
ãšãã£ã¿ãŒãšããããã¡ã€ã«ã䜿çšããŸã
- ã#include <something>ãããã³ã#includeãsomethingããã«äžè¶³ããŠããã¹ããŒã¹ãè¿œå ããŸãïŒã¯ããããã€ããããŸããïŒ
SharkDefs.h
ãShark/SharkDefs.h
SharkDefs.h
- ãã¹ãŠã®ã©ã€ãã©ãªã³ã³ããŒãã³ãã®ãã¹ã«
Shark/
ãè¿œå ããŸã
ããã§ã®ã³ã³ããŒãã³ããšã¯ã
Headers
ãã©ã«ããŒã®ãµããã£ã¬ã¯ããªãã€ãŸã
Array, Rng, LinAlg, FileUtil, EALib, MOO-EALib, ReClaM, Mixture, TimeSeries, Fuzzy
Info.plistãäœæãã
ãã¬ãŒã ã¯ãŒã¯ãäœæããæåŸã®æé ã¯ã察å¿ããInfo.plistãäœæããããšã§ãã éèŠãªããããã£ã¯ããã¬ãŒã ã¯ãŒã¯ã®ååãšããŒãžã§ã³ã§ãã
Info.plistãäœæãã FRAMEWORK_NAME=Shark FRAMEWORK_CURRENT_VERSION=2.3.4 cat > Shark.framework/Resources/Info.plist <<EOF <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>${FRAMEWORK_NAME}</string> <key>CFBundleIdentifier</key> <string>dk.diku.image</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>${FRAMEWORK_CURRENT_VERSION}</string> </dict> </plist> EOF
iOS 7ãã€ãŸãarm64
ã¢ãŒããã¯ãã£ãåããããã€ã¹ã®ãªãªãŒã¹åã¯ãã·ãã¥ã¬ãŒã¿ãå«ãiOSãšOSXã®äž¡æ¹ã®ãŠãããŒãµã«éçã©ã€ãã©ãªããããã£ãŠãã¬ãŒã ã¯ãŒã¯ãäœæã§ããŸããã armv6, armv7, armv7s, i386
ãããã³x86_64
ã1ã€ã®å€ªåã©ã€ãã©ãªã«ããã¯ããããšã劚ãããã®ã¯äœããããŸããã§ããã 64ãããã¢ãŒããã¯ãã£ã®ããã€ã¹ã¯ããã¹ãŠã®ã«ãŒããæ··ä¹±ãããŸããã ãåããã©ã€ãã©ãªã§ã¯ãåãã¢ãŒããã¯ãã£ã®2ã€ã®ã¬ã€ã€ãŒã¯ååšã§ããŸãããã€ãŸãã64ãããããã€ã¹ã®iOSã·ãã¥ã¬ãŒã¿ãŒã®å Žåã¯x86_64
ãOS Xã®å Žåã¯x86_64
ãx86_64
ã§ããŸããã
CocoaPodsãžã®æçš¿
ããã«ãæ¢è£œã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãããžã§ã¯ãã«èªç±ã«è¿œå ã§ããŸããããã®æ®µéãèªååããå¿
èŠããããŸãã ããããŸãã«
CocoaPodsã®ç®çã§ãã äœããã®çç±ã§é»è»ã®åŸãã«ããŠãCocoaPodsããŸã 䜿çšããŠããªãå Žåã¯ããã®ãããžã§ã¯ãã«æ³šæãæããšãã§ãã
å²çè£ã®ä»æ§ãäœæããããšããŸãå¥ã®è©±ã§ãã
ãããŸã§ãå®éã«ãã¹ãŠã®å°ããªãã®ããã€ã³ããããšããäºå®ã«ãããããããããã§ã¯å®æããçµæãåç
§ããŸããShark-SDK.podspec Pod::Spec.new do |s| s.name = 'Shark-SDK' s.version = '2.3.4' s.license = { :type => 'GPLv2', :text => 'See https://sourceforge.net/directory/license:gpl/' } s.summary = 'iOS & OS X framework for Shark: C++ Machine Learning Library' s.description = <<-DESC SHARK provides libraries for the design of adaptive systems, including methods for linear and nonlinear optimization (eg, evolutionary and gradient-based algorithms), kernel-based algorithms and neural networks, and other machine learning techniques. DESC s.homepage = 'https://sourceforge.net/projects/shark-project/' s.author = { 'shark-admin' => 'https://sourceforge.net/u/shark-admin/profile/' } s.source = { :http => 'https://github.com/mgrebenets/shark2-iosx/releases/download/v2.3.4/Shark-SDK.tgz', :type => :tgz } s.ios.vendored_frameworks = "Shark-iOS-SDK/Shark.framework" s.osx.vendored_frameworks = "Shark-OSX-SDK/Shark.framework" s.ios.deployment_target = '6.0' s.osx.deployment_target = '10.7' end
ãããŠäœ¿çšäŸããŸãšã
ãã®ãããçªç¶èªåã®åé¡ãæãã€ããå Žåããã®çµæã¯ãæ§ããã«èšã£ãŠãä¿èšŒãããŸããããããã§ãäœããè©ŠããŠãã ããããã®çµæãã©ã®ãããªæ°ããã¹ãã«ã掻çšã§ããã®ã決ããŠããããŸããã