Github项目推荐 | Keract - Keras中的激活映射(层输出)和渐变

2019-05-08 17:26:11 浏览数 (1)

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约定。
代码语言:javascript复制
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

0 人点赞