2016-07-14 14 views
0

Ich habe Theano verwendet, um eine einfache lineare Regression zu machen. Jetzt möchte ich den Datensatz und die Linie zeigen, deren Steigung jedes Mal optimiert wird. Ich habe einen dynamischen Echtzeit-Plot gemacht, aber das Problem ist, dass es die vorherigen Plots behält. Ich möchte den Oroginal-Datensatz behalten und die neue Zeile jedes Mal neu zeichnen. Hier ist mein Code:Wie zeichne Echtzeit in Python, ohne vorherige Plots zu halten?

import theano 
from theano import tensor as T 
import numpy as np 
import matplotlib.pyplot as plt 


trX = np.linspace(-1, 1, 10) 
trY = 2 * trX + np.random.randn(*trX.shape) * 0.33 
# PLOT THE ORIGINAL DATASET 
plt.figure() 
plt.ion() 
plt.scatter(trX,trY) 

X = T.scalar() 
Y = T.scalar() 

def model(X, w): 
    return X * w 

w = theano.shared(np.asarray(0., dtype=theano.config.floatX)) 
y = model(X, w) 

cost = T.mean(T.sqr(y - Y)) 
gradient = T.grad(cost=cost, wrt=w) 
updates = [[w, w - gradient * 0.01]] 

train = theano.function(inputs=[X, Y], outputs=cost, updates=updates,  allow_input_downcast=True) 

for i in range(10): 
    for x, y in zip(trX, trY): 
     train(x, y) 
     Weight = w.get_value() 
     ablineValues = [] 
     for i in trX: 
      ablineValues.append(Weight*i) 
     # PLOT THE NEW OPTIMISED LINE 
     plt.plot(trX,ablineValues,'r') 
     plt.pause(0.0000001) 

plt.show() 

Wissen Sie, wie ich das tun kann? Ich habe andere verwandte Probleme gelesen, aber immer noch kann ich es nicht schaffen. Bitte leiten Sie mich auf eine gute Seite, wenn Sie denken, dass sie mir helfen kann.

+0

http://stackoverflow.com/questions/8213522/matplotlib-clearing-a-plot-when-to-use-cla-clf- oder-nah? –

Antwort

0

Vielleicht verstehe ich Ihre Frage nicht (ich wollte einen Kommentar schreiben, aber ich kann nicht ...) Warum löschen Sie nicht die vorherige Grafik jedes Mal, wenn Sie eine neue erstellen? Oder geben Sie der Datei, in der das Diagramm erstellt wird, einen Namen, damit jedes Mal, wenn Sie ein neues erstellen, die Datei mit dem gleichen Namen gelöscht wird. Vielleicht finden Sie this nützlich.

+0

Ich habe solche Methoden zum Erstellen und Löschen nicht verwendet. irgendwie schneller. Wie auch immer, ich habe es gefunden. von 'axes = plt.gca()' und 'axes.lines = []' vor 'plt.plot (trX, ablineValues, 'r')' Ich habe es geschafft. Vielen Dank. – user6352340

0

Mit plot_handle.set_ydata (Vektorisierung und ein Bit)

import theano 
from theano import tensor as T 
import numpy as np 
import matplotlib.pyplot as plt 


trX = np.linspace(-1, 1, 10) 
trY = 2 * trX + np.random.randn(*trX.shape) * 0.33 
# PLOT THE ORIGINAL DATASET 
plt.figure() 
plt.ion() 
plt.scatter(trX,trY) 

X = T.scalar() 
Y = T.scalar() 

def model(X, w): 
    return X * w 

w = theano.shared(np.asarray(0., dtype=theano.config.floatX)) 
y = model(X, w) 

cost = T.mean(T.sqr(y - Y)) 
gradient = T.grad(cost=cost, wrt=w) 
updates = [[w, w - gradient * 0.01]] 

train = theano.function(inputs=[X, Y], outputs=cost, updates=updates,  allow_input_downcast=True) 

h, = plt.plot(trX,np.zeros(trX.shape)+np.nan,'r') # INITIALIZE YOUR PLOT 
for i in range(10): 
    for x, y in zip(trX, trY): 
     train(x, y) 
     Weight = w.get_value() 
     ablineValues = Weight*trX # VECTORIZE! 
     # PLOT THE NEW OPTIMISED LINE 
     h.set_ydata(ablineValues) # SET DATA INSTEAD OF REPLOTTING IT 
     plt.pause(0.0000001) 

plt.show() 
Verwandte Themen