문제

인공 신경망 프로토 타입을 구현하기위한 가장 효과적인 접근법은 귀하의 경험에서 무엇입니까? 그것은 많은 과대 광고입니다 아르 자형 (무료이지만, 나는 그것으로 일하지 않았다) 또는 matlab (무료가 아님), 또 다른 가능한 선택은 c ++/java/c#과 같은 언어를 사용하는 것입니다. 이 문제는 주로 일부 신경망 아키텍처 또는 학습 알고리즘을 테스트하려는 사람들을 대상으로합니다.

위에서 언급 한 세 가지와 다른 프로그래밍 언어를 사용하는 것이 귀하의 선택이라면, 귀하의 이름과 귀하의 선택에 관한 설명을 말해 줄 수 있습니다 (예외 : 이것은 나에게 알려진 유일한/가장 많이 사용되는 언어입니다).

감사.

도움이 되었습니까?

해결책

신경망은 과학자들에 의해 많이 사용되기 때문에 프로그래머는 그리 많지 않기 때문에 과학자를 대상으로하고 신경망에 좋은 라이브러리를 제공하는 프로그래밍 언어를 선택합니다.

Python은 과학자들이 널리 사용하기 때문에 합리적인 선택입니다. 시작해야 할 두 가지 분포가 있습니다

http://www.pythonxy.com/

http://code.enthligity.com/

이러한 파이썬 분포에는 표준 파이썬 라이브러리에 없지만 과학자들이하는 프로그래밍 유형에 매우 유용한 많은 애드온 모듈이 포함됩니다. Python 패키지 색인을 검색하면 신경망에 대해 배우는 경우 괜찮을 수있는 몇 가지 신경망 패키지가 제공됩니다.

http://pypi.python.org/pypi?

그러나 신경망에서 진지한 작업을 수행하는 경우 빠른 신경망 라이브러리와 같은 것을 원할 것입니다. 여기에는 Python 바인딩이 제공되므로 Python으로 프로그래밍을 수행하고 그래프, 시각화, 데이터 조작 등 다양한 Python 모듈을 사용할 수 있습니다. 그러나 신경망은 FANN 라이브러리에서 옵트 메이드 컴파일 코드를 사용하여 실행됩니다. 두 세계의 최고.

다시 말해, 실제 신경망 코드를 실행하려면 Java가 아닌 C가 필요합니다. C 라이브러리는이를 Java와 잘 통합하지 않기 때문에 C 라이브러리와 부드럽게 통합되는 언어를 선택하십시오. Python은 알고리즘을 설명하는 데 필요한 코드 라인이 훨씬 적기 때문에 Java보다 다소 생산적입니다. 어떤 사람들은 Java보다 생산성이 10 배 증가한 것을 발견했습니다.

R을 언급했습니다. 아마도 사용해야하는 통계적 기능이 있거나 R 코드를 작성할 수있는 사람들이있을 수 있습니다. 다시 말하지만, 파이썬 대 R을 선택하는 것은 중 하나 또는 결정이 아닙니다. 둘 다 사용할 수 있습니다.

RPY 라이브러리를 통해 Python 프로그램은 R 라이브러리 및 코드에 액세스 할 수 있습니다. 이것을 사용하면 주요 프로그램을 Python에 작성하고 R을 라이브러리를 제공하는 도구로 처리하여 C로 작성된 FANN 라이브러리를 사용하는 것과 같은 방식으로 도서관을 제공합니다.

http://rpy.sourceforge.net/

Rspython이라는 또 다른 모듈이 두 가지 방식으로 작동하므로 R 프로그램이 Python으로 작성된 라이브러리에 액세스 할 수 있습니다. 전문가 R 프로그래머가 도움을주는 경우 유용 할 것입니다.

http://www.omegahat.org/rspython/

