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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
利用Python实现Windows定时关机功能
Mar 21 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
python统计中文字符数量的两种方法
Jan 31 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
Python 通过打码平台实现验证码的实现
May 13 Python
python3 map函数和filter函数详解
Aug 26 Python
python实现的汉诺塔算法示例
Oct 23 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
php自定义session示例分享
2014/04/22 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
angularjs基础教程
2014/12/25 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
浅析JavaScript回调函数应用
2016/05/22 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python操作MySQL数据库的方法
2018/06/20 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
介绍一下OSI七层模型
2012/07/03 面试题
教师个人鉴定材料
2014/02/08 职场文书
本科毕业生自荐信
2014/05/26 职场文书
经营目标管理责任书
2014/07/25 职场文书
三严三实学习心得体会
2014/10/13 职场文书
教师党员批评与自我批评
2014/10/15 职场文书