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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
Python装饰器的函数式编程详解
Feb 27 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
Python环境下安装使用异步任务队列包Celery的基础教程
May 07 Python
Python发送http请求解析返回json的实例
Mar 26 Python
python使用Matplotlib画条形图
Mar 25 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
Python元组知识点总结
Feb 18 Python
python实现函数极小值
Jul 10 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
Python如何使用字符打印照片
Jan 03 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 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 curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
举例区分Python中的浅复制与深复制
2015/07/02 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
python实现大文件分割与合并
2019/07/22 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
三个Unix的命令面试题
2015/04/12 面试题
银行实习生的自我评价
2013/12/09 职场文书
三八妇女节标语
2014/10/09 职场文书
普通党员整改措施
2014/10/24 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
赤壁观后感(2)
2015/06/15 职场文书
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技