Tensorflow1.14中placeholder.shape和tf.shape(placeholder)的区别
最近在看TensorFlow的代码,还是1.14版本的TensorFlow的,代码难度确实比pytorch的难上不是多少倍,pytorch的代码看一遍基本能看懂个差不多,TensorFlow的代码看一遍没懂,再看一遍还没懂,再看一遍呢,还没懂,不过这时候基本也就快崩溃了。
记录一个刚学到的TensorFlow的知识点,那就是对TensorFlow中的tensor取shape操作时需要注意的事项,也就是说有一个TensorFlow的tensor,它是由placeholder生成的,使用代码如下:
import tensorflow as tf
import numpy as np num_actions = 5 p=tf.placeholder(shape=(None, 4), dtype=np.int8)
batch_size = tf.shape(p)[0] random_actions = tf.random_uniform(tf.stack([batch_size]), minval=0, maxval=num_actions, dtype=tf.int64) with tf.Session() as sess:
print( sess.run(random_actions, {p:np.array([[1,1,1,1], [2,2,2,2], [3,3,3,3], [4,4,4,4]])}) )
执行后结果:



import tensorflow as tf
import numpy as np num_actions = 5 p=tf.placeholder(shape=(None, 4), dtype=np.int8)
# batch_size = tf.shape(p)[0]
batch_size = p.shape[0] random_actions = tf.random_uniform(tf.stack([batch_size]), minval=0, maxval=num_actions, dtype=tf.int64) with tf.Session() as sess:
print( sess.run(random_actions, {p:np.array([[1,1,1,1], [2,2,2,2], [3,3,3,3], [4,4,4,4]])}) )
执行结果:(报错)

两个代码的区别就是对于一个placeholder生成的tensor,对它取某个维度,如果它的某个维度在定义时并没有赋值,也就是使用了None数值来占位,那么再构建神经网络时用到了这个维度如果取这个维度是用tensorflow的函数来取和直接调用这个tensor的shape来取会有不同的效果的。
如果是使用TensorFlow的函数,tf.shape来取,这个维度及时没有赋值也是会一个TensorFlow的变量存在的:

可以知道取这个维度的变量本身也就是一个tensor变量,即时这个变量的数值并不清楚(因为它是由None占位生成的),这个tensor变量也是可以进行下一步操作的。
但是如果使用p.shape[0]的方式,那么取出的其实是一个python变量而不是tensor变量,而这个python变量内部存储的数值是None,而这个数值是不能参与TensorFlow中的神经网络构建的:

