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时间整形转标准格式的示例分享
Feb 14 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
Python+Pandas 获取数据库并加入DataFrame的实例
Jul 25 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
python tkinter窗口最大化的实现
Jul 15 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
Python基于Serializer实现字段验证及序列化
Nov 04 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 Python
python绘图pyecharts+pandas的使用详解
Dec 13 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
Python入门之使用pandas分析excel数据
May 12 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 文件上传模型,支持多文件上传
2009/08/13 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
php筛选不存在的图片资源
2015/04/28 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python生成pdf文件的方法
2014/08/04 Python
Python是编译运行的验证方法
2015/01/30 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python检查ping终端的方法
2019/01/26 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
雏鹰争章活动总结
2014/05/09 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
学习与创新自我评价
2015/03/09 职场文书
志愿服务心得体会
2016/01/15 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js
SQL Server中锁的用法
2022/05/20 SQL Server