gpt4 book ai didi

浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

有一段时间没用tensorflow了,现在跑实验还是存在一些坑了,主要是关于张量计算的问题。tensorflow升级1.0版本后与以前的版本并不兼容,可能出现各种奇奇怪怪的问题.

1 tf.concat函数 。

tensorflow1.0以前函数用法:tf.concat(concat_dim, values, name='concat'),第一个参数为连接的维度,可以将几个向量按指定维度连接起来.

如:

?
1
2
3
4
5
6
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版本以后,函数的用法变成:

?
1
2
3
4
5
6
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 ]]

位置变了,需要注意.

2 tf.stack函数 。

用法:stack(values, axis=0, name=”stack”)

“”“Stacks a list of rank-R tensors into one rank-(R+1) tensor. 。

?
1
2
3
4
5
6
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):主要通过改变张量形状,可以从高维变低维,也可以从低维变高维; 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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:
[[[[ 1 2 3 ]]
 
  [[ 4 5 6 ]]
 
  [[ 1 2 3 ]]]
 
 
  [[[ 7 8 9 ]]
 
  [[ 1 0 2 ]]
 
  [[ 4 5 6 ]]]]
new_2;
[[[[ 1 2 3 ]]
 
  [[ 4 5 6 ]]
 
  [[ 1 2 3 ]]]
 
 
  [[[ 7 8 9 ]]
 
  [[ 1 0 2 ]]
 
  [[ 4 5 6 ]]]]

补充知识:tensorflow中的reshape(tensor,[1,-1])和reshape(tensor,[-1,1]) 。

和python 中的reshape用法应该一样 。

?
1
2
3
4
5
6
import tensorflow as tf
a = [[ 1 , 2 ],[ 3 , 4 ],[ 5 , 6 ]]
tf.reshape(a,[ - 1 , 1 ])
Out[ 13 ]: <tf.Tensor 'Reshape_4:0' shape = ( 6 , 1 ) dtype = int32>
tf.reshape(tf.reshape(a,[ - 1 , 1 ]),[ 1 , - 1 ])
Out[ 14 ]: <tf.Tensor 'Reshape_6:0' shape = ( 1 , 6 ) dtype = int32>

tf.reshape(tensor,[-1,1])将张量变为一维列向量 。

tf.reshape(tensor,[1,-1])将张量变为一维行向量 。

以上这篇浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/a18852867035/article/details/79048684 。

最后此篇关于浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack的文章就讲到这里了,如果你想了解更多关于浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com