Pergunta

a partir de sua experiência, que é a abordagem mais eficaz para implementar artificiais redes neurais protótipos? É um monte de hype sobre R (livre, mas eu não trabalho com ele) ou Matlab (não livre), outra possível opção é usar uma linguagem como C ++ / Java / C #. A questão é visando principalmente as pessoas que tentaram testar algumas redes arquiteturas neurais ou algoritmos de aprendizagem.

Se a sua escolha é usar uma diferente linguagem de programação a partir dos três mencionados acima, você pode me dizer seus nomes e algumas explicações sobre sua escolha (exceto: esta é a única linguagem / mais utilizado conhecida por mim).

Graças.

Foi útil?

Solução

Uma vez que as redes neurais são muito usados ??por cientistas, e não tanto por programadores, escolher uma linguagem de programação que tem como alvo os cientistas e fornece boas bibliotecas para redes neurais.

Python é uma escolha razoável, uma vez que é amplamente utilizado pelos cientistas. Duas distribuições para começar são

http://www.pythonxy.com/

http://code.enthought.com/

Essas distribuições Python incluem uma série de módulos adicionais que não estão na biblioteca padrão do Python, mas que são muito úteis para o tipo de programação que os cientistas fazem. Pesquisar o índice pacote Python vem com alguns pacotes de redes neurais que podem ser OK, se você está começando a aprender sobre redes neurais.

http://pypi.python.org/pypi?:action= busca e prazo = neural & submit = procurar

No entanto, se você está fazendo um trabalho sério com Redes Neurais você vai querer algo como o rápido biblioteca de rede neural. Isto vem com vínculos Python para que você possa fazer a sua programação em Python, use a grande variedade de módulos Python para representação gráfica, visualização, manipulação de dados e assim por diante. Mas, suas redes neurais será executado usando código compilado optmised da biblioteca FANN. O melhor dos dois mundos.

Em outras palavras, para executar o código de rede neural real, você precisa de C, não Java. Desde bibliotecas C não se integram muito bem com Java, escolher uma linguagem que se integra sem problemas com bibliotecas C. Python faz isso e também é muito mais produtivo do que Java desde há muito menos linhas de código necessário para explicar seus algoritmos. Algumas pessoas têm encontrado a 10 vezes o aumento da produtividade sobre Java.

Você mencionou R, talvez porque tem funções estatísticas que você precisa para uso, ou talvez você tem pessoas disponíveis que podem escrever código R. Novamente, a escolha de Python versus R não é um ou-ou decisão. Você pode usar ambos.

A biblioteca RPY permite aos programas Python a bibliotecas R acesso e código. Usando isso, você iria escrever seus principais programas em Python e deleite R como uma ferramenta para fornecer bibliotecas, da mesma forma que você faz uso da biblioteca FANN que foi escrito em C.

http://rpy.sourceforge.net/

Há um outro módulo chamado RSPython que funciona nos dois sentidos, de modo que os programas de I pode acessar bibliotecas escritos em Python. Isso seria útil se você tiver um programador especialista R ajudá-lo.

http://www.omegahat.org/RSPython/

E isso não é tudo. Você pode alavancar Python para simplificar a programação Java. Se você tem um motor de rede neural Java, você ainda pode escrever a maioria de seu programa em Python usando a versão Jython que é executado no Java VM e permite que você use qualquer bibliotecas e classes Java em seu código. E você ainda pode usar a biblioteca FANN rápido também, pois fornecem ligações para programas Java.

A principal razão que eu recomendo Python para o seu trabalho é que ele é usado por uma enorme quantidade de cientistas que é por isso que existem duas distribuições ciência orientada disponíveis. A segunda razão é que Python é muito fácil para programadores iniciantes para começar com, e em explorar redes neurais provavelmente você vai começar com simulações simples e trabalhar até os mais complexos com mais de manipulação de dados e análise dos resultados. Python lhe permitirá construir a sua própria biblioteca de código e se tornar um especialista Python programador para que você possa se concentrar mais de sua atenção sobre os problemas de redes neurais. Se você saltar ao redor com um pouco de Java, e um pouco de C ++ e um pouco de R, então você será capaz de gastar menos tempo em redes neurais. Essa estratégia pode ser bom para Someone que quer uma carreira na programação, mas não para alguém que quer conseguir alguns resultados significativos com redes neurais.

