Le dernier semestre J'ai pris un cours d'apprentissage en ligne de Standford enseigné par le professeur NG. http://www.ml-class.org/course/authh/welcome Je pensais que c'était assez informatif. Pour brosser / comprendre les réseaux de neurones mieux, j'ai essayé d'écrire la ma part en python. Ici c'est: mais cela ne fonctionne pas = (. Inspecter le coût contre l'itération Je peux voir un blip dans le coût et la prédiction pour A est la même chose. Peut-être quelqu'un Aidez-moi à comprendre pourquoi mon réseau de neurones ne converge pas? P> merci,
Désolé pour le montant du code (peut-être que quelqu'un le trouvera utile). p> mise à jour: p> au lieu d'utiliser des données aléatoires, j'ai des données structurées à partir du référentiel d'apprentissage de la machine UCI. L'ensemble de données en particulier est la zone brûlée des incendies de forêt, dans la région nord-est du Portugal, à l'aide de données météorologiques et autres: http://archive.ics.uci.edu/ml/datasets/forest+fires J'ai modifié les données de sorte que les jours et les mois étaient des chiffres: https://docs.google.com/spreadsheet/ccccc.key=0am3etczrnrnejl3quo5rjnlvve P> data = numpy.loadtxt(open('FF-data.csv', 'rb'), delimiter = ',', skiprows = 1)
features = data[:,0:11]
targets = numpy.matrix(data[:,12]).T
nfeatures = (features-features.mean(axis=0))/features.std(axis=0)
n = NN([11, 10, 1]) #The class takes the list of how many nodes in each layer
n.train(nfeatures, targets, 0.003, 0.0)
import matplotlib.pyplot
matplotlib.pyplot.subplot(221)
matplotlib.pyplot.plot(n.cost)
matplotlib.pyplot.title('Cost vs. Iteration')
matplotlib.pyplot.subplot(222)
matplotlib.pyplot.scatter(n.predict(nfeatures), targets)
matplotlib.pyplot.title('Data vs. Predicted')
matplotlib.pyplot.savefig('Report.png', format = 'png')
matplotlib.pyplot.close()
3 Réponses :
(Désolé, je n'ai pas assez de représentant pour ajouter des commentaires, alors je vais simplement continuer à poster des réponses à la place.)
Oui, cela semble étrange. Si, toutefois, après l'entraînement, vous générez une nouvelle matrice B: p> Ça fonctionnera bien (la plupart des temps - parfois, cela donnera toujours la moyenne (cibles) comme le réponse).
Remarque: je passe à l'aide de 100 fonctionnalités à l'aide de seulement 4 dans mon exemple. P> En outre, je ne pense pas que fonctionnaliser 5000 itérations sur 50 éléments de l'ensemble de données vous fera de bonnes. Vous devriez généralement essayer d'utiliser autant de données de formation que vous pouvez - et vous pouvez ici utiliser autant que vous le souhaitez, mais vous utilisez encore moins d'exemples que vous avez des fonctionnalités. P> C'est amusant, je vais Pensez-y un peu plus :) J'utilisais votre réseau pour un exemple plus simple - en tant qu'entrée que j'ai fournie deux chiffres et que vous attendiez leur somme comme sortie. Cela a fonctionné plus ou moins d'accord. P> p>
Salut. J'ai parcouru le nombre d'itérations à la valeur par défaut 1000 et j'ai obtenu un ensemble de données structuré plus grand (518 exemples).
Le réseau neuronal a été incapable de former sur les données les feux de forêt https: // docs. google.com/spreadsheet/ccc?key=0Am3oTptaLsExdC1PeXl1eTczRnRNejl3QUo5RjNLVVE pour quelques raisons.
d'abord la fonction sigmoïde numpy.tanh () ne se comporte pas comme prévu. Le code doit être modifié de: p>
data = numpy.loadtxt(open('FF-data.csv', 'rb'), delimiter = ',', skiprows = 1)#Load numpy.random.shuffle(data) features = data[:,0:11] nfeatures = (features-features.mean(axis=0))/features.std(axis=0) targets = numpy.matrix(data[:, 12]).T n = NN([11, 50, 1]) n.train(nfeatures, targets, 0.07, 0.0, 2000) import matplotlib.pyplot matplotlib.pyplot.subplot(221) matplotlib.pyplot.plot(n.cost) matplotlib.pyplot.title('Cost vs. Iteration') matplotlib.pyplot.subplot(222) matplotlib.pyplot.scatter(n.predict(nfeatures).tolist(), targets.tolist()) matplotlib.pyplot.plot(targets.tolist(), targets.tolist(), c = 'r') matplotlib.pyplot.title('Data vs. Predicted') matplotlib.pyplot.savefig('Report.png', format = 'png') matplotlib.pyplot.close()
Je pense que votre biais doit être soustraite quelque part des entrées pondérées (ou définies sur -1). D'après ce que je vois dans votre code, les neurones ajoutent toutes les entrées, y compris le biais (qui est réglé sur +1. P>
Ce ne sont pas des statistiques, le biais doit être ajouté et appris. Pourriez-vous expliquer pourquoi vous pensez que cela aiderait?
J'ai couru votre code sur des exemples simples et il semble que cela fonctionne bien. Pourquoi pensez-vous que cela ne fonctionne pas? Dans votre exemple, le coût diminue très vite dans les premières itérations, puis reste à peu près la même chose, ce qui, je dirais, le comportement attendu.
Merci d'avoir exécuté mon code. Pourriez-vous vérifier avec votre réseau formé ce que la production de N.Prédict (A) est-elle? Pour moi, toutes les valeurs prédites sont les mêmes, quelles que soient les caractéristiques d'entrée (généralement près de la moyenne (cibles). Par exemple, cibles = [4, 5, 6,7] N.Prédict (caractéristiques) = [5.5, 5.5, 5,5, 5.5, 5.5].
Utilisez Pandas pour les données de la série TIME!