首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tf.slice和tf.strided_slice

tf.slice和tf.strided_slice
EN

Stack Overflow用户
提问于 2017-08-26 22:39:57
回答 1查看 1.5K关注 0票数 1

试着理解tensorflow strided_slice和片

代码语言:javascript
复制
x = tf.constant(np.array(   [[[111, 112, 113], [121, 122, 123]],
                            [[211, 212, 213], [221, 222, 223]],
                            [[311, 312, 313], [321, 322, 323]]]))
with tf.Session() as sess:
    print("tf.shape ------------------")
    print(sess.run(tf.shape(x)))
    print("tf.slice ------------------------")
    print(sess.run((tf.slice(x, [1, 0, 0], [2, 1, 3]) )))
    print("tf.strided_slice ------------------------")
    print(sess.run(tf.strided_slice(x, [1, 0, 0], [2, 1, 3], [1, 1, 1])))
    print(sess.run(tf.strided_slice(x, [1, -1, 0], [2, -3, 3], [1, -1, 1])))
    print(sess.run(x[1,-1,0]))
    print(sess.run(x[2,-3,3]))

输出

代码语言:javascript
复制
tf.shape ------------------
[3 2 3]
tf.slice ------------------------
[[[211 212 213]]

 [[311 312 313]]]
tf.strided_slice ------------------------
[[[211 212 213]]]
[[[221 222 223]
  [211 212 213]]]
221
ValueError: slice index -1 of dimension 1 out of bounds. for 'strided_slice_8' (op: 'StridedSlice') with input shapes: [3,2,3], [3], [3], [3] and with computed input tensors: input[1] = <2 -3 3>, input[2] = <3 -2 4>, input[3] = <1 1 1>.

对于tf.slice,我理解我们必须在每个维度中提到片大小,因此超出量程值是有意义的。但在条纹切片中,尾是张量本身中的张量指标,如何得到大小值是有效的。

示例取自切片

利用纸张用于句子建模的卷积神经网络实现折叠层零件

到目前为止,在网络的制定中,应用于句子矩阵的单个行的特征检测器可以有多个顺序,并在多个特征映射中跨同一行创建复杂的依赖关系。然而,不同行中的特征检测器相互独立,直到顶层完全连接。不同行之间的完全依赖可以通过在等式中生成M来实现。5用完全矩阵代替稀疏对角矩阵。在这里,我们探索了一种叫做折叠的简单方法,它不引入任何额外的参数。在一个卷积层之后,在(动态)k池之前,1只是在一个按特征映射组件的中每两行加一次。对于d行映射,折叠返回d/2行的映射,从而将表示的大小减半。对于折叠层,I阶特征检测器现在依赖于I阶−1的较低映射中的两行特征值,这就结束了对DCNN的描述。

EN

回答 1

Stack Overflow用户

发布于 2018-07-11 06:06:59

生成的ValueError与对Strided_Slice的前2次调用没有任何关系。对Strided_Slice操作的使用是正确的

打印(sess.run(x,1,0,0,2,1,3,1,1,1)) 打印(sess.run(x,1,-1,0,2,-3,3,1,-1,1))

你的问题是呼吁

打印(sess.run(x2,-3))

python数组中的负索引反向遍历数组。

例如,给定这样一个数组

代码语言:javascript
复制
arr = ['a', 'b', 'c', 'd', 'e', 'f']

呼叫arr-1会产生“f”。同样,对arr-4的调用将产生“c”。如果我们打电话给arr-7会怎么样?这将尝试访问索引-1,这将引发一个错误。

请记住,Python中的数组具有基于0的索引。对x2,-3,3的调用最初访问外部数组中索引2(第3个元素)中的元素,即

代码语言:javascript
复制
[[311, 312, 313], [321, 322, 323]]

现在,在这个外部数组中,有两个元素。然而,您的调用x2,-3,3试图访问在索引-1处的元素,因为它从数组的末尾开始迭代。这就是导致错误的原因。

维数1超出界的切片索引-1

注意到:在x2、-3、3中尝试访问的最后一个索引也会产生一个ValueError,因为它试图访问的是一个索引,而不是数组中的索引。要解决这个问题,您的电话可以是x2,- 2,2。

下面是有关Python:切片中的分片、切片和数组索引的几个链接

docs/python/tf/片

负列表指数?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45900233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档