Ich hab ein Problem mit meiner Implementierung eines Neuronales Netzwerkes. Nämlich mit den Dimensionen der Numpy-Arrays in der backpropagate() Funktion
Hier: http://pastebin.com/g4wvmSis
Der Output ist:
[array([3, 4, 5]), array([[12, 24, 36],
[12, 24, 36],
[12, 24, 36]]), array([[[ 72, 144, 216],
[ 72, 144, 216],
[ 72, 144, 216]],
[[ 72, 144, 216],
[ 72, 144, 216],
[ 72, 144, 216]],
[[ 72, 144, 216],
[ 72, 144, 216],
[ 72, 144, 216]]]), array([[[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]],
[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]],
[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]]],
[[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]],
[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]],
[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]]],
[[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]],
[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]],
[[ 432, 864, 1296],
[ 432, 864, 1296],
[ 432, 864, 1296]]]])]
Dabei sollte er einfach array([3,4,5]),array([72,144,216]),array([432,864,1296]) sein.
Danke
Eigene Implementierung eines Neuronales Netzwerkes
Ich hab wieder ein Problem
http://pastebin.com/g4wvmSis
In der Backpropagate Funktion.
[array([[ 0.11910611, 0.70402028],
[ 0.83047441, 0.55448528]]), array([[ 0.19644666, 0.62811239]])]
[array([[ 0.11910611, 0.70402028],
[ 0.83047441, 0.55448528]]), array([ 0.19644666, 0.62811239])]
Der erste Output ist mit von mir gesetzten Gewichten. Der zweite mit den von Backpropagate berechneten. Die Dimensionen stimmen nicht überein. Ich weiss nicht was tun, allenfalls muss ich das mit Indexes lösen ( )
http://pastebin.com/g4wvmSis
In der Backpropagate Funktion.
[array([[ 0.11910611, 0.70402028],
[ 0.83047441, 0.55448528]]), array([[ 0.19644666, 0.62811239]])]
[array([[ 0.11910611, 0.70402028],
[ 0.83047441, 0.55448528]]), array([ 0.19644666, 0.62811239])]
Der erste Output ist mit von mir gesetzten Gewichten. Der zweite mit den von Backpropagate berechneten. Die Dimensionen stimmen nicht überein. Ich weiss nicht was tun, allenfalls muss ich das mit Indexes lösen ( )
Vielleicht hab ich mich falsch ausgedrückt. Der Output von backpropagate sollte z.B. so sein:
Aber ist so:
Das heisst das zweite Array ist 1-Dimensional sollte aber 2-Dimensional sein. Was mach ich falsch?
Danke
fail
Code: Alles auswählen
[array([[1,2,3,4],[5,6,7,8]]), array([[9,10,11,12]])]
Code: Alles auswählen
[array([[1,2,3,4],[5,6,7,8]]), array([9,10,11,12])]
Danke
fail
@fail: Das ist wahrscheinlich erst einmal fleissarbeit die Stelle zu finden ab der das Ergebnis nicht mehr dem erwarteten Format entspricht. Kannst Du den Programmablauf nicht selbst durchgehen und das Problem eingrenzen? Irgendwo muss doch ein Punkt sein, wo die Eingangswerte/Operanden noch so aussehen wie erwartet, das Ergebnis aber nicht mehr.
Minimal Beispiel (kein Fehler in layer, nur zur Ausführung des Programms mitgeliefert):
Der Fehler ist bei new_weights in der Backpropagatefunktion.
Ich hoffe ihr könnt mir helfen.
Danke im Vorraus
fail
Code: Alles auswählen
import numpy as np
def layer(inputs, weights, bias):
"""Calculates the values of the next layer"""
#adds one as bias to the inputs
inputs = np.vstack([inputs, [1]]) if bias else inputs
return np.tanh(np.dot(weights, inputs))
def backpropagate(speed, all_weights, all_errors, inputs, bias):
new_all_weights = []
outputs = inputs
for weights, errors in zip(all_weights, all_errors):
outputs = layer(outputs, weights, bias)
new_weights = np.array([[]])
for index,error in enumerate(errors):
new_row = np.array([])
row = weights[index:index+1]
for weight in row:
new_row = np.append(new_row,
weight+speed*error*inputs[index]*outputs[index])
new_weights = np.append(new_weights,new_row) if np.array_equal(new_weights,np.array([[]])) else np.vstack((new_weights,new_row))
new_all_weights.append(new_weights)
return new_all_weights
weights = [np.random.rand(1,2)] # wenn man z.B. [np.random.rand(2,2)] benutzt gibt es 2-Dimensionale array bei der backpropagate funktion, so wie es sein sollte
inputs = np.array([[1],[2]])
ideal_outputs = np.array([3])
outputs = np.array([[2]])
errors = [np.array([0.19211773, 0.59422259]), np.array([0.72759546])]
weights = backpropagate(0.1,weights, errors, inputs, False)
print weights
Ich hoffe ihr könnt mir helfen.
Danke im Vorraus
fail
Hm:
`ideal_ouputs` und `outputs` werden nirgends verwendet.
Code: Alles auswählen
$ python forum5.py
Traceback (most recent call last):
File "forum5.py", line 30, in <module>
weights = backpropagate(0.1,weights, errors, inputs, False)
File "forum5.py", line 21, in backpropagate
new_weights = np.append(new_weights,new_row) if np.array_equal(new_weights,np.array([[]])) else np.vstack((new_weights,new_row))
File "/usr/local/lib/python2.7/dist-packages/numpy/core/shape_base.py", line 226, in vstack
return _nx.concatenate(map(atleast_2d,tup),0)
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Ouh, sorry hier:
Der Output ist :
Das zweite Array sollte 2-Dimensional sein, zur Weiterverarbeitung im Programm
fail
Code: Alles auswählen
import numpy as np
def layer(inputs, weights, bias):
"""Calculates the values of the next layer"""
#adds one as bias to the inputs
inputs = np.vstack([inputs, [1]]) if bias else inputs
return np.tanh(np.dot(weights, inputs))
def backpropagate(speed, all_weights, all_errors, inputs, bias):
new_all_weights = []
outputs = inputs
for weights, errors in zip(all_weights, all_errors):
outputs = layer(outputs, weights, bias)
new_weights = np.array([[]])
for index,error in enumerate(errors):
new_row = np.array([])
row = weights[index:index+1]
for weight in row:
new_row = np.append(new_row,
weight+speed*error*inputs[index]*outputs[index])
new_weights = np.append(new_weights,new_row) if np.array_equal(new_weights,np.array([[]])) else np.vstack((new_weights,new_row))
new_all_weights.append(new_weights)
return new_all_weights
weights = [np.random.rand(2,2),np.random.rand(1,2)]
inputs = np.array([[np.random.randint(0,2)],
[np.random.randint(0,2)]])
errors = [np.array([0.19211773, 0.59422259]), np.array([0.72759546])]
weights = backpropagate(0.1,weights, errors, inputs, False)
print weights
Code: Alles auswählen
[array([[0.97032528, 0.23542415], [0.27283704, 0.27943038]]), array([0.93738831, 0.75348964])]
fail
Habe es jetzt unschön mit:
nach der Schleife gelöst
Wenn es nichts eleganteres gibt.
Trotzdem danke.
fail
Code: Alles auswählen
new_weights = np.array([new_weights]) if len(new_weights.shape) == 1 else new_weights
Wenn es nichts eleganteres gibt.
Trotzdem danke.
fail
@fail: wenn es Dir nur im die Dimensionen geht:
Code: Alles auswählen
new_weights = new_weights.reshape(1,-1)