从Python Theano+Keras中提取神经网络激活值
Extraction of neural network activation values from Python Theano+Keras
假设我有 2 个 class 问题的简单 MLP 网络:
model = Sequential()
model.add(Dense(2, 10, init='uniform'))
model.add(Activation('tanh'))
model.add(Dense(10, 10, init='uniform'))
model.add(Activation('tanh'))
model.add(Dense(10, 2, init='uniform'))
model.add(Activation('softmax'))
训练该网络后,在调试模式下观察时,我无法在 W 对象中看到任何值。
它们是否存储在 Theano 的计算图中的某处,如果是,是否有可能获取它们?如果不是,为什么模型激活层中的所有值都是 None?
更新:
抱歉来得太快了。可以完美地找到来自 Dense 层的持有权重的张量对象。但是调用:
model.layers[1]
给我激活层。我想在哪里查看激活级别。相反,我只看到:
beta = 0.1
nb_input = 1
nb_output = 1
params = []
targets = 0
updates = []
我假设 keras 只是在模型评估后清除了所有这些值 - 这是真的吗?
如果是这样,记录神经元激活的唯一方法是创建自定义激活层来记录所需的信息——对吗?
我对 Keras 不熟悉,但如果它构建的是传统的 Theano 神经网络计算图,则无法按照您建议的方式查看激活值。
传统上,只有权重作为共享变量被持久存储。在 Theano 计算的中间阶段计算的值是瞬态的,只能通过调试已编译的 Theano 函数的执行来查看(请注意,这不容易做到——调试主机 Python 应用程序是不够的)。
如果您直接构建计算而不是使用 Keras,我建议您在 Theano 函数的输出值列表中包含您感兴趣的中间激活值。我无法评论如何通过 Keras 实现这一目标。
假设我有 2 个 class 问题的简单 MLP 网络:
model = Sequential()
model.add(Dense(2, 10, init='uniform'))
model.add(Activation('tanh'))
model.add(Dense(10, 10, init='uniform'))
model.add(Activation('tanh'))
model.add(Dense(10, 2, init='uniform'))
model.add(Activation('softmax'))
训练该网络后,在调试模式下观察时,我无法在 W 对象中看到任何值。
它们是否存储在 Theano 的计算图中的某处,如果是,是否有可能获取它们?如果不是,为什么模型激活层中的所有值都是 None?
更新:
抱歉来得太快了。可以完美地找到来自 Dense 层的持有权重的张量对象。但是调用:
model.layers[1]
给我激活层。我想在哪里查看激活级别。相反,我只看到:
beta = 0.1
nb_input = 1
nb_output = 1
params = []
targets = 0
updates = []
我假设 keras 只是在模型评估后清除了所有这些值 - 这是真的吗? 如果是这样,记录神经元激活的唯一方法是创建自定义激活层来记录所需的信息——对吗?
我对 Keras 不熟悉,但如果它构建的是传统的 Theano 神经网络计算图,则无法按照您建议的方式查看激活值。
传统上,只有权重作为共享变量被持久存储。在 Theano 计算的中间阶段计算的值是瞬态的,只能通过调试已编译的 Theano 函数的执行来查看(请注意,这不容易做到——调试主机 Python 应用程序是不够的)。
如果您直接构建计算而不是使用 Keras,我建议您在 Theano 函数的输出值列表中包含您感兴趣的中间激活值。我无法评论如何通过 Keras 实现这一目标。