그리고 그게 전부는 아닙니다. Python을 활용하여 Java 프로그래밍을 단순화 할 수 있습니다. Java Neural Network Engine이있는 경우 Java VM에서 실행되는 Jython 버전을 사용하여 대부분의 프로그램을 Python으로 작성하고 코드에서 Java 라이브러리 및 클래스를 사용할 수 있습니다. 또한 Java 프로그램에 바인딩을 제공하기 때문에 Fast Fann 라이브러리도 사용할 수 있습니다.

내가 당신의 작업에 Python을 추천하는 주된 이유는 그것이 많은 과학자들이 사용하기 때문에 과학 지향적 인 두 가지 배포판이 있기 때문입니다. 두 번째 이유는 Python이 초보자 프로그래머가 시작하기가 매우 쉽고 신경망을 탐색 할 때 더 간단한 시뮬레이션으로 시작하여 더 많은 데이터 조작 및 결과 분석을 통해 더 복잡한 시뮬레이션으로 작업 할 수 있기 때문입니다. Python을 사용하면 자신의 코드 라이브러리를 구축하고 전문 Python 프로그래머가되어 신경망 문제에 더 많은 관심을 집중할 수 있습니다. 약간의 Java와 약간의 C ++ 및 약간의 R과 함께 튀어 오르면 신경망에서 더 적은 시간을 소비 할 수 있습니다. 이 전략은 프로그래밍 경력을 원하는 사람에게는 좋지만 신경망으로 중요한 결과를 얻고 자하는 사람에게는 좋지 않을 수 있습니다.

신경망 작업이 전문 하드웨어, 소위 신경성 칩으로 확장 되더라도 NIH 의이 논문에서 알 수 있듯이 여전히 파이썬을 활용할 수 있습니다.

http://www.ncbi.nlm.nih.gov/pmc/articles/pmc2701676/

다른 팁

나는 고 부적절 레벨 언어 (Matlab, Java)와 낮은 언어를 사용하려고 시도했습니다 (c). 도구 상자와 라이브러리를 사용하여 직접 코딩합니다. 전반적인 응답? 완벽한 도구도 아닙니다. 명심하십시오 :

  • 프로토 타입만으로는 충분하지 않을 수 있습니다. 종종 큰 샘플을 통해 네트워크를 실행해야하거나, 신경 네트워크를 발전 시켜서 진화하는 경우 샘플의 서브 세트를 여러 번 실행해야합니다. 네트워크를 백만 번 실행해야한다면, 작은 성능 이득조차도 큰 도움이되고 시간을 절약 할 수 있습니다 (예 : MATLAB의 C).

  • 반면에, 많은 사전 포장 된 라이브러리 중 하나 (Javann 등)를 사용하려면 코딩을 쉽게 코딩 해야하는 경우;

  • 어떤 종류의 신경망을 사용하고 있습니까? 연속 시간 반복 신경망 (CTRNN)? 백 프롭? 당신은 그들을 어떻게 훈련합니까? 결과를 어떻게 확인합니까? 정확도가 중요합니까? (즉, Arduinos와 같은 메모리 제한 로봇 제어 보드와 같은 작은 장치에서 실행하고 있습니까?)

여유 시간이 있다면 제안합니다

  1. 더 높은 수준의 언어 또는 심지어 의사 코드를 사용하여 개념을 배우십시오.
  2. 모든 복잡성에 익숙해지면, 특히 진화하는 신경망을 사용하는 경우 이미 익숙한 언어를 선택하십시오.
  3. 그런 다음 속도, 메모리 풋 프린트 등을 최적화하는 방법을 연구하기 시작할 수 있습니다.

도움이 되었기를 바랍니다.

Matlab의 신경망 도구 상자를 어느 정도 사용했으며 그래픽 인터페이스로 인해 네트워크를 설정할 수 있도록 그래픽 인터페이스로 인해 프로토 타이핑 도구로 즐겼으며 교육 대 테스트 입력 데이터의 크기 및 교육 후 테스트를 모두 실험했습니다. 내장. 시작하는 것은 멋지고 자연스럽게 보였습니다 ...

