erste die Achsen nicht übereinstimmen-array-Fehler, wenn Sie versuchen zu visualisieren, die alle Ebenen im caffe mit Klassifizierung.ipny
Ich bin ein Neuling in python und habe eine sehr grundlegende Kenntnisse der Sprache, gesagt haben, dass ich versuche, die Visualisierung für alle Ebenen, sowohl für die GEWICHTE und die Filter.Für diese, anstatt zu wiederholen:
# the parameters are a list of [weights, biases]
filters = net.params['conv1'][0].data
vis_square(filters.transpose(0, 2, 3, 1))
und ändern von layer-Namen, ich habe versucht, über eine Schleife wie diese :
for layer_name, param in net.params.iteritems():
# the parameters are a list of [weights, biases]
filters = net.params[layer_name][0].data
vis_square(filters.transpose(0, 2, 3, 1))
nun, es funktioniert gut für die erste Schicht, sondern Sie gibt diesen Fehler und beendet die Ausführung:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-16-cf7d5999a45c> in <module>()
2 # the parameters are a list of [weights, biases]
3 filters = net.params[layer_name][0].data
----> 4 vis_square(filters.transpose(0, 2, 3, 1))
ValueError: axes don't match array
- Und das ist die definition von vis_square()
(definiert in der Klassifizierung.ipny im Beispiel-Verzeichnis von caffe):
def vis_square(data):
"""Take an array of shape (n, height, width) or (n, height, width, 3)
and visualize each (height, width) thing in a grid of size approx. sqrt(n) by sqrt(n)"""
# normalize data for display
data = (data - data.min()) / (data.max() - data.min())
# force the number of filters to be square
n = int(np.ceil(np.sqrt(data.shape[0])))
padding = (((0, n ** 2 - data.shape[0]),
(0, 1), (0, 1)) # add some space between filters
+ ((0, 0),) * (data.ndim - 3)) # don't pad the last dimension (if there is one)
data = np.pad(data, padding, mode='constant', constant_values=1) # pad with ones (white)
# tile the filters into an image
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
plt.imshow(data); plt.axis('off')
Was ist hier falsch?
Ich wäre dankbar, wenn jemand kann mir eine hand auf diese.
InformationsquelleAutor Breeze | 2016-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für die nachfolgenden Schichten, die Anzahl der Kanäle ist > 64. Zum Beispiel, wenn Sie haben
num_output: 64
in der ersten Schicht und dernum_output: 64
in der zweiten als gut, die Form der 4D-matrix speichert die GEWICHTE64 x 64 x height x width
. Nachdem Sie die transpose, es ist64 x height x width x 64
.Ihre Funktion ist nicht in der Lage Umgang mit einem 64-Schicht-Objekt, auch wenn es gut für 3-Schicht-Objekten.
Würde ich nur tun
n = int(np.ceil(np.sqrt(data.shape[0] * data.shape[3])))
und gestalten die ganze Sache in eine 1-Schicht-Objekt. Ich glaube nicht, dass die Visualisierung der convolution kernel als RGB-geben Sie Ihnen keine Einsicht.InformationsquelleAutor gunner
Für alle mit ähnlichen problem ("Achsen nicht übereinstimmen array" - Fehler): Rechts vor der Umsetzung, ich habe meine Daten in eine variable geben die genaue Größe. Wenn meine Daten mit der Größe von 10*12*15:
dieser arbeitete für mich.
InformationsquelleAutor Sanaz