TF-搞不懂的TF矩阵加法
看谷歌的demo mnist,卷积后加偏执量的代码
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
其中的x_image的维数是[-1, 28, 28, 1],W_conv1的维数是[5, 5, 1, 32], b的维数是[32]
conv2d对x_image和W_conv1进行卷积,结果为[-1, 28, 28, 32],结果就是:
[-1, 28, 28, 32]和[32]的加法。
完全搞不清为什么[-1, 28, 28, 32]和[32]两个完全不同维数可以做加法?而且加出的结果还是[-1, 28, 28, 32]?
于是做了下面的测试:
sess = tf.InteractiveSession()
test1 = tf.ones([,,,],tf.float32)
b1 = tf.ones([])
re1 = test1 + b1
print("shap3={},eval=\n{}".format(b1.shape, b1.eval()))
print("shap4={},eval=\n{}".format(test1.shape, test1.eval()))
print("shap5={},eval=\n{}".format(re1.shape, re1.eval())) test1 = tf.ones([,,,],tf.float32)
b1 = tf.ones([,,,])
re1 = test1 + b1
print("shap6={},eval=\n{}".format(b1.shape, b1.eval()))
print("shap7={},eval=\n{}".format(test1.shape, test1.eval()))
print("shap8={},eval=\n{}".format(re1.shape, re1.eval())) test1 = tf.ones([,,,],tf.float32)
b1 = tf.ones([,,,])
re1 = test1 + b1
print("shap9 ={},eval=\n{}".format(b1.shape, b1.eval()))
print("shap10={},eval=\n{}".format(test1.shape, test1.eval()))
print("shap11={},eval=\n{}".format(re1.shape, re1.eval())) test1 = tf.ones([,,,],tf.float32)
b1 = tf.ones([])
re1 = test1 + b1
print("shap12={},eval=\n{}".format(b1.shape, b1.eval()))
print("shap13={},eval=\n{}".format(test1.shape, test1.eval()))
print("shap14={},eval=\n{}".format(re1.shape, re1.eval()))
test1 = tf.ones([1,2,2,3],tf.float32)
alist = [[[[ 1, 1, 1.],
[ 0, 0, 0.]],
[[ 1, 1, 1.],
[ 0, 0, 0.]]]]
b1 = tf.constant(alist)
re1 = test1 + b1
print("shap15={},eval=\n{}".format(b1.shape, b1.eval()))
print("shap16={},eval=\n{}".format(test1.shape, test1.eval()))
print("shap17={},eval=\n{}".format(re1.shape, re1.eval()))
结果为
shap3=(3,),eval=
[ 1. 1. 1.]
shap4=(1, 2, 2, 3),eval=
[[[[ 1. 1. 1.]
[ 1. 1. 1.]] [[ 1. 1. 1.]
[ 1. 1. 1.]]]]
shap5=(1, 2, 2, 3),eval=
[[[[ 2. 2. 2.]
[ 2. 2. 2.]] [[ 2. 2. 2.]
[ 2. 2. 2.]]]]
shap6=(1, 1, 1, 1),eval=
[[[[ 1.]]]]
shap7=(1, 2, 2, 3),eval=
[[[[ 1. 1. 1.]
[ 1. 1. 1.]] [[ 1. 1. 1.]
[ 1. 1. 1.]]]]
shap8=(1, 2, 2, 3),eval=
[[[[ 2. 2. 2.]
[ 2. 2. 2.]] [[ 2. 2. 2.]
[ 2. 2. 2.]]]]
shap9 =(1, 1, 1, 3),eval=
[[[[ 1. 1. 1.]]]]
shap10=(1, 2, 2, 3),eval=
[[[[ 1. 1. 1.]
[ 1. 1. 1.]] [[ 1. 1. 1.]
[ 1. 1. 1.]]]]
shap11=(1, 2, 2, 3),eval=
[[[[ 2. 2. 2.]
[ 2. 2. 2.]] [[ 2. 2. 2.]
[ 2. 2. 2.]]]]
shap12=(1,),eval=
[ 1.]
shap13=(1, 2, 2, 3),eval=
[[[[ 1. 1. 1.]
[ 1. 1. 1.]] [[ 1. 1. 1.]
[ 1. 1. 1.]]]]
shap14=(1, 2, 2, 3),eval=
[[[[ 2. 2. 2.]
[ 2. 2. 2.]] [[ 2. 2. 2.]
[ 2. 2. 2.]]]]
shap15=(1, 2, 2, 3),eval=
[[[[ 1. 1. 1.]
[ 0. 0. 0.]]
[[ 1. 1. 1.]
[ 0. 0. 0.]]]]
shap16=(1, 2, 2, 3),eval=
[[[[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]]]]
shap17=(1, 2, 2, 3),eval=
[[[[ 2. 2. 2.]
[ 1. 1. 1.]]
[[ 2. 2. 2.]
[ 1. 1. 1.]]]]
这个结果说明了什么呢?说明张量加法时,维数不等时会自动扩充,用存在的数字填充。
比如下面这个[4, 3, 2, 3]的矩阵A,
我们把A加上[1, 2, 3]结果为
[[[[1 2 3]
[2 3 4]]
[[3 4 5]
[4 5 6]]
[[5 6 7]
[6 7 8]]]
[[[1 2 3]
[2 3 4]]
[[3 4 5]
[4 5 6]]
[[5 6 7]
[6 7 8]]]
[[[1 2 3]
[2 3 4]]
[[3 4 5]
[4 5 6]]
[[5 6 7]
[6 7 8]]]
[[[1 2 3]
[2 3 4]]
[[3 4 5]
[4 5 6]]
[[5 6 7]
[6 7 8]]]]
TF-搞不懂的TF矩阵加法的更多相关文章
- 深度学习原理与框架-图像补全(原理与代码) 1.tf.nn.moments(求平均值和标准差) 2.tf.control_dependencies(先执行内部操作) 3.tf.cond(判别执行前或后函数) 4.tf.nn.atrous_conv2d 5.tf.nn.conv2d_transpose(反卷积) 7.tf.train.get_checkpoint_state(判断sess是否存在
1. tf.nn.moments(x, axes=[0, 1, 2]) # 对前三个维度求平均值和标准差,结果为最后一个维度,即对每个feature_map求平均值和标准差 参数说明:x为输入的fe ...
- 深度学习原理与框架-Tensorflow基本操作-变量常用操作 1.tf.random_normal(生成正态分布随机数) 2.tf.random_shuffle(进行洗牌操作) 3. tf.assign(赋值操作) 4.tf.convert_to_tensor(转换为tensor类型) 5.tf.add(相加操作) tf.divide(相乘操作) 6.tf.placeholder(输入数据占位
1. 使用tf.random_normal([2, 3], mean=-1, stddev=4) 创建一个正态分布的随机数 参数说明:[2, 3]表示随机数的维度,mean表示平均值,stddev表示 ...
- tensorflow 基本函数(1.tf.split, 2.tf.concat,3.tf.squeeze, 4.tf.less_equal, 5.tf.where, 6.tf.gather, 7.tf.cast, 8.tf.expand_dims, 9.tf.argmax, 10.tf.reshape, 11.tf.stack, 12tf.less, 13.tf.boolean_mask
1. tf.split(3, group, input) # 拆分函数 3 表示的是在第三个维度上, group表示拆分的次数, input 表示输入的值 import tensorflow ...
- tf.metrics.sparse_average_precision_at_k 和 tf.metrics.precision_at_k的自己理解
tensorflow最大的问题就是大家都讲算法,不讲解用法,API文档又全是英文的,看起来好吃力,理解又不到位.当然给数学博士看的话,就没问题的. 最近看了一系列非常不错的文章,做一下记录: http ...
- deep_learning_Function_tf.equal(tf.argmax(y, 1),tf.argmax(y_, 1))用法
[Tensorflow] tf.equal(tf.argmax(y, 1),tf.argmax(y_, 1))用法 作用:输出正确的预测结果利用tf.argmax()按行求出真实值y_.预测值y最大值 ...
- tf.nn.conv2d 和 tf.nn.max_pool 中 padding 分别为 'VALID' 和 'SAME' 的直觉上的经验和测试代码
这个地方一开始是迷糊的,写代码做比较分析,总结出直觉上的经验. 某人若想看精准的解释,移步这个网址(http://blog.csdn.net/fireflychh/article/details/73 ...
- python 用嵌套列表做矩阵加法
写一个函数,接收两个由嵌套列表模拟成的矩阵,返回一个嵌套列表作为计算结果,要求运行效果如下: >>> matrix1 = [[1, 1], [-3, 4]] >>> ...
- TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable—Jason niu
# tensorflow中的两种定义scope(命名变量)的方式tf.get_variable和tf.Variable.Tensorflow当中有两种途径生成变量 variable import te ...
- tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数(转)
tensorflow数据读取机制 tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算. 具体来说就是使用一个线程源源不断的将硬盘中的图片数 ...
- TensorFlow 辨异 —— tf.add(a, b) 与 a+b(tf.assign 与 =)、tf.nn.bias_add 与 tf.add(转)
1. tf.add(a, b) 与 a+b 在神经网络前向传播的过程中,经常可见如下两种形式的代码: tf.add(tf.matmul(x, w), b) tf.matmul(x, w) + b 简而 ...
随机推荐
- UOJ #7 【NOI2014】 购票
题目链接:购票 这道题我调了好久啊……主要还是因为这种用\(CDQ\)分治来搞斜率优化的题已经很久没写过了……上一次要追溯到去年暑假去了…… 看下面这些东西之前你需要先自己推出斜率优化的式子…… 这道 ...
- 编译安装keepalived,实现双主mysql高可用
安装keepalived 1.官网下载源码包,解压 # wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz # tar x ...
- php 性能优化
php 性能测试工具 ab(Apache Benchmark) ab 是由 Apache 提供的压力测试软件.安装 apache 服务器时会自带该压测软件. 如何使用: ab -n1000 -c100 ...
- Levenshtein Distance莱文斯坦距离算法来计算字符串的相似度
Levenshtein Distance莱文斯坦距离定义: 数学上,两个字符串a.b之间的莱文斯坦距离表示为levab(|a|, |b|). levab(i, j) = max(i, j) 如果mi ...
- 压缩前端文件(html, css, js)
1:原因 在写前端代码时, 因为要尽可能的适合阅读会加入许多注释, 空格等, 这些在开发时是必要的, 但当你要发布时, 就需要让代码更加精简, 精简压缩的同时也混淆了代码, 安全性也加强了, 可以说是 ...
- HDU 3271 数位dp+二分
SNIBB Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- OpenStack介绍(一)
官方网站:http://www.openstack.org/ 介绍 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开 ...
- css overflow用法
1. overflow-y: auto 侧边栏滚动效果:overflow-y:auto 2. overflow-y: scroll 如果使用overflow:scroll的话,滚动条就一直都在,页面不 ...
- python安装pymssql
安装pymssql pip install pymssql 关于python安装pymssql报错export PYMSSQL_BUILD_WITH_BUNDLED_FREETDS=1 然后再 pip ...
- PHP超级全局变量
$_get:地址栏上获取值 $_post:post表单发送数据 $_request:即有get也有post的内容 如果post和get重名:那么由设置项决定,比如request_crder=" ...