나는 또한 실험했다 Joone (Java 객체 지향 신경 엔진). 그것은 꽤 멋지게 설정되었고, 당시 나는 약간의 아마추어였으며 테스트를 통해 다양한 네트워크를 만드는 데 아무런 문제가 없었습니다. Java이므로 대규모 복잡한 시스템을 훈련시키는 경우 원하는 성능이 없지만 API는 매우 접근하기 쉽습니다.

나는 또한 몇 가지 작업을 수행하는 것을 보았습니다 홍수 C ++에서. 다양한 문제를 해결하기에 적합한 네트워크로 설정된 수많은 클래스가 있습니다. 체크 아웃 할 가치가 있습니다.

나는 또한 파이썬을 강력히 추천합니다. 프로토 타입의 경우 Python은 훌륭한 선택입니다. 프로그래밍하기가 더 쉽고 빠르며, 수많은 라이브러리가 제공되며 과학계에서 널리 사용됩니다.

또한 Python을 사용하는 경우 우수한 것을 활용할 수도 있습니다. 파이브레인 신경망, 강화 학습, 감독되지 않은 학습 및 기타 기계 학습 작업에 대한 알고리즘이 포함 된 패키지는 프로토 타입을 신속하게 구축하는 데 도움이됩니다.

이것은 현재 설정에 따라 다릅니다. 대학 시절에 다시 작업했을 때 C +++ MPI+ 수치 레시피를 사용해야했습니다. 이것은 Big Beowulf 클러스터에 공유를로드해야했기 때문에 수행되었습니다.

계산 요구가 크지 않다면 어떤 일이 있어도됩니다. 사전 패키지 라이브러리는 모든 플랫폼 (R, Python (Numpy, Scipy), C/C ++ (수치 레시피) 등에서 사용할 수 있습니다. 그들 중 하나에서 편안한 프로그래밍이라면 큰 문제가되지 않아야합니다.

내가 지금 프로토 타입해야한다면 아마도 Python과 함께 갈 것입니다 (프로토 타이핑이 훨씬 더 쉽기 때문에).

스클 랩 Matlab의 오픈 소스 대안입니다.

당신은 그것을 사용하여 신경망을 실험 할 수 있습니다 Scilab 용 Ann 도구 상자.

이론과 실험에 집중하십시오. 샘플에 대한 판별 기능을 선택 했습니까? 교육 및 시험 세트의 상태는 무엇입니까? 각 실험에 대해 혼동 매트릭스를 연구하십시오. 샘플이 왜 오 분류 된 지 생각이 있습니까? 당신에게 논리적으로 보입니까? 그렇지 않다면 사용하지 않는 기능이 도움이됩니까?

구현은 다음에 온다. 친숙한 언어를 사용하십시오. Java 또는 C#과 같은 관리 언어는 오류가 적을 수 있습니다. 적어도 포인터 또는 메모리 할당 버그로 인해 문제를 해결할 가능성이 적습니다. 최적화는 마지막으로 온다 (언제나처럼 괜찮은 프로파일 링 후).

"Encog는 고급 신경망 및 기계 학습 프레임 워크입니다. Encog는 다양한 네트워크를 만들기위한 클래스와 이러한 신경망의 데이터를 정규화하고 처리하는 클래스를 지원합니다. 추가 속도 처리 시간을위한 GPU의 경우 GUI 기반 워크 벤치도 신경망을 모델링하고 훈련시키는 데 도움이됩니다. Encog는 2008 년부터 활발한 개발을 해왔습니다. "

Encog는 Java, C#.net 및 Silverlight 용으로 사용할 수 있습니다.

http://www.heatonresearch.com/encog

학교에서 NN 수업에서 우리는 Matlab을 사용한 다음 논문에 Java를 사용했습니다.

나는 Java 또는 Matlab을 제안합니다. Matlab은 아마도 당신이 필요로 할 수있는 것과 이미 많이 가지고 있기 때문에. 그리고 Java는 오픈 소스 프로젝트에서 누락 될 수있는 것을 빠르게 구현하기 때문에 Java. 그리고 신경망을 구현하는 것 외에도 시각화하는 방법이 필요할 수 있습니다. 그리고 나는 개인적으로 Java 또는 Matlab이 매우 쉽다고 믿습니다.

좋아요 홍수. 무료, 포괄적이며 C ++로 작성되었습니다.

MATLAB의 구현은 정교하고 완전합니다. 다른 유형의 네트워크를 평가하기에 충분하다는 것을 알았습니다. 외부 인터페이스를 사용하여 매우 프로그래밍 가능합니다.

그러나 알고리즘의 구현은 오픈 소스가 아니기 때문에 특정 코드를 MATLAB 외부의 애플리케이션으로 이동해야 할 때 때때로 더 어려워집니다. 다른 신경 네트워크 유형의 손으로 코딩 된 구현이 다른 결과를 생성했기 때문입니다.

C ++를 사용하여 NN 구현을 작성하기 시작했으며 처음에 관련된 수학에 대해 충분히 알지 못한다는 것을 알았습니다. 결국 차단 된 것은 계산 모델을 조정하면서 코드를 리팩터링하기가 너무 어렵다는 것입니다.

결국 나는 신경망이 어떻게 작동하는지 배우는 것이 더 나은 동반자 였기 때문에 Matlab에 주었다. 몇 가지 주요 스트로크를 사용하여 알고리즘을 크게 변경하고 결과를 그래프로 만들 수있었습니다.

이미 구축 된 매트릭스 계산 프레임 워크를 사용했다면 내 경험이 더 좋았을 것입니다. 그것이 당신이 3D를하는 방법을 고려할 때 대부분의 언어에 대해 실제로 최적화 된 라이브러리가 몇 개 있어야합니다. Direct3D 또는 OpenGL을 활용할 수도 있지만 신경망에 더 적합한 것이 있다고 확신합니다.

나는 당신이해야 할 일에 대한 많은 정보를 제공하지 않는다고 생각합니다. 그러나 당신이해야 할 일을 말할 수 있습니다. 그리고 그것은 매트릭스 조작 코드를 직접 작성하려고합니다.

당신은주고 싶을 수도 있습니다 Weka 외모. 데이터 시각화와 같은 내장 도구가 있으며 몇 년 동안 진행되었습니다.일부 스크린 샷).