因此,上面的第二个代码运行时会报错。
==================================================================
修改代码:
import tensorflow as tf
import numpy as np num_actions = 5 p=tf.placeholder(shape=(None, 4), dtype=np.int8)
batch_size = tf.shape(p)[1] random_actions = tf.random_uniform(tf.stack([batch_size]), minval=0, maxval=num_actions, dtype=tf.int64) with tf.Session() as sess:
print( sess.run(random_actions, {p:np.array([[1,1,1,1], [2,2,2,2], [3,3,3,3], [4,4,4,4]])}) )
import tensorflow as tf
import numpy as np num_actions = 5 p=tf.placeholder(shape=(None, 4), dtype=np.int8)
# batch_size = tf.shape(p)[0]
# batch_size = p.shape[0]
batch_size = p.shape[1] random_actions = tf.random_uniform(tf.stack([batch_size]), minval=0, maxval=num_actions, dtype=tf.int64) with tf.Session() as sess:
print( sess.run(random_actions, {p:np.array([[1,1,1,1], [2,2,2,2], [3,3,3,3], [4,4,4,4]])}) )
上面的这两个代码均可以正常运行。
这说明python的数值是可以参与TensorFlow的神经网络构建的,只不过None是不可以参与TensorFlow的网络构建的,如果某个tensor的维度是由placeholder的None生成的,我们只能使用tf.shape的方式来取,这样取到的则为还没有赋值的tensor变量而不是None的python变量。
========================================
Tensorflow1.14中placeholder.shape和tf.shape(placeholder)的区别的更多相关文章
- tf.shape()
tf.shapetf.shape( input, name=None, out_type=tf.int32)12345例如:将矩阵的维度输出为一个维度矩阵import tensorflow as tf ...
- ArcGIS学习记录-Excel和Txt中XY点数据生成点Shape文件方法
(一)Excel中XY点数据生成点Shape文件方法 1.Excel表如下: 2.点击ArcGIS中的"+"号按钮,添加数据.选择第一步中制作好的Excel文件,点击Add按钮 ...
- tensorflow之tf.shape()
tf.shape()这个方法就相当于numpy当中shape属性. 下面通过列子来了解: 具体而言,tf.shape是用来获取张量的维度(shape).
- Tensorflow中的图(tf.Graph)和会话(tf.Session)详解
Tensorflow中的图(tf.Graph)和会话(tf.Session) Tensorflow编程系统 Tensorflow工具或者说深度学习本身就是一个连贯紧密的系统.一般的系统是一个自治独立的 ...
- faster-rcnn错误信息 : tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [21] rhs shape= [2]
faster-rcnn错误信息 : tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shap ...
- HTML5之placeholder属性以及如何更改placeholder属性中文字颜色
今天在群里看到群友问了一个这样的问题,就是如何更改placeholder属性中文字的颜色,以前用过这属性,却是没更改过颜色,于是便试了试,中途遇到些问题,查找资料后特来总结一下. 熟悉HTML5的人应 ...
- 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')
解决14中csv用excel打开乱码的问题 ,其实就是在写csv的时候把 utf-8 改成 utf-8-sig open('zhihu.csv','w',newline='',encoding='ut ...
- 转: HTML5之placeholder属性以及如何更改placeholder属性中文字颜色
今天在群里看到群友问了一个这样的问题,就是如何更改placeholder属性中文字的颜色,以前用过这属性,却是没更改过颜色,于是便试了试,中途遇到些问题,查找资料后特来总结一下. 熟悉HTML5的人应 ...
- 在VMware 14中安装Centos7
在VMware 14中安装Centos7 一.安装前准备 安装VMware14.1 Centos7 64位镜像下载 在VMware中安装Centos7的步骤为: 1.创建虚拟机 创建虚拟机有两种方式: ...
- Ubuntu 14 中给 APACHE2安装 SSL 模块 Enable SSL site on Ubuntu 14 LTS, Apache 2.4.7:
Ubuntu 14 中给 APACHE2安装 SSL 模块 Enable SSL site on Ubuntu 14 LTS, Apache 2.4.7: 参考 http://blog.csdn.ne ...
随机推荐
- ES备份恢复
1.官网提供snap快照备份恢复 https://www.elastic.co/guide/en/elasticsearch/reference/7.9/snapshot-restore.html 环 ...
- vue饼图
结果图 原型 1 <template> 2 <!-- 左右柱状图 --> 3 <div ref="rankEcharts" :style=" ...
- xxlJob Cron表达式 0 0 8,13 * * ?
xxlJob Cron表达式 0 0 8,13 * * ? Cron有如下两种语法格式:(1)Seconds Minutes Hours DayofMonth Month DayofWeek Yea ...
- ZynqMP PL固件通过U-BOOT从指定位置加载FPGA BIT
原因 PL固件可能经常修改,而BOOT.BIN和文件系统.内核实际上基本不会变,在一个平台上可以用同一份.如果每次修改都要重新打包PL 固件到BOOT.BIN,操作起来非常麻烦.所以希望PL 的固件可 ...
- 又跳槽!3年java经验offer收割机的面试心得
中厂->阿里->字节,成都->杭州->成都 系列文章目录和关于我 0.前言 笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天跳槽到 ...
- todo高通Android UEFI中的LCD分析(1):启动流程分析
# 高通Android UEFI中的LCD分析(1):启动流程 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进 ...
- 【论文阅读】IROS2022: Dynamics-Aware Spatiotemporal Occupancy Prediction in Urban Environments
0.参考与前言 完整题目: Dynamics-Aware Spatiotemporal Occupancy Prediction in Urban Environments 论文链接:https:// ...
- scala偏函数小栗子
package cn.beicaiqm.scala.day04 /** * Created by Administrator on 2018/6/1. * 被包在花括号内没有match的一组case语 ...
- mac idea 配置Tomcat
官网下载Tomcat 下载地址:点我直达 配置Idea 设置Application Servers 操作步骤:Intellij IDEA->Preferences->Application ...
- Solo 开发者周刊 (第3期):如何打造令人惊艳的AI体验
这里会整合 Solo 社区每周推广内容.产品模块或活动投稿,每周五发布.在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解.本杂志开源,欢迎投稿. 好文推荐 Plu ...