2017-07-16 16 views
1

Der folgende Code bereitgestellt in the matplotlib documentation erstellt Hinton Diagramme:pdfpages in Matplotlib spart die gleiche Zahl zweimal

def hinton(matrix, max_weight=None, ax=None): 
    """Draw Hinton diagram for visualizing a weight matrix.""" 
    ax = ax if ax is not None else plt.gca() 

    if not max_weight: 
     max_weight = 2 ** np.ceil(np.log(np.abs(matrix).max())/np.log(2)) 

    ax.patch.set_facecolor('gray') 
    ax.set_aspect('equal', 'box') 
    ax.xaxis.set_major_locator(pl.NullLocator()) 
    ax.yaxis.set_major_locator(pl.NullLocator()) 

    for (x, y), w in np.ndenumerate(matrix): 
     color = 'white' if w > 0 else 'black' 
     size = np.sqrt(np.abs(w)/max_weight) 
     rect = pl.Rectangle([x - size/2, y - size/2], size, size, 
          facecolor=color, edgecolor=color) 
     ax.add_patch(rect) 

    ax.autoscale_view() 
    ax.invert_yaxis() 

Ich möchte zwei Hinton Diagramme erstellen: eine für die Gewichte von dem Eingang zu der verborgenen Schicht gehen, und einer geht von der versteckten Ebene zur Ausgabeebene in meinem Einschicht-MLP. Ich habe versucht (based on this jupyter notebook):

W = model_created.layers[0].kernel.get_value(borrow=True) 
W = np.squeeze(W) 
print("W shape : ", W.shape) # (153, 15) 

W_out = model_created.layers[1].kernel.get_value(borrow=True) 
W_out = np.squeeze(W_out) 
print('W_out shape : ', W_out.shape) # (15, 8) 

with PdfPages('hinton_again.pdf') as pdf: 
    h1 = hinton(W) 
    h2 = hinton(W_out) 
    pdf.savefig() 

Ich habe auch versucht (based on this answer):

h1 = hinton(W) 
h2 = hinton(W_out) 

pp = PdfPages('hinton_both.pdf') 
pp.savefig(h1) 
pp.savefig(h2) 
pp.close() 

Unabhängig davon, ist das Ergebnis das gleiche: die Hinton Diagramm für W zweimal aufgetragen wird. Wie kann ich ein Hinton-Diagramm für meinen ersten Satz von Gewichten und ein Hinton-Diagramm für meinen zweiten Satz von Gewichten in dasselbe PDF einfügen (ich würde mich auch für zwei separate PDFs entscheiden, solange ich beide Hinton-Diagramme bekommen kann)?

Antwort

1

Der Befehl pdf.savefig() speichert die aktuelle Zahl. Da es nur eine aktuelle Zahl gibt, wird sie zweimal gespeichert. Um zwei Zahlen zu erhalten, müssen sie erstellt werden, z.B. über plt.figure(1) und plt.figure(2).

with PdfPages('hinton_again.pdf') as pdf: 
    plt.figure(1) 
    h1 = hinton(W) 
    pdf.savefig() 
    plt.figure(2) 
    h2 = hinton(W_out) 
    pdf.savefig() 

Es gibt natürlich jede Menge unterschiedlicher Weise sind die beiden Grundstücke zu speichern, anotherone könnte

fig, ax = plt.subplots() 
hinton(W, ax=ax) 

fig2, ax2 = plt.subplots() 
hinton(W_out, ax=ax2) 

with PdfPages('hinton_again.pdf') as pdf: 
    pdf.savefig(fig) 
    pdf.savefig(fig2) 
+0

Brilliant sein! Vielen Dank. Die einzige Änderung, die ich hinzufügte, war, pl.figure (1) und pl.figure (2) zu verwenden, da ich pylot als pl importierte, nicht pt – StatsSorceress

+0

Während Sie natürlich "matplotlib.pyplot als xasepgoah" importieren können oder was auch immer Sie mögen, Ich denke, es ist am besten, beim Matplotlib-Stil zu bleiben, wenn man 'plt' verwendet, wenn man Fragen zu SO stellt und beantwortet. Beachten Sie auch, dass die empfohlene Art und Weise, Ihre Dankbarkeit zu zeigen (https://stackoverflow.com/help/someone-answers), darin besteht, die Antworten, die Sie auf Ihre Fragen erhalten, zu verbessern. – ImportanceOfBeingErnest

Verwandte Themen