在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脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
Python 结巴分词实现关键词抽取分析
Oct 21 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
python语言元素知识点详解
May 15 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
深入了解python列表(LIST)
Jun 08 Python
Django缓存Cache使用详解
Nov 30 Python
4种非常实用的python内置数据结构
Apr 28 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
PHP 引用文件技巧
2010/03/02 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
python使用htmllib分析网页内容的方法
2015/05/08 Python
安装Python的教程-Windows
2017/07/22 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
什么是封装
2013/03/26 面试题
公安纪律作风整顿剖析材料
2014/10/10 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
病假条格式范文
2015/08/17 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python