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回调函数用法实例详解
Jul 02 Python
python验证码识别的实例详解
Sep 09 Python
spyder常用快捷键(分享)
Jul 19 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
Python字典遍历操作实例小结
Mar 05 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
Python Excel处理库openpyxl使用详解
May 09 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
python实现取余操作的简单实例
Aug 16 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
python paramiko实现ssh远程访问的方法
2013/12/03 Python
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
Python 日期与时间转换的方法
2020/08/01 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
Linux机考试题
2015/10/16 面试题
幼儿教师个人求职信范文
2013/09/21 职场文书
物流管理毕业生自荐信
2013/10/24 职场文书
人事文员岗位职责
2014/02/16 职场文书
2015年导购员工作总结
2015/04/25 职场文书