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操作MongoDB基础知识
Nov 01 Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
基于python plotly交互式图表大全
Dec 07 Python
用Python开发app后端有优势吗
Jun 29 Python
公认8个效率最高的爬虫框架
Jul 28 Python
深入分析python 排序
Aug 24 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
pdo中使用参数化查询sql
2011/08/11 PHP
PHP模块memcached使用指南
2014/12/08 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
React中的refs的使用教程
2018/02/13 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
js代码实现轮播图
2020/05/04 Javascript
Python装饰器decorator用法实例
2014/11/10 Python
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Python使用py2exe打包程序介绍
2014/11/20 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
2020/08/05 Python
python将数据插入数据库的代码分享
2020/08/16 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
Myholidays美国:在线旅游网站
2019/08/16 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
银行演讲稿范文
2014/01/03 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
卫生系统先进事迹
2014/05/13 职场文书
国庆横幅标语
2014/10/08 职场文书
民事上诉状范文
2015/05/22 职场文书
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android