在keras 中获取张量 tensor 的维度大小实例


Posted in Python onJune 10, 2020

在进行keras 网络计算时,有时候需要获取输入张量的维度来定义自己的层。但是由于keras是一个封闭的接口。因此在调用由于是张量不能直接用numpy 里的A.shape()。这样的形式来获取。这里需要调用一下keras 作为后端的方式来获取。当我们想要操作时第一时间就想到直接用 shape ()函数。其实keras 中真的有shape()这个函数。

shape(x)返回一个张量的符号shape,符号shape的意思是返回值本身也是一个tensor,

示例:

>>> from keras import backend as K
>>> tf_session = K.get_session()
>>> val = np.array([[1, 2], [3, 4]])
>>> kvar = K.variable(value=val)
>>> input = keras.backend.placeholder(shape=(2, 4, 5))
>>> K.shape(kvar)
<tf.Tensor 'Shape_8:0' shape=(2,) dtype=int32>
>>> K.shape(input)
<tf.Tensor 'Shape_9:0' shape=(3,) dtype=int32>
__To get integer shape (Instead, you can use K.int_shape(x))__
 
>>> K.shape(kvar).eval(session=tf_session)
array([2, 2], dtype=int32)
>>> K.shape(input).eval(session=tf_session)
array([2, 4, 5], dtype=int32)

如果直接调用这个出的不是我们想要的。我们想要的是tensor各个维度的大小。因此可以直接调用 int_shape(x) 函数。这个函数才是我们想要的。

>>> from keras import backend as K
>>> input = K.placeholder(shape=(2, 4, 5))
>>> K.int_shape(input)
(2, 4, 5)
>>> val = np.array([[1, 2], [3, 4]])
>>> kvar = K.variable(value=val)
>>> K.int_shape(kvar)
(2, 2)

最后这样我们就可以直接调用里面的大小。然后定义我们自己的keras 层了。

补充知识:获取Tensor的维度(x.shape和x.get_shape()的区别)

tf.shape(a)和a.get_shape()比较

相同点:都可以得到tensor a的尺寸

不同点:tf.shape()中a 数据的类型可以是tensor, list, array

a.get_shape()中a的数据类型只能是tensor,且返回的是一个元组(tuple)

import tensorflow as tf 
import numpy as np 

x=tf.constant([[1,2,3],[4,5,6]])
y=[[1,2,3],[4,5,6]] 
z=np.arange(24).reshape([2,3,4])

sess=tf.Session() 
# tf.shape() 
x_shape=tf.shape(x)          # x_shape 是一个tensor 
y_shape=tf.shape(y)          # <tf.Tensor 'Shape_2:0' shape=(2,) dtype=int32> 
z_shape=tf.shape(z)          # <tf.Tensor 'Shape_5:0' shape=(3,) dtype=int32> 
print(sess.run(x_shape))       # 结果:[2 3]
print(sess.run(y_shape))       # 结果:[2 3]
print(sess.run(z_shape) )       # 结果:[2 3 4]

x_shape=x.get_shape() 
print(x_shape)    # 返回的是TensorShape([Dimension(2), Dimension(3)]),不能使用 sess.run() 因为返回的不是tensor 或string,而是元组                            (2, 3)
x_shape=x.get_shape().as_list() 
print(x_shape) # 可以使用 as_list()得到具体的尺寸,x_shape=[2 3] 这是重点 返回列表方便参加其他代码的运算
# y_shape=y.get_shape() 
print(x_shape)# AttributeError: 'list' object has no attribute 'get_shape'
# z_shape=z.get_shape() 
print(x_shape)# AttributeError: 'numpy.ndarray' object has no attribute 'get_shape' 或者a.shape.as_list()

以上这篇在keras 中获取张量 tensor 的维度大小实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python的Django框架中的通用视图
May 04 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
python实现图像识别功能
Jan 29 Python
python中的变量如何开辟内存
Jun 26 Python
Python并发:多线程与多进程的详解
Jan 24 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
Python中bisect的使用方法
Dec 31 Python
Python类和实例的属性机制原理详解
Mar 21 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
Python中logger日志模块详解
Aug 04 Python
python 发送邮件的四种方法汇总
Dec 02 Python
Python命令行参数argv和argparse该如何使用
Feb 08 Python
Keras—embedding嵌入层的用法详解
Jun 10 #Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 #Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 #Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 #Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 #Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 #Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 #Python
You might like
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
javascript中的有名函数和无名函数
2007/10/17 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
js实现每日签到功能
2018/11/29 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
js实现全选和全不选功能
2020/07/28 Javascript
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
初中生学习的自我评价
2013/11/14 职场文书
学生评语大全
2014/04/18 职场文书
个人职业及收入证明
2014/10/13 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
小学生思想品德评语
2014/12/31 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
Python使用scapy模块发包收包
2021/05/07 Python