신경망과의 협력에있어서, 키는 네트워크 자체가 코드에서 실현되는 방식이 그리 많지 않은 교육 세트를 제대로 얻는 것입니다. 네트워크를 사용하여 해결하려는 문제의 유형에 따라 언어를 선택합니다. 네트워크 자체 C ++, C#의 경우 Python 및 Java가 모두 실행 가능합니다.

이미지 처리가 필요한 문제와 관련하여 이것을 사용하고 있습니까? 이 경우 OpenCV와 같은 이미지 처리 라이브러리에 쉽게 연결되는 것을 원할 것입니다. 아니면 오디오 처리가 관련되어 있습니까?

선택한 언어에 얼마나 쉬운 지에 따라 교육 세트를 쉽게 시각화해야 할 수도 있습니다. OpenGL 또는 DirectX 라이브러리에서 직접 또는 어떤 종류의 래퍼를 사용할 수 있습니까? DirectX의 경우 선택은 C ++ 및 C#입니다. 더 높은 수준의 추상화가 WPF 작업을 사용한다고 말합니까?

C#을 사용했으며 익숙하고 .NET의 수많은 데이터 처리 기술을 활용하고 필요한 시각화에 WPF를 사용할 수 있기 때문입니다.

당신은 또한주고 싶을 수도 있습니다 시도 - 무료입니다. 사용하기 쉬운 그리고 매우 가볍습니다. 또한 상자의 비교에서 LIBSVM보다 성능이 우수합니다 많은 대중 회귀 및 분류- 다타타에서.

일반적으로 이러한 종류의 알고리즘을 땜질했을 때 오픈 소스를 사용하는 것을 발견했습니다. Weka 툴킷 인공 신경망뿐만 아니라 다양한 학습 알고리즘을 프로토 타입하고 발견하는 좋은 방법이었습니다. 요즘에는 다른 언어의 구속력이있는 것처럼 보이므로 코드 수준에서 WEKA와 상호 작용하려면 Java에 연결되어서는 안됩니다.