Mesmo que o seu trabalho rede neural se estende para hardware especializado, os chamados chips de neuromórficos, você ainda pode aproveitar Python como esse papel a partir do NIH demonstra:

http://www.ncbi.nlm.nih.gov/pmc / artigos / PMC2701676 /

Outras dicas

Eu tentei usar ambas as línguas de maior abstração nível (Matlab, Java) e mais baixas (C). Ambos usando caixas de ferramentas e bibliotecas e codificação-los eu mesmo. A resposta global? Nem é a ferramenta perfeita. Por favor, tenha em mente que:

  • um protótipo pode não ser suficiente: muitas vezes você precisa executar a rede em grandes amostras, ou várias vezes ao longo de um subconjunto de amostras (no caso de evolução das redes neurais) para obter resultados decentes. Se você tiver que executar uma rede de um milhão de vezes, até mesmo um pequeno ganho de desempenho pode ser uma grande ajuda e economia de tempo (ou seja C sobre Matlab);

  • Se, por outro lado, você precisa de facilidade de codificação que você pode querer usar uma das muitas bibliotecas pré-embalados (javaNN, etc);

  • que tipo de rede neural que você está usando? redes neurais de tempo contínuo recorrentes (CTRNN)? Retropropagação? Como você não treiná-los? Como você verificar os seus resultados? É a precisão importante? (Ou seja, você está executando-os em um pequeno dispositivo, como uma placa de controle robótico limita-memória, como Arduinos?)

Se você tem tempo de sobra, eu sugiro

  1. aprender os conceitos usando uma linguagem de alto nível, ou mesmo pseudocódigo primeiro;
  2. Uma vez que você está familiarizado com todas as complexidades, especialmente se estiver usando evolução redes neurais, escolher uma linguagem que eles já estão familiarizados com
  3. então você pode querer começar a pesquisar como otimizar para velocidade, consumo de memória, etc.

Espero que isso ajude.

Eu tenho usado a caixa de ferramentas de rede neural de Matlab, até certo ponto, e se ele como uma ferramenta de prototipagem devido a sua interface gráfica para que você possa configurar a rede, experiência com tamanhos de formação vs dados de entrada de teste, e sua pós formação testando todos construídos em. Ele só parecia bom e natural para começar com ...

Eu também experimentei com Joone (Object Oriented Java Neural Engine). Ele é configurado muito bem, e na época eu era um pouco de um amador e ainda não tinha problemas como várias redes em funcionamento, com o teste. É Java, por isso não pode ter o desempenho que você pode querer se você está treinando grandes sistemas complexos, mas sua API foi extremamente acessível.

Também já vi algum trabalho feito com Flood em C ++. Ele tem um monte de aulas criadas com as redes que são apropriados para resolver uma série de problemas. Vale a pena conferir.

Eu também recomendo python. Para um protótipo, python é uma ótima escolha: é mais fácil e mais rápido para o programa em, há um grande número de bibliotecas disponíveis, e é amplamente utilizado na comunidade científica.

Além disso, se você estiver usando python, você também pode tirar proveito da excelente PyBrain pacote que contém algoritmos para redes neurais, reforço de aprendizagem, aprendizagem não supervisionada e outras tarefas de aprendizagem de máquina, que deve ajudá-lo a construir um protótipo rapidamente.

Isso depende de sua configuração atual. Quando eu costumava trabalhar com eles de volta em tempos de faculdade, eu tive que usar C ++ + MPI + receitas numéricos. Isso foi feito porque eu tinha que compartilhar a carga no cluster Beowulf grande.

Se as suas necessidades de computação não são grandes, nada faria. bibliotecas empacotadas estão disponíveis em todas as plataformas (R, Python (Numpy, scipy), C / C ++ (receitas numérica) etc). Se você estiver programação confortável em qualquer um deles, ele não deve ser um grande negócio.

Se eu tivesse que protótipo nada agora, eu provavelmente ir com Python (apenas porque acho que é muito mais fácil para prototipagem)

Scilab é uma alternativa de código aberto para Matlab.

Você pode experimentar com redes neurais usando a ANN Toolbox for Scilab .

