tf.unstack()、tf.stack()

tf.unstack

原型:

unstack(

value,

num=None,

axis=0,

name=‘unstack‘ )

官方解释:https://tensorflow.google.cn/api_docs/python/tf/unstack

解释:这是一个对矩阵进行分解的函数,以下为关键参数解释:

value:代表需要分解的矩阵变量(其实就是一个多维数组,一般为二维);

axis:指明对矩阵的哪个维度进行分解。

要理解tf.unstack函数,我们不妨先来看看tf.stack函数。Tf.stack刚好是与tf.unstack函数相反,前者是对矩阵进行拼接,后者则对矩阵进行分解。

Tf.stack用法举例:假如现在有两个变量,a=[1, 2, 3],b=[4, 5, 6],现在我要使用tf.stack对他们进行拼接,变成一个二维矩阵[ [1, 2, 3], [4, 5, 6] ]。代码【示例1】如下:

【示例1】



import tensorflow as tf

a = tf.constant([1, 2, 3])

b = tf.constant([4, 5, 6])

c = tf.stack( [a,b], axis=0)

with tf.Session() as sess:

 print(sess.run(c))


输出结果是:



[[1 2 3]

 [4 5 6]]


此时,我如果把【示例1】里面的tf.stack参数axis=0改成1,运行结果如下:


[[1 4]

 [2 5]

 [3 6]]


可以理解,axis作用就是指明以何种方式对矩阵进行拼接,说白了,就是对原矩阵的哪个维度进行拼接。

理解了tf.stack,tf.unstack也就不难理解了。比如说现在有变量c,如下:

c=[[1 2 3]

[4 5 6]]

现在要对c进行分解,代码如下:



import tensorflow as tf

c = tf.constant([[1, 2, 3],

 [4, 5, 6]])

d = tf.unstack(c, axis=0)

e = tf.unstack(c, axis=1)

with tf.Session() as sess:

 print(sess.run(d))

 print(sess.run(e))


结果如下:


[array([1, 2, 3]), array([4, 5, 6])]

[array([1, 4]), array([2, 5]), array([3, 6])]


可以看出来,tf.unstack其实就是在做与tf.stack相反的事情。这样一来,你是不是恍然大悟了呢?

作者:JempChou
链接:https://www.jianshu.com/p/25706575f8d4
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文地址:https://www.cnblogs.com/fpzs/p/10290265.html

时间: 2024-11-06 07:39:56

tf.unstack()、tf.stack()的相关文章

tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope关系

1. tf.Variable与tf.get_variable tensorflow提供了通过变量名称来创建或者获取一个变量的机制.通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量通过参数的形式到处传递. TensorFlow中通过变量名获取变量的机制主要是通过tf.get_variable和tf.variable_scope实现的. 当然,变量也可以通过tf.Varivale来创建.当tf.get_variable用于变量创建时,和tf.Variable的功能基本等价

tf.Session()、tf.InteractiveSession()

官方tutorial是这么说的: The only difference with a regular Session is that an InteractiveSession installs itself as the default session on construction. The methods Tensor.eval() and Operation.run() will use that session to run ops. 翻译一下就是:tf.InteractiveSes

TensorFlow函数(九)tf.add_to_collection()、tf.get_collection() 和 tf.add_n()

tf.add_to_collection(name, value) 此函数将元素添加到列表中 参数: name:列表名.如果不存在,创建一个新的列表 value:元素 tf.get_collection(name) 此函数获取列表 参数: name:列表名 tf.add_n(inputs) 此函数将元素相加并返回 注意:元素类型必须一致,否者报错 1 tf.add_to_collection('losses', regularizer(weights)) 2 tf.add_n(tf.get_co

TensorFlow之tf.unstack学习循环神经网络中用到!

unstack( value, num=None, axis=0, name='unstack' ) tf.unstack() 将给定的R维张量拆分成R-1维张量 将value根据axis分解成num个张量,返回的值是list类型,如果没有指定num则根据axis推断出! DEMO: import tensorflow as tf a = tf.constant([3,2,4,5,6]) b = tf.constant([1,6,7,8,0]) c = tf.stack([a,b],axis=0

tf.unstack\tf.unstack

tf.unstack 原型: unstack( value, num=None, axis=0, name='unstack' ) 官方解释:https://tensorflow.google.cn/api_docs/python/tf/unstack 解释:这是一个对矩阵进行分解的函数,以下为关键参数解释: value:代表需要分解的矩阵变量(其实就是一个多维数组,一般为二维): axis:指明对矩阵的哪个维度进行分解. 要理解tf.unstack函数,我们不妨先来看看tf.stack函数.T

TF:利用TF的train.Saver将训练好的variables(W、b)保存到指定的index、meda文件

import tensorflow as tf import numpy as np W = tf.Variable([[2,1,8],[1,2,5]], dtype=tf.float32, name='weights') b = tf.Variable([[1,2,5]], dtype=tf.float32, name='biases') init= tf.global_variables_initializer() saver = tf.train.Saver() with tf.Sessi

CNN之池化层tf.nn.max_pool|tf.nn.avg_pool|tf.reduce_mean

摘要:池化层的主要目的是降维,通过滤波器映射区域内取最大值.平均值等操作. 均值池化:tf.nn.avg_pool(input,ksize,strides,padding) 最大池化:tf.nn.max_pool(input,ksize,strides,padding) input:通常情况下是卷积层输出的featuremap,shape=[batch,height,width,channels]              假定这个矩阵就是卷积层输出的featuremap(2通道输出)  他的s

JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助.废话不想讲了.入主题:先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身栈区:1.每个线程包含一个栈区,栈中只保存基础数

转 方法区(method) )、栈区(stack)和堆区(heap)之JVM 内存初学

JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问. 3.栈分为3个