tf.strided_slice()
Posted Hearthougan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tf.strided_slice()相关的知识,希望对你有一定的参考价值。
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 6 10:46:32 2018
@author: Abner_hg
"""
import numpy as np
import tensorflow as tf
data = [[[1, 1, 1], [2, 2, 2]],
[[3, 3, 3], [4, 4, 4]],
[[5, 5, 5], [6, 6, 6]]]
x = tf.strided_slice(data,[0,0,0],[1,1,1])
y = tf.strided_slice(data,[0,0,0],[2,2,2],[1,1,1])
z = tf.strided_slice(data,[0,0,0],[2,2,2],[1,2,1])
with tf.Session() as sess:
print('x = ', sess.run(x))
print('y = \\n', sess.run(y))
print('z = \\n', sess.run(z))
输出:
x = [[[1]]]
y =
[[[1 1]
[2 2]]
[[3 3]
[4 4]]]
z =
[[[1 1]]
[[3 3]]]
那么 tf.strided_slice()对data,怎么切的呢?首先看一下, tf.strided_slice()的参数。
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
)
主要的参数有input、begin、end以及strides四个。其中begin、input和strides要与input的维数保持一致。begin,end和strides共同决定input的每一维是如何剪切的。注意,这里end是开区间。那么如何切片的,接下来,我将以上述x和z例子做分析。
data =
[#第一维
[#第二维
[1, 1, 1], #第三维
[2, 2, 2]
],
[
[3, 3, 3],
[4, 4, 4]
],
[
[5, 5, 5],
[6, 6, 6]
]
]
1、x = tf.strided_slice(data,[0,0,0],[1,1,1])
其中input_ = data, begin = [0,0,0],end = [1,1,1],strides = None。
(1)、首先第一维是begin=0,end=1,也就是从外向内,对第一个括号取第一个元素,即:
data =
[#第一个括号,
[
[1, 1, 1],
[2, 2, 2]
],#第一个括号的第一个元素
[
[3, 3, 3],
[4, 4, 4]
],#第一个括号的第二个元素
[
[5, 5, 5],
[6, 6, 6]
] #第一个括号的第三个元素
]
=====>
x1 =
[#第一个括号,
[
[1, 1, 1],
[2, 2, 2]
],#第一个括号的第一个元素
]
(2)、第二维是begin=0,end=1,也就是从外向内,对第二个括号取第一个元素,即:
x1 =
[
[#第二个括号,
[1, 1, 1],#第二个括号的第一个元素
[2, 2, 2] #第二个括号的第二个元素
]
]
=====>
x2 =
[
[#第二个括号,
[1, 1, 1]#第二个括号的第一个元素
]
]
(3)、第二维是begin=0,end=1,也就是从外向内,对第三个括号取第一个元素,即:
x2 =
[
[
[1, 1, 1]#第三个括号
#第 1 2 3个元素
]
]
=====>
x3 =
[
[
[1]
]
]
2、z = tf.strided_slice(data,[0,0,0],[2,2,2],[1,2,1])
其中input_ = data, begin = [0,0,0],end = [2,2,2],strides = [1,2,1]。
(1)、首先第一维是begin=0,end=2,stride = 1也就是从外向内,对第一个括号取第一个和第二个元素,即:
data =
[#第一个括号,
[
[1, 1, 1],
[2, 2, 2]
],#第一个括号的第一个元素
[
[3, 3, 3],
[4, 4, 4]
],#第一个括号的第二个元素
[
[5, 5, 5],
[6, 6, 6]
] #第一个括号的第三个元素
]
=====>
x1 =
[#第一个括号,
[
[1, 1, 1],
[2, 2, 2]
]#第一个括号的第一个元素
[
[3, 3, 3],
[4, 4, 4]
]#第一个括号的第二个元素
]
(2)、第二维是begin=0,end=2,stride = 2,也就是从外向内,对所有第二个括号取第一个元素,注意:end是开区间,即:
x1 =
[
[#第二个括号,
[1, 1, 1],#第二个括号的第一个元素
[2, 2, 2] #第二个括号的第二个元素
],
[
[3, 3, 3],#第二个括号的第一个元素
[4, 4, 4] #第二个括号的第二个元素
]
]
=====>
x2 =
[
[#第二个括号,
[1, 1, 1] #第二个括号的第一个元素
],
[
[3, 3, 3] #第二个括号的第一个元素
]
]
(3)、首先第三维是begin=0,end=2,stride = 1也就是从外向内,对所有第三个括号取第一个和第二个元素,即:
x2 =
[
[
[1, 1, 1] #第三个括号,
#第 1 2 3个元素
],
[
[3, 3, 3] #第三个括号,
#第 1 2 3个元素
]
]
=====>
x3 =
[
[#第二个括号,
[1, 1] #第二个括号的第一个元素
#第 1 2 个元素
],
[
[3, 3] #第二个括号的第一个元素
#第 1 2 个元素
]
]
以上是关于tf.strided_slice()的主要内容,如果未能解决你的问题,请参考以下文章