Em foco sobre a teoria e experimentos. Você escolheu características discriminantes para suas amostras? Qual é o estado de seus treinamento e teste conjuntos. Para cada experiência, o estudo da matriz de confusão. Você tem uma idéia do porquê uma amostra é erroneamente classificada? Parece lógico para você? Se não, qual recurso você não uso ajudaria?

Implementação vem em seguida, usar o idioma que você está familiarizado. A linguagem gerenciada como Java ou C # é provável que seja menos propenso a erros: pelo menos você é menos provável de estragar as coisas por causa de ponteiro ou de alocação de memória bugs. Otimizando vem por último (depois de alguns perfis decente como sempre).

"Encog é uma estrutura de rede neural e aprendizagem de máquina avançada. Encog contém classes para criar uma ampla variedade de redes, bem como aulas de apoio para normalizar e processar dados para estas redes neurais. Trens Encog usando vários segmentos propagação resistente. Encog lata também fazer uso de uma GPU para mais tempo de processamento velocidade. a GUI bancada com base também é fornecido para o modelo de ajuda e treinamento de redes neurais. Encog está em desenvolvimento ativo desde 2008 ".

Encog está disponível para Java, C # .Net e Silverlight.

http://www.heatonresearch.com/encog

Em minhas aulas de nn na escola usamos Matlab e depois eu usei java para a minha tese.

Eu sugeriria java ou Matlab. Matlab porque provavelmente já tem um monte de que você pode precisar. E java porque é rápido para implementar o que pode estar faltando em projetos de código aberto. E besided pois além de implementar as redes neurais que você pode precisar de alguma maneira de visualizá-los. E por isso eu pessoalmente acredito que java ou Matlab é muito fácil.

Gosto inundação . É livre, abrangente e escrito em C ++.

As implementações em Matlab são sofisticados e completos. Eu encontrei-o para ser suficiente para avaliar diferentes tipos de redes. É também muito programável usando interfaces externas.

No entanto, uma vez que as implementações dos algoritmos não são de código aberto, às vezes é mais difícil quando você precisa mover uma determinada peça de código em um fora aplicação de Matlab, como minha mão codificado implementações de diferentes tipos de redes neurais produzidas diferente resultados.

Eu comecei a escrever uma implementação NN usando C ++ e descobriu que eu não sabia o suficiente sobre as contas envolvidas no começo. O que acabou hapenning é que era muito difícil refatorar o código como eu estava aprimorando o modelo de cálculo.

Finalmente eu dei em MATLAB como foi definitivamente um melhor companheiro para aprender neural redes de trabalho. Eu era capaz de fazer grandes alterações no algoritmo usando alguns cursos chaves e representar graficamente os resultados também.

Talvez minha experiência teria sido melhor se eu tivesse usado um quadro computação matriz já construído. Considerando que é como você fazer 3D deve haver algumas bibliotecas realmente otimizados lá fora, para a maioria dos idiomas. Heck assim como você pode alavancar Direct3D ou OpenGL para isso, mas estou certo de que há algo mais adequado para Redes Neurais para fora.

Eu acho que não estou fornecendo muita informação sobre o que deve fazer. No entanto, posso dizer o que você não deve fazer -. E isso é tentando escrever código de manipulação de matriz-se

Você pode querer dar Weka um olhar . Tem alguns built-in ferramentas para coisas como a visualização de dados, e tem sido em torno de anos ( alguns screenshots ).

No meu ponto de vista no trabalho com redes neurais a chave está recebendo o conjunto direito de formação não tanto como a própria rede é actualizada no código. Eu iria escolher uma linguagem com base no tipo de problema que você está tentando resolver usando a rede. Para a própria rede C ++, C #, Python e Java são todos viáveis.

Você está usando isso em conexão com um problema que requer processamento de imagem? Caso em que você provavelmente vai querer algo que conecta-se a uma biblioteca de processamento de imagem como OpenCV facilmente. Ou há algum processamento de áudio envolvidos?

Você pode precisar de visualizar facilmente os conjuntos de treinamento assim como fácil isso seria com a linguagem de escolha? você pode trabalhar tanto com bibliotecas OpenGL ou DirectX diretamente ou usando uma capa de algum tipo? Para DirectX as escolhas são C ++ e C #. Será que um nível maior de abstração dizer usando o trabalho WPF?

