Estou tentando reimplementar redes neurais em Python. Eu implementei a função de custo e o algoritmo de retropropagação corretamente. Eu os verifiquei executando seu código equivalente do Octave.
Mas quando estou tentando usar a scipy.optimize.fmin_cg
função, as iterações levam muito tempo para serem executadas. Ele sai com um aviso e gera um erro dizendo que "a taxa de erro desejada não foi alcançada".
O mesmo programa no Octave executa bem. No entanto, ele tem sua própria fmincg
função definida.
O que estou fazendo errado?
Respostas:
Como sugestão futura, use o ponto de interrogação duplo? para puxar a fonte da função:
Observando as fontes cíclicas, essa mensagem de erro aparece se o parâmetro interno alpha_k for zero ou Nenhum.
Este valor, por sua vez, está vinculado ao algoritmo de busca interno da Linha Wolfe. Em particular, é chamado quando a pesquisa não encontra um valor melhor ao longo da trajetória de pesquisa. Sua função provavelmente tem um contorno linear em algum lugar ao longo do qual o otimizador se encaixa e fica confuso.
Talvez tente adicionar um retorno de chamada e veja onde a pesquisa com falha é gerada?
fonte
Presumo que você não especificou o
fprime
parâmetro. Se você não fornecer esse parâmetrofmin_cg
, precisará descobrir sua própria solução, o que geralmente é muito mais lento do que a solução ideal fornecida. Seu código pode ficar assim:fonte
Sei que essa é uma pergunta antiga, mas acabei de me deparar com um problema semelhante e pensei em publicar minha solução, caso alguém mais se depare com isso.
Depois de fazer isso, executei
fmin_cg
com f e fprime e , embora ainda funcionasse bem devagar, o fazia sem nenhum dos erros ou avisos que eu estava vendo até aquele momento.Na verdade, ele realmente fez um trabalho melhor ao minimizar a função de custo do que a implementação do matlab, apesar de ambos terem
max_iters = 100
.fonte