# 张量拼接_调整维度_切片

### 1、tf.concat

tf.concat的作用主要是将向量按指定维连起来，其余维度不变；而1.0版本以后，函数的用法变成：

```import tensorflow as tf

t1 = [[1, 2, 3], [4, 5, 6]]

t2 = [[7, 8, 9], [10, 11, 12]]

#按照第0维连接

t12_0 = tf.concat( [t1, t2],0)

#按照第1维连接

t12_1 = tf.concat([t1, t2],1)

with tf.Session() as sess:
print(sess.run(t12_0))
print(sess.run(t12_1))

---------------------
[[ 1  2  3]
[ 4  5  6]
[ 7  8  9]
[10 11 12]]
[[ 1  2  3  7  8  9]
[ 4  5  6 10 11 12]]
----------------------```

### 2、tf.stack

```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.squeeze。数据降维，只裁剪等于1的维度。不指定维度则裁剪所有长度为1的维度。

```import tensorflow as tf

arr = tf.Variable(tf.truncated_normal([3,4,1,6,1], stddev=0.1))

sess = tf.Session()

sess.run(tf.global_variables_initializer())

print(sess.run(arr).shape)

print(sess.run(tf.squeeze(arr,[2,])).shape)

print(sess.run(tf.squeeze(arr,[2,4])).shape)

print(sess.run(tf.squeeze(arr)).shape)

----------------
(3, 4, 1, 6, 1)
(3, 4, 6, 1)
(3, 4, 6)
(3, 4, 6)
----------------```

### 3、张量切片

tf.slice

slice(input_, begin, size, name=None)

```import tensorflow as tf

input = [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]]

slice_1 = tf.slice(input, [1, 0, 0], [1, 1, 3])

slice_2 = tf.slice(input, [1, 0, 0], [1, 2, 3])

slice_3 = tf.slice(input, [1, 0, 0], [2, 1, 3])

with tf.Session() as sess:
print(sess.run(slice_1))
print(sess.run(slice_2))
print(sess.run(slice_3))

------------
[[[3 3 3]]]

[[[3 3 3]
[4 4 4]]]

[[[3 3 3]]
[[5 5 5]]]
------------```

tf.strided_slice(record_bytes, [0], [label_bytes]), tf.int32)

```def strided_slice(
input_, begin,
end,
strides=None,
begin_mask=0,
end_mask=0,
ellipsis_mask=0,
new_axis_mask=0,
shrink_axis_mask=0,
var=None,
name=None
):```

```import tensorflow as tf

# 来把输入变个型，可以看成3维的tensor，从外向为1,2,3维。
input= \
[
[[1, 1, 1],
[2, 2, 2]
],

[[3, 3, 3],
[4, 4, 4]
],

[[5, 5, 5],
[6, 6, 6]
]
]

slice = tf.strided_slice(input, [0,0,0], [2,2,2], [1,2,1])

with tf.Session() as sess:
print(sess.run(slice))

# start = [0,0,0] , end = [2,2,2], stride = [1,2,1]
# 求一个[start, end)的一个片段,注意end为开区间

# 第1维 start = 0 , end = 2, stride = 1, 所以取 0 , 1行，此时的输出

# [[[1, 1, 1], [2, 2, 2]],
# [[3, 3, 3], [4, 4, 4]]]

# 第2维时, start = 0 , end = 2 , stride = 2, 所以只能取0行,此时的输出

# [[[1, 1, 1]],
# [[3, 3, 3]]]

# 第3维的时候,start = 0, end = 2, stride = 1, 可以取0,1行,此时得到的就是最后的输出

# [[[1, 1]],
# [[3, 3]]]

# 整理之后最终的输出为:

# [[[1,1],[3,3]]]```

0 条评论

• ### tensorflow中的数据类型dtype

版权声明：本文为博主原创文章，遵循 CC 4.0 by-sa 版权协议，转载请附上原文出处链接和本声明。

• ### LeNet-5

LeNet-5 模型是 Yann LeCun 教授于 1998 年在论文 Gradient-based learning applied to document...

• ### tf.data

返回此数据集元素的每个组件的类。(不推荐)期望值是tf.Tensor和tf.sparseTensor。

• ### 机器学习的大局：用神经网络和TensorFlow分类文本

开发人员常说，如果你想开始机器学习，你应该先学习算法是如何工作的。但是我的经验表明并不是这样子。

• ### TensorFlow2.X学习笔记(1)--TensorFlow核心概念

TensorFlow™ 是一个采用 数据流图（data flow graphs），用于数值计算的开源软件库。节点（Nodes）在图中表示数学操作，图中的线（e...

• ### TensorFlow2.X学习笔记(3)--TensorFlow低阶API之张量

TensorFlow提供的方法比numpy更全面，运算速度更快，如果需要的话，还可以使用GPU进行加速。

• ### TensorFlow2.X学习笔记(4)--TensorFlow低阶API之AutoGraph相关研究

而Autograph机制可以将动态图转换成静态计算图，兼收执行效率和编码效率之利。

• ### 【tensorflow2.0】张量的结构操作

张量数学运算主要有：标量运算，向量运算，矩阵运算。另外我们会介绍张量运算的广播机制。

• ### 【tensorflow2.0】中阶api--模型、损失函数、优化器、数据管道、特征列等

TensorFlow的中阶API主要包括各种模型层，损失函数，优化器，数据管道，特征列等等。