Wenn Sie die Parameter eines Modells optimieren, können Sie die Arbeit verbessern, indem Sie sie in einem Diagramm anzeigen und den Lernfortschritt in Echtzeit beobachten. Ich werde das Skript vorstellen, das ich erstellt habe, als das Tensorboard aufgrund unzureichender GPU-Ressourcen nicht angezeigt werden konnte, als die Berechnung auf dem Client-Computer ausgeführt wurde. Wenn Sie es in einem anderen Skript verwenden möchten, können Sie es so verwenden, wie es ist, wenn Sie es mit import realtime_plot lesen und realtime_plot als Klasse deklariert haben.
realtime_plot.py
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
#Ändern Sie die Standardeinstellungen von matplotlib
font = {'family':'monospace', 'size':'9'}
mpl.rc('font', **font)
class realtime_plot(object):
def __init__(self):
self.fig = plt.figure(figsize=(12,8))
self.initialize()
def initialize(self):
self.fig.suptitle('monitoring sample', size=12)
self.fig.subplots_adjust(left=0.05, bottom=0.1, right=0.95, top=0.90, wspace=0.2, hspace=0.6)
self.ax00 = plt.subplot2grid((2,2),(0,0))
self.ax10 = plt.subplot2grid((2,2),(1,0))
self.ax01 = plt.subplot2grid((2,2),(0,1))
self.ax11 = plt.subplot2grid((2,2),(1,1))
self.ax00.grid(True)
self.ax10.grid(True)
self.ax01.grid(True)
self.ax11.grid(True)
self.ax00.set_title('real time result')
self.ax10.set_title('histogram')
self.ax01.set_title('correlation')
self.ax11.set_title('optimized result')
self.ax00.set_xlabel('x')
self.ax00.set_ylabel('y')
self.ax01.set_xlabel('correct')
self.ax01.set_ylabel('predict')
self.ax11.set_xlabel('correct')
self.ax11.set_ylabel('predict')
#Plotinitialisierung
self.lines000, = self.ax00.plot([-1,-1],[1,1],label='y1')
self.lines001, = self.ax00.plot([-1,-1],[1,1],label='y2')
self.lines100 = self.ax10.hist([-1,-1],label='res1')
self.lines101 = self.ax10.hist([-1,-1],label='res2')
self.lines01, = self.ax01.plot([-1,-1],[1,1],'.')
self.lines11, = self.ax11.plot([-1,-1],[1,1],'.r')
#Ersetzen Sie die erforderlichen Daten in den Unterplotwert aus den Wörterbuchtypdaten, denen der Wertname und der Wert zugewiesen sind.
def set_data(self,data):
self.lines000.set_data(data['x'],data['y1'])
self.lines001.set_data(data['x'],data['y2'])
self.ax00.set_xlim((data['x'].min(),data['x'].max()))
self.ax00.set_ylim((-1.2,1.2))
#Muss die Legende reparieren
self.ax00.legend(loc='upper right')
self.lines01.set_data(data['corr'],data['pred'])
self.ax01.set_xlim((-2,12))
self.ax01.set_ylim((-2,12))
#Das Histogramm wird eingestellt_Da keine Daten vorhanden sind, werden diese bei jeder Aktualisierung neu erstellt.
self.ax10.cla()
self.ax10.set_title('histogram')
self.ax10.grid(True)
self.lines100 = self.ax10.hist(data['corr'],label='corr')
self.lines101 = self.ax10.hist(data['pred'],label='pred')
self.ax10.set_xlim((-0.5,9.5))
self.ax10.set_ylim((0,20))
self.ax10.legend(loc='upper right')
#Wenn Sie den Titel oder Text aktualisieren, bleibt der Wert vor der Aktualisierung in der Abbildung erhalten. Erstellen Sie ihn daher bei jeder Aktualisierung neu.
bbox_props = dict(boxstyle='square,pad=0.3',fc='gray')
self.ax11.cla()
self.ax11.grid(True)
self.ax11.set_xlabel('correct')
self.ax11.set_ylabel('predict')
self.ax11.set_title('optimized result')
self.ax11.text(-1.5,10.5,data['text'], ha='left', va='center',size=11,bbox=bbox_props)
self.lines = self.ax11.plot(data['opt_corr'],data['opt_pred'],'.')
self.ax11.set_xlim((-2,12))
self.ax11.set_ylim((-2,12))
def pause(self,second):
plt.pause(second)
#Anwendungsbeispiel
RP = realtime_plot()
data = {}
x = np.arange(-np.pi,np.pi,0.1)
y1 = np.sin(x)
y2 = np.cos(x)
opt_coef = 0
while True:
x += 0.1
y1 = np.sin(x)
y2 = np.cos(x)
corr = np.random.randint(0,10,20)
pred = np.random.randint(0,10,20)
c = np.random.normal(0,1,1)
data['x'] = np.pi * x
data['y1'] = y1
data['y2'] = y2
data['corr'] = corr
data['pred'] = pred
coef = np.corrcoef(c*corr,pred)[0,1]
if abs(coef) > abs(opt_coef):
data['opt_corr'] = corr
data['opt_pred'] = pred
data['text'] = 'c = ' + str(c[0])
opt_coef = coef
RP.set_data(data)
RP.pause(0.1)
Recommended Posts