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


Posted in Python onJune 29, 2020

如下所示:

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获取某层的输出操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理圆角图片、圆形图片的例子
Apr 25 Python
详解Python中__str__和__repr__方法的区别
Apr 17 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
May 16 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
Python生成rsa密钥对操作示例
Apr 26 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
Python如何将函数值赋给变量
Apr 28 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
Python pytesseract验证码识别库用法解析
Jun 29 #Python
用Python开发app后端有优势吗
Jun 29 #Python
在keras里实现自定义上采样层
Jun 28 #Python
Python如何对XML 解析
Jun 28 #Python
keras 自定义loss层+接受输入实例
Jun 28 #Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 #Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
Jun 28 #Python
You might like
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
python对数组进行反转的方法
2015/05/20 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
python感知机实现代码
2019/01/18 Python
python绘制漏斗图步骤详解
2019/03/04 Python
python3调用windows dos命令的例子
2019/08/14 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
基于Pytorch SSD模型分析
2020/02/18 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
物理研修随笔感言
2014/02/14 职场文书
初一学生评语大全
2014/04/24 职场文书
春季运动会加油词
2015/07/18 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript