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 时间处理datetime实例
Sep 06 Python
详解Python中的多线程编程
Apr 09 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
网站渗透常用Python小脚本查询同ip网站
May 08 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
python里运用私有属性和方法总结
Jul 08 Python
python设计tcp数据包协议类的例子
Jul 23 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
python实现梯度下降法
Mar 24 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
Python filter过滤器原理及实例应用
Aug 18 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
NT IIS下用ODBC连接数据库
2006/10/09 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
php检测url是否存在的方法
2015/04/14 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
Javascript中的包装类型介绍
2015/04/02 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
Python基础之函数用法实例详解
2014/09/10 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
美国折扣网站:jClub
2017/08/07 全球购物
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
四年级下册教学反思
2014/02/01 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
材料员岗位职责范本
2015/04/11 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书