keras K.function获取某层的输出操作

 更新时间:2020年06月29日 08:43:48   作者:脱贫&&脱单&&不脱发  
这篇文章主要介绍了keras K.function获取某层的输出操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下所示:

from keras import backend as K
from keras.models import load_model

models = load_model('models.hdf5')
image=r'image.png'
images=cv2.imread(r'image.png')
image_arr = process_image(image, (224, 224, 3))
image_arr = np.expand_dims(image_arr, axis=0)
layer_1 = K.function([base_model.get_input_at(0)], [base_model.get_layer('layer_name').output])
f1 = layer_1([image_arr])[0]

加载训练好并保存的网络模型

加载数据(图像),并将数据处理成array形式

指定输出层

将处理后的数据输入,然后获取输出

其中,K.function有两种不同的写法:

1. 获取名为layer_name的层的输出

layer_1 = K.function([base_model.get_input_at(0)], [base_model.get_layer('layer_name').output]) #指定输出层的名称

2. 获取第n层的输出

layer_1 = K.function([model.get_input_at(0)], [model.layers[5].output]) #指定输出层的序号(层号从0开始)

另外,需要注意的是,书写不规范会导致报错:

报错:

TypeError: inputs to a TensorFlow backend function should be a list or tuple

将该句:

f1 = layer_1(image_arr)[0]

修改为:

f1 = layer_1([image_arr])[0]

补充知识:keras.backend.function()

如下所示:

def function(inputs, outputs, updates=None, **kwargs):
 """Instantiates a Keras function.
 Arguments:
   inputs: List of placeholder tensors.
   outputs: List of output tensors.
   updates: List of update ops.
   **kwargs: Passed to `tf.Session.run`.
 Returns:
   Output values as Numpy arrays.
 Raises:
   ValueError: if invalid kwargs are passed in.
 """
 if kwargs:
  for key in kwargs:
   if (key not in tf_inspect.getargspec(session_module.Session.run)[0] and
     key not in tf_inspect.getargspec(Function.__init__)[0]):
    msg = ('Invalid argument "%s" passed to K.function with Tensorflow '
        'backend') % key
    raise ValueError(msg)
 return Function(inputs, outputs, updates=updates, **kwargs)

这是keras.backend.function()的源码。其中函数定义开头的注释就是官方文档对该函数的解释。

我们可以发现function()函数返回的是一个Function对象。下面是Function类的定义。

class Function(object):
 """Runs a computation graph.
 Arguments:
   inputs: Feed placeholders to the computation graph.
   outputs: Output tensors to fetch.
   updates: Additional update ops to be run at function call.
   name: a name to help users identify what this function does.
 """

 def __init__(self, inputs, outputs, updates=None, name=None,
        **session_kwargs):
  updates = updates or []
  if not isinstance(inputs, (list, tuple)):
   raise TypeError('`inputs` to a TensorFlow backend function '
           'should be a list or tuple.')
  if not isinstance(outputs, (list, tuple)):
   raise TypeError('`outputs` of a TensorFlow backend function '
           'should be a list or tuple.')
  if not isinstance(updates, (list, tuple)):
   raise TypeError('`updates` in a TensorFlow backend function '
           'should be a list or tuple.')
  self.inputs = list(inputs)
  self.outputs = list(outputs)
  with ops.control_dependencies(self.outputs):
   updates_ops = []
   for update in updates:
    if isinstance(update, tuple):
     p, new_p = update
     updates_ops.append(state_ops.assign(p, new_p))
    else:
     # assumed already an op
     updates_ops.append(update)
   self.updates_op = control_flow_ops.group(*updates_ops)
  self.name = name
  self.session_kwargs = session_kwargs

 def __call__(self, inputs):
  if not isinstance(inputs, (list, tuple)):
   raise TypeError('`inputs` should be a list or tuple.')
  feed_dict = {}
  for tensor, value in zip(self.inputs, inputs):
   if is_sparse(tensor):
    sparse_coo = value.tocoo()
    indices = np.concatenate((np.expand_dims(sparse_coo.row, 1),
                 np.expand_dims(sparse_coo.col, 1)), 1)
    value = (indices, sparse_coo.data, sparse_coo.shape)
   feed_dict[tensor] = value
  session = get_session()
  updated = session.run(
    self.outputs + [self.updates_op],
    feed_dict=feed_dict,
    **self.session_kwargs)
  return updated[:len(self.outputs)]

所以,function函数利用我们之前已经创建好的comuptation graph。遵循计算图,从输入到定义的输出。这也是为什么该函数经常用于提取中间层结果。

以上这篇keras K.function获取某层的输出操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在django admin中配置搜索域是一个外键时的处理方法

    在django admin中配置搜索域是一个外键时的处理方法

    这篇文章主要介绍了在django admin中配置搜索域是一个外键时的处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python 列表中的修改、添加和删除元素的实现

    Python 列表中的修改、添加和删除元素的实现

    这篇文章主要介绍了Python 列表中的修改、添加和删除元素的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Python学习之用pygal画世界地图实例

    Python学习之用pygal画世界地图实例

    这篇文章主要介绍了Python学习之用pygal画世界地图实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 如何使用pyinstaller打包多个和单个python文件详解

    如何使用pyinstaller打包多个和单个python文件详解

    最近需要将python写的程序打包分发给其他同事使用,下面这篇文章主要给大家介绍了关于如何使用pyinstaller打包多个和单个python文件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Python使用爬虫爬取静态网页图片的方法详解

    Python使用爬虫爬取静态网页图片的方法详解

    这篇文章主要介绍了Python使用爬虫爬取静态网页图片的方法,较为详细的说明了爬虫的原理,并结合实例形式分析了Python使用爬虫来爬取静态网页图片的相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • Django + Taro 前后端分离项目实现企业微信登录功能

    Django + Taro 前后端分离项目实现企业微信登录功能

    这篇文章主要介绍了Django + Taro 前后端分离项目实现企业微信登录功能,本文记录一下企业微信登录的流程,结合示例代码给大家分享实现思路,需要的朋友可以参考下
    2022-04-04
  • python 针对在子文件夹中的md文档实现批量md转word

    python 针对在子文件夹中的md文档实现批量md转word

    这篇文章主要介绍了python 针对在子文件夹中的md文档实现批量md转word,但是自己保存的md文档在不同的文件夹,而大部分只能实现同一文件夹内的转换,得出下列总结,需要的朋友可以参考一下
    2022-04-04
  • Python实现元素等待代码实例

    Python实现元素等待代码实例

    这篇文章主要介绍了python实现元素等待代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • python加载自定义词典实例

    python加载自定义词典实例

    今天小编就为大家分享一篇python加载自定义词典实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python实现读取Excel文件并复制指定的数据行

    Python实现读取Excel文件并复制指定的数据行

    这篇文章主要介绍了如何基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,感兴趣的可以了解一下
    2023-07-07

最新评论