gpt4 book ai didi

callback - 如何监控 Theano/Keras 中的张量值?

转载 作者:行者123 更新时间:2023-12-02 06:29:13 25 4
gpt4 key购买 nike

我知道这个问题已经以各种形式被问到,但我真的找不到任何我可以理解和使用的答案。如果这是一个基本问题,请原谅我,因为我是这些工具(theano/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

有什么方法我无法监视它们(例如打印到标准输出、写入文件等)吗?

可能的解决方案

似乎 Keras 中的回调可以完成这项工作,但它对我来说也不起作用。我得到了与上面相同的结果

我的猜测

看来我犯了非常简单的错误。

提前非常感谢大家。

<小时/>

已添加

具体来说,我正在尝试监视 LSTM 中的输入/忘记/输出门控值。我发现 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]

正如上面的代码所示,我尝试将 i 的值写入文件,但它只给了我这样的值:

Elemwise{mul,no_inplace}.0
[for{cpu,scan_fn}.2, Subtensor{int64::}.0, Subtensor{int64::}.0]
Subtensor{int64}.0

所以我尝试了 i.eval() 或 i.get_value(),但都未能给我值。

.eval() 给了我这个:

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() 给了我这个:

AttributeError: 'TensorVariable' object has no attribute 'get_value'

所以我回溯了这些链(哪一行调用了哪些函数..)并尝试在我发现的每个步骤中获取值,但徒劳无功。

感觉我陷入了一些基本的陷阱。

最佳答案

我使用 Keras 常见问题解答中描述的解决方案:

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]

产量:

array([[ 3.,  17.]], dtype=float32)

但是我想使用函数式 API,但我似乎无法获得实际的张量,只能获得符号表示。例如:

model.layers[1].output

产量:

<tf.Tensor 'add:0' shape=(?, 2) dtype=float32>

我在这里遗漏了一些有关 Keras 和 Tensorflow 交互的信息,但我不确定是什么。非常感谢任何见解。

关于callback - 如何监控 Theano/Keras 中的张量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com