꽤 좋은 분류 작업을 수행하는 것을 발견하고 이해 한 후에, 나는 C 또는 C ++의 알고리즘을 부분적으로 부분적으로 썼고 부분적으로 더 큰 데이터 세트로 작업하는 데 필요한 속도 이득을 얻기 위해 부분적으로 글을 썼습니다.

C ++를 사용하고 신경망이 간단한 경우 이상한 프레임 워크를 사용하지 마십시오.

어쩌면 5 년 전 강화 학습을 사용하여 소코반 솔버를했을 것입니다. 당시 우리는 Java와 함께 이탈리아 대학에서 개발 한 일부 에이전트 프레임 워크를 사용하기로 결정했습니다.

여기서 첫 번째 나쁜 결정은이 프레임 워크를 사용하는 것이 었습니다. 기본적으로 여기 저기 버그가 있었기 때문에 프레임 워크 코드를 디버깅하는 시간을 낭비하게되었습니다.

우리가 모든 것이 안정된 지점에 도달하면, 신경망을 훈련시키는 것은 천천히 죽었습니다. 우리는 아주 강력한 기계로 밤새도록 떠났지만 여전히 퍼즐을 거의 해결하지 못했습니다. 기본적으로 Java 객체 할당 및 쓰레기 수집은 시스템의 전체 성능을 상당히 심하게 손상 시켰습니다. 우리는 객체를 항상 할당하는 대신 객체 풀을 만들어 앱을 약간 조정했지만 프로그램의 성능은 소켓을 직접 사용하여 C ++에서 구현 된 유사한 할당보다 여전히 적은 순서였습니다.

도움이 되었기를 바랍니다!

글쎄, 당신이 빨리 프로토 타입을 좋아한다면, 파이썬이나 matlab이 최고인 것 같습니다. 신경망에 사용할 수있는 많은 라이브러리가 있습니다. 라이브러리 중 일부는 최소한의 조정 범위를 제공하는 방식으로 설계되었지만 Theano와 같은 라이브러리는 C에서 내부적으로 컴파일되므로 Theano와 같은 라이브러리가 매우 빠르며 내부의 전체 기능을 제공합니다. 조정. Theano는 처음에는 사용하는 것이 일반적이지만 매우 강력합니다. 그리고 나중에 신경에서 깊은 신경으로 이동하고 싶다면 큰 차이가 없습니다. 전문 Kagglers 도이 라이브러리를 사용하는 경향이 있습니다. 이 라이브러리에는 GPU 지원이 있습니다. 내가 사용한 모든 라이브러리 중에서 나는 Theano가 가장 유용하고 강력하다는 것을 알았습니다. Caffe와 같은 딥 러닝을위한 다른 최신 기술 프레임 워크 중 일부는 Theano에서 개발되었습니다.

도움이 되었기를 바랍니다.

Java 및 C/C ++에서 여러 신경망 프로토 타입을 구현했습니다. 성능이 중요한 경우 C/C ++와 함께 사용하십시오.

기본 다층 퍼셉트론의 구현 (벡터화되지 않음) 중 하나는 1 분 안에 백만 개의 훈련 반복 (2 개의 입력, 4 개의 출력 노드)을 수행합니다. Java에서 거의 동일한 구현은이 작업을 수행하는 데 큰 시간이 걸립니다. Eigen과 같은 선형 대수 라이브러리를 사용하여 처리 속도를 향상시키기 위해 벡터 버전을 만들 수도 있습니다.

예를 들어 28x28 픽셀 이미지와 같이 모든 종류의 이미지 처리 (Face-Recenition, OCR 등)에 사용한다고 상상해보십시오. 당신은 784 개의 입력 장치와 적어도 많은 숨겨진 장치를 가질 것입니다. 훈련하는 데 많은 시간이 걸리므로 소중한 시간, 몇 시간 또는 며칠을 절약하는 것이 유리합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top