Ich weiß, dass diese Frage in verschiedenen Formen gestellt wurde, aber ich kann wirklich keine Antwort finden, die ich verstehen und verwenden kann. Also verzeiht mir, wenn dies eine grundlegende Frage ist, denn ich ein Neuling auf diese Tools bin (Theano/keras)Wie kann man Tensor-Werte in Theano/Keras überwachen?
Problem zu lösen
Monitor-Variablen in Neuronale Netze (zB Eingabe/vergessen/Ausgangs-Gate-Werte in LSTM)
Was ich zur Zeit immer
egal in welchem Stadium ich diese Werte immer, ich bin immer so etwas wie:
Elemwise{mul,no_inplace}.0
Elemwise{mul,no_inplace}.0
[for{cpu,scan_fn}.2, Subtensor{int64::}.0, Subtensor{int64::}.0]
[for{cpu,scan_fn}.2, Subtensor{int64::}.0, Subtensor{int64::}.0]
Subtensor{int64}.0
Subtensor{int64}.0
Gibt es eine Möglichkeit, die ich nicht überwachen kann (z. B. auf stdout drucken, in eine Datei schreiben usw.)?
Mögliche Lösung
Scheint, wie Rückrufe in Keras kann die Arbeit erledigen, aber es funktioniert auch nicht für mich. Ich bin immer gleiche wie oben
Meine Vermutung
Scheint, wie ich bin sehr einfach, Fehler zu machen.
Vielen Dank im Voraus, alle.
ADDED
Insbesondere, ich versuche Eingang zu überwachen/vergessen/Ausgabe-Gating-Werte in LSTM. fand ich, dass LSTM.step() ist diesen Wert zur Berechnung:
def step(self, x, states):
h_tm1 = states[0] # hidden state of the previous time step
c_tm1 = states[1] # cell state from the previous time step
B_U = states[2] # dropout matrices for recurrent units?
B_W = states[3] # dropout matrices for input units?
if self.consume_less == 'cpu': # just cut x into 4 pieces in columns
x_i = x[:, :self.output_dim]
x_f = x[:, self.output_dim: 2 * self.output_dim]
x_c = x[:, 2 * self.output_dim: 3 * self.output_dim]
x_o = x[:, 3 * self.output_dim:]
else:
x_i = K.dot(x * B_W[0], self.W_i) + self.b_i
x_f = K.dot(x * B_W[1], self.W_f) + self.b_f
x_c = K.dot(x * B_W[2], self.W_c) + self.b_c
x_o = K.dot(x * B_W[3], self.W_o) + self.b_o
i = self.inner_activation(x_i + K.dot(h_tm1 * B_U[0], self.U_i))
f = self.inner_activation(x_f + K.dot(h_tm1 * B_U[1], self.U_f))
c = f * c_tm1 + i * self.activation(x_c + K.dot(h_tm1 * B_U[2], self.U_c))
o = self.inner_activation(x_o + K.dot(h_tm1 * B_U[3], self.U_o))
with open("test_visualization.txt", "a") as myfile:
myfile.write(str(i)+"\n")
h = o * self.activation(c)
return h, [h, c]
Und wie es oben im Code ist, habe ich versucht, den Wert von i in eine Datei zu schreiben, aber es gab nur Werte mich wie: So
Elemwise{mul,no_inplace}.0
[for{cpu,scan_fn}.2, Subtensor{int64::}.0, Subtensor{int64::}.0]
Subtensor{int64}.0
ich versuchte i.eval() oder i.get_value(), aber beide scheiterten mir Wert zu geben.
.eval() gab mir dies:
theano.gof.fg.MissingInputError: An input of the graph, used to compute Subtensor{::, :int64:}(<TensorType(float32, matrix)>, Constant{10}), was not provided and not given a value.Use the Theano flag exception_verbosity='high',for more information on this error.
und .get_value() gab mir dies:
AttributeError: 'TensorVariable' object has no attribute 'get_value'
So Rückzieher ich diese Ketten (die Linie nennt, welche Funktionen ..) und Ich versuchte bei jedem Schritt Werte zu finden, aber vergeblich.
Fühlt sich an, als ob ich in einigen grundlegenden Fallstricke bin.
Wie erhalten Sie die Werte? Fügen Sie Ihren Code ein, anscheinend drucken Sie die symbolischen Variablen und nicht ihre Werte. –
Vielen Dank für Ihre schnelle Antwort @MatiasValdenegro. Ich habe meine Frage oben mit Codes und Fehlermeldungen aktualisiert. – totuta