Eu tenho usado C # porque eu estou familiarizado com ele e pode aproveitar as inúmeras manipulação de dados tecnologias em .net e usar o WPF para quaisquer visualisations necessários.

Você também pode querer dar Nen uma tentativa - É grátis, fácil de usar e muito leve. Também Supera LIBSVM em uma out-of-the-box-comparação em muitos Regressão populares - e Classificação-conjuntos de dados.

Normalmente, quando eu estava mexendo com esses tipos de algoritmos, descobri que usando o open-source Weka Toolkit foi uma ótima maneira de protótipo e descobrir um monte de diferentes algoritmos de aprendizagem (e não apenas de redes neurais artificiais). Estes dias, parece que eles têm ligações a partir de um monte de diferentes línguas, então você não deve ser amarrado a Java se você quiser interagir com Weka ao nível do código.

Uma vez eu encontrei e compreendido algo que era legal / fazendo um trabalho muito classificação boa, eu escrevi o algoritmo em C ou C ++ em parte por diversão, e em parte para obter os ganhos de velocidade necessários para trabalhar com conjuntos de dados maiores.

Use C ++ e se a rede neural é bastante simples não usar estruturas estranhas lá fora.

Talvez 5 anos atrás eu fiz um solucionador de Sokoban usando Reinforcement Learning. No momento em que decidiu ir com Java e usar algum Framework Agent desenvolvido por uma universidade italiana.

Primeiro decisão ruim aqui foi usar este quadro. É basicamente tinha erros aqui e ali, que nos fez perder um monte de tempo de depuração de código do framework.

Uma vez que chegamos ao ponto onde tudo era estável, a formação da Rede Neural foi apenas mortos lento. Saímos correndo durante a noite em uma máquina bastante poderosa e ainda resolvido muito poucos enigmas. Basicamente alocação de objeto Java e coleta de lixo foram danificando todo o desempenho do sistema muito mal. Nós mexido um pouco o aplicativo através da criação de pools de objetos em vez de alocá-los o tempo todo, mas o desempenho do programa ainda era uma ordem de magnitude menor do que uma atribuição semelhante, que foi implementado em C ++ usando soquetes diretamente.

Espero que isso ajude!

Bem, se você gosta de protótipo rápido, então python ou Matlab parece ser a melhor. Há uma grande quantidade de bibliotecas disponíveis para redes neurais. Algumas das bibliotecas são projetados de tal forma a que eles dão-lhe uma quantidade mínima de espaço de ajustes, mas bibliotecas como Theano são extremamente rápidos como a função são compilados internamente em C (eu acho que a data mais rápido até) e dá-lhe a funcionalidade completa de interno ajustes. Theano é típico para usar no começo, mas é extremamente poderoso. E, mais tarde, se você deseja mover de neural para neural profunda, então não há muita diferença. Professional Kagglers também tendem a usar esta biblioteca. Esta biblioteca também tem suporte GPU. De todas as bibliotecas eu usei eu encontrei Theano para ser o mais útil e poderosa. Alguns dos outros estados do quadro arte para o aprendizado profundo como Caffe são desenvolvidos em Teano.

Espero que isso ajude.

Eu tenho implementado vários protótipos de rede neural em Java e C / C ++. Quando o desempenho é importante, uso com C / C ++.

Um dos minha implementação (não vetorizado) de um Multilayer Perceptron básica faz um milhão de iterações de formação (com uma configuração de 2 entradas, 4 ocultos e 1 nó de saída) em menos de um minuto. Minha implementação quase idênticos em Java leva uma enorme quantia de tempo para fazer isso. Você também pode usar uma biblioteca de álgebra linear como Eigen para criar uma versão vectorized para melhorar a velocidade de processamento.

Imagine que você usaria seu por qualquer tipo de processamento de imagem (Face-Recognition, OCR, etc.) com, por exemplo, 28x28 imagens de pixel. Você teria 784 unidades de entrada e pelo menos como muitas unidades ocultas. Isso leva uma quantidade enorme de tempo para treinar, por isso é benéfico para salvar preciosos minutos, horas ou dias.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top