Keract: Keras Activations Gradients
by philipperemy
代码语言:javascript复制pip install keract
这是获取Keras模型(LSTM,转换网......)中每一层的激活(输出)和渐变的一个简单方法。
Github项目地址:
https://github.com/philipperemy/keract#get-activations-outputs-of-each-layer (点击链接可直接打开)
API
- get_activations
- get_gradients_of_trainable_weights
- get_gradients_of_activations
get_activations 获取激活(每层的输出)
代码语言:javascript复制from keract import get_activationsget_activations(model, x)
输入为:
- model是一个keras.models.Model对象。
- x 是一个numpy数组,作为输入提供给模型,在多端输入的情况下,x是List类型。我们使用Keras约定(来进行预测、适应等......)。
输出以字典形式呈现,包含输入x的每个model层的激活:
代码语言:javascript复制{ 'conv2d_1/Relu:0': np.array(...), 'conv2d_2/Relu:0': np.array(...), ..., 'dense_2/Softmax:0': np.array(...)}
键是层的名称,值是给定输入x对应的层的输出。
获得权重梯度
- model是一个keras.models.Model对象。
- x输入数据(numpy数组)。 Keras约定。
- y:标签(numpy数组)。 Keras约定。
from keract import get_gradients_of_activationsget_gradients_of_activations(model, x, y)
输出以字典形式呈现,将每个可训练权重映射到其梯度值(关于x和y)。
示例
提供的示例包括:
- keras.models.Sequential - mnist.py
- keras.models.Model - multi_inputs.py
- 递归网络 - recurrent.py
对于带有LeNet的MNIST,我们可以获取一批大小为128的激活:
代码语言:javascript复制conv2d_1/Relu:0(128, 26, 26, 32)
conv2d_2/Relu:0(128, 24, 24, 64)
max_pooling2d_1/MaxPool:0(128, 12, 12, 64)
dropout_1/cond/Merge:0(128, 12, 12, 64)
flatten_1/Reshape:0(128, 9216)
dense_1/Relu:0(128, 128)
dropout_2/cond/Merge:0(128, 128)
dense_2/Softmax:0(128, 10)
我们可以将激活具体化。以下是使用VGG16的另一个例子:
代码语言:javascript复制cd examplespython vgg16.py
一只猫
VGG16的第一个卷积层的输出。
此外,我们可以看见激活的热图:
代码语言:javascript复制cd examplespython heat_map.py