浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
有一段时间没用tensorflow了,现在跑实验还是存在一些坑了,主要是关于张量计算的问题。tensorflow升级1.0版本后与以前的版本并不兼容,可能出现各种奇奇怪怪的问题。
1tf.concat函数
tensorflow1.0以前函数用法:tf.concat(concat_dim,values,name='concat'),第一个参数为连接的维度,可以将几个向量按指定维度连接起来。
如:
t1=[[1,2,3],[4,5,6]] t2=[[7,8,9],[10,11,12]] #按照第0维连接 tf.concat(0,[t1,t2])==>[[1,2,3],[4,5,6],[7,8,9],[10,11,12]] #按照第1维连接 tf.concat(1,[t1,t2])==>[[1,2,3,7,8,9],[4,5,6,10,11,12]]
tf.concat的作用主要是将向量按指定维连起来,其余维度不变;而1.0版本以后,函数的用法变成:
t1=[[1,2,3],[4,5,6]] t2=[[7,8,9],[10,11,12]] #按照第0维连接 tf.concat([t1,t2],0)==>[[1,2,3],[4,5,6],[7,8,9],[10,11,12]] #按照第1维连接 tf.concat([t1,t2],1)==>[[1,2,3,7,8,9],[4,5,6,10,11,12]]
位置变了,需要注意。
2tf.stack函数
用法:stack(values,axis=0,name=”stack”):
“”“Stacksalistofrank-Rtensorsintoonerank-(R+1)tensor.
x=tf.constant([1,4]) y=tf.constant([2,5]) z=tf.constant([3,6]) tf.stack([x,y,z])==>[[1,4],[2,5],[3,6]] tf.stack([x,y,z],axis=0)==>[[1,4],[2,5],[3,6]] tf.stack([x,y,z],axis=1)==>[[1,2,3],[4,5,6]]
tf.stack将一组R维张量变为R+1维张量。注意:tf.pack已经变成了tf.stack
3.tf.reshape
用法:reshape(tensor,shape,name=None):主要通过改变张量形状,可以从高维变低维,也可以从低维变高维;
a=tf.Variable(initial_value=[[1,2,3],[4,5,6]])==>shape:[2,3] b=tf.Variable(initial_value=[[[1,2,3],[4,5,6]],[[7,8,9],[1,0,2]]])==>shape:[2,2,3] a_1=tf.reshape(a,[2,1,1,3])==>[[[[1,2,3]]],[[[4,5,6]]]] a_2=tf.reshape(a,[2,1,3])==>[[[1,2,3]],[[4,5,6]]] b_1=tf.reshape(b,[2,2,1,3])==>[[[[1,2,3]],[[4,5,6]]],[[[7,8,9]],[[1,0,2]]]] new_1=tf.concat([b_1,a_1],1) new_2=tf.reshape(tf.concat([b,a_2],1),[2,3,1,3]) """ new_1: [[[[123]] [[456]] [[123]]] [[[789]] [[102]] [[456]]]] new_2; [[[[123]] [[456]] [[123]]] [[[789]] [[102]] [[456]]]]
补充知识:tensorflow中的reshape(tensor,[1,-1])和reshape(tensor,[-1,1])
和python中的reshape用法应该一样
importtensorflowastf a=[[1,2],[3,4],[5,6]] tf.reshape(a,[-1,1]) Out[13]:tf.reshape(tf.reshape(a,[-1,1]),[1,-1]) Out[14]:
tf.reshape(tensor,[-1,1])将张量变为一维列向量
tf.reshape(tensor,[1,-1])将张量变为一维行向量
以上这篇浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。