Tensorflow 变换汇总

                              Tensorflow tensor变换汇总

1. tf.concat([t1, t2], dim) 仅限于矩阵t1,t2维度需大于1

2. tf.expand_dims(input, axis=None, name=None, dim=None)

功能:在输入形状的维度索引(axis)轴处插入1的尺寸。 尺寸索引轴从零开始; 如果您指定轴的负数,则从最后向后计数。如果要将批量维度添加到单个元素,则此操作非常有用。 例如,如果您有一个单一的形状[height,width,channels],您可以使用expand_dims(image,0)使其成为1个图像,这将使形状[1,高度,宽度,通道]。

For example:

# 't' is a tensor of shape [2]
shape(expand_dims(t, 0)) ==> [1, 2]
shape(expand_dims(t, 1)) ==> [2, 1]
shape(expand_dims(t, -1)) ==> [2, 1]
# 't2' is a tensor of shape [2, 3, 5]
shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5]
shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5]
shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]

3.tf.squeeze(input, squeeze_dims=None, name=None)

功能:给定张量输入,此操作返回相同类型的张量,并删除所有尺寸为1的尺寸。 如果不想删除所有尺寸1尺寸,可以通过指定squeeze_dims来删除特定维度为1尺寸。
# 't' is a tensor of shape [1, 2, 1, 3, 1, 1]
shape(squeeze(t)) ==> [2, 3]
Or, to remove specific size 1 dimensions:

# 't' is a tensor of shape [1, 2, 1, 3, 1, 1]
shape(squeeze(t, [2, 4])) ==> [1, 2, 3, 1]

tf.expand_dims与tf.squeeze合起来:

import tensorflow as tf

w = tf.Variable(tf.truncated_normal([2, 3], stddev=0.1, dtype=tf.float32), dtype=tf.float32,name="w")
expend_w = tf.expand_dims(w, 0)
squeeze_w = tf.squeeze(expend_w, 0)
init = tf.global_variables_initializer()
with tf.Session() as session:
    session.run(init)
    print(session.run(tf.shape(expend_w)))#[1 2 3]
    print(session.run(tf.shape(squeeze_w)))#[2 3]

4.tf.stack( values,axis,name) 与 tf.unstack( values,axis,name) 

功能:将两个数组按照指定的方向进行叠加,生成一个新的数组。 
参数axis:当其取0时表示按照x轴方向进行叠加,当其取1时表示按照y轴进行叠加。 

例子:

import tensorflow as tf

a=tf.constant([1,2,3])
b=tf.constant([4,5,6])

c=tf.stack([a,b],axis=0)  #将数组a与数组b按照x轴方向进行叠加
d=tf.stack([a,b],axis=1)  #将数组a与数组b按照y轴方向进行叠加

e=tf.unstack(c,axis=0)    #将数组c按照x轴方向进行拆分
f=tf.unstack(d,axis=1)    #将数组d按照y轴方向进行拆分

with tf.Session() as sess:
    print(sess.run(c))#[[1 2 3],[4 5 6]]
    print(sess.run(d))#[[1 4],[2 5], [3 6]]
    print(sess.run(e))#[array([1, 2, 3]), array([4, 5, 6])]
    print(sess.run(f))#[array([1, 2, 3]), array([4, 5, 6])]

5.def pad(tensor, paddings, mode="CONSTANT/REFLECT/SYMMETRIC", name=None)

# 't' is [[1, 2, 3], [4, 5, 6]].
# 'paddings' is [[1, 1,], [2, 2]].
# 'constant_values' is 0.
# rank of 't' is 2.
pad(t, paddings, "CONSTANT") ==>
 [[0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 2, 3, 0, 0],
 [0, 0, 4, 5, 6, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]]
pad(t, paddings, "REFLECT") ==> [[6, 5, 4, 5, 6, 5, 4],
[3, 2, 1, 2, 3, 2, 1],
[6, 5, 4, 5, 6, 5, 4],
[3, 2, 1, 2, 3, 2, 1]]
pad(t, paddings, "SYMMETRIC") ==> [[2, 1, 1, 2, 3, 3, 2],
  [2, 1, 1, 2, 3, 3, 2],
  [5, 4, 4, 5, 6, 6, 5],
  [5, 4, 4, 5, 6, 6, 5]]
  
tf.pad的使用,第一个是填充0,后面两个是复制前几行或者列
[1,1],[2,2]
[1,1]指的是向上扩充一行,向下扩充一行
[2,2]指的是向左扩充2列,向右扩充2列
1.CONSTANT模式,按上下左右填充几行或者几列的0,paddings=[[1,1],[2,2]]的意思是向上填充一行0,向下填充一行0,向左填充二行0,向右填充两行0
2.REFLECT模式,首先要定好边缘(可理解为对称轴),按边缘翻(边缘不复制)
3.SYMMETRIC类似的,唯一的区别是把边缘(也就是对称轴)也复制了,从对称轴开始复制
例:
import tensorflow as tf
w = tf.truncated_normal([1,2,3,1], stddev=0.1, dtype=tf.float32)
with tf.Session() as sess:
    print(sess.run(tf.shape(tf.pad(w,[[0, 0], [3, 3], [3, 3], [0, 0]]))))#[1 8 9 1]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值