मुझे पता है कि इस सवाल को विभिन्न रूपों में पूछा गया है, लेकिन मुझे वास्तव में कोई जवाब नहीं मिल रहा है जिसे मैं समझ सकता हूं और उपयोग कर सकता हूं। तो, मुझे माफ कर दो अगर यह एक बुनियादी सवाल यह है कि क्योंकि मैं इन उपकरणों (थेनो/keras) के लिए एक नौसिखिया हूँथेनो/केरास में टेंसर मूल्यों की निगरानी कैसे करें?
समस्या तंत्रिका नेटवर्क में
मॉनिटर चर का समाधान करने के लिए (उदाहरण के लिए इनपुट/भूलना/LSTM में उत्पादन गेट मान)
क्या मैं वर्तमान में हो रही है
कोई फर्क नहीं पड़ता जो मंच मैं उन मूल्यों में हो रही है, मैं की तरह कुछ हो रही है:
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
क्या कोई तरीका है जिस पर मैं निगरानी नहीं कर सकता (उदा। stdout पर प्रिंट करें, एक फाइल को लिखें, आदि) उन्हें?
संभव समाधान
Keras में कॉलबैक काम कर सकते हैं की तरह लगता है, लेकिन यह या तो मेरे लिए काम नहीं करता। मैं
ऊपर मेरा अनुमान है के रूप में एक ही बात हो रही है
लगता है जैसे मैं बहुत ही सरल गलतियों रहा हूँ।
अग्रिम में बहुत पहले धन्यवाद।
जोड़ा विशेष रूप से, मैं इनपुट की निगरानी/LSTM में भूल जाते हैं/आउटपुट gating मूल्यों के लिए कोशिश कर रहा हूँ। मैंने पाया कि LSTM.step() उन मूल्यों की गणना के लिए है:
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]
और के रूप में यह उपरोक्त कोड में है, मैं एक फ़ाइल में मैं के मूल्य में लिखने का प्रयास किया, लेकिन यह केवल मेरे जैसे बहुत महत्व दिया:
Elemwise{mul,no_inplace}.0
[for{cpu,scan_fn}.2, Subtensor{int64::}.0, Subtensor{int64::}.0]
Subtensor{int64}.0
तो मैं i.eval() या i.get_value() की कोशिश की, लेकिन दोनों मुझे मान देने के लिए विफल रहा है।
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.
और .get_value() मुझे यह दिया:
.eval() मुझे यह दिया
AttributeError: 'TensorVariable' object has no attribute 'get_value'
तो मैं उन जंजीरों पीछे हट गए हैं (जो लाइन कॉल जो कार्यों ..) और मैंने पाया हर कदम पर मूल्य प्राप्त करने की कोशिश की लेकिन व्यर्थ में।
ऐसा लगता है कि मैं कुछ बुनियादी नुकसान में हूं।
http://keras.io/getting-started/faq/#how-can-i-visualize-the-output-of-an-intermediate-layer
विस्तार में:
from keras import backend as K
intermediate_tensor_function = K.function([model.layers[0].input],[model.layers[layer_of_interest].output])
intermediate_tensor = intermediate_tensor_function([thisInput])[0]
पैदावार:
बनाने के लिए उपयोगी है आप मूल्य कैसे प्राप्त कर रहे हैं? अपना कोड शामिल करें, ऐसा लगता है कि आप प्रतीकात्मक चर प्रिंट कर रहे हैं, न कि उनके मूल्य। –
आपके त्वरित उत्तर @MatiasValdenegro के लिए बहुत बहुत धन्यवाद। मैंने कोड और त्रुटि संदेशों के साथ ऊपर अपना प्रश्न अपडेट किया। – totuta