tensor的slice赋值

我们经常在numpy中会用到类似于label[:, :, :, :, 0] = 0这样的切片赋值操作,那么在TensorFlow中应该如何实现呢?

a = tf.Variable([[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]],[[5, 5, 5], [6, 6, 6]]])
with tf.Session() as sess:
    sess.run(tf.global_variable_initializer())
    sess.run(a[:2,:1,:].assign(-1*tf.ones_like(a[:2,:1,:]))) # 将a[:2,:1,:] 中的数值赋值为-1,注意assign函数中的参数不能直接赋-1,会报错说不支持broadcast
    sess.run(a)

输出

**第一个输出
array([[[-1, -1, -1],
        [ 2,  2,  2]],

       [[-1, -1, -1],
        [ 4,  4,  4]],

       [[ 5,  5,  5],
        [ 6,  6,  6]]], dtype=int32)
**第二个输出
array([[[-1, -1, -1],
        [ 2,  2,  2]],

       [[-1, -1, -1],
        [ 4,  4,  4]],

       [[ 5,  5,  5],
        [ 6,  6,  6]]], dtype=int32)

说明tensor-a中的数值已经被成功修改了。大功告成。

补充一个conditional slice assignment
例如我们需要让a tensor中所有等于-1的地方都变为0,怎么操作呢

contition = tf.equal(a,-1)
sess.run(tf.where(condition, tf.zeros_like(condition, dtype=tf.int32), a))
# 这里的tf.where中的三个参数分别代表判断条件,满足条件的位置赋值矩阵以及不满足条件的位置的赋值矩阵,要注意前两个矩阵要同大小。
# 这里的意思就是,满足a == -1的位置赋值为0,其他位置还是a原来的值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 该文章为转载文章,作者简介:汪剑,现在在出门问问负责推荐与个性化。曾在微软雅虎工作,从事过搜索和推荐相关工作。 T...
    名字真的不重要阅读 10,747评论 0 3
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 10,545评论 0 18
  • 1.如果人生比喻是真实世界,有一个他生活在自己的虚拟世界,清晨的阳光沐浴他的可悲可叹的心灵,他放弃所有只为了...
    昂贵的青春阅读 1,508评论 1 9
  • 读大学的时候,身边的同学给我说,他是农村来的,家里很穷,自己长的也很一般,属于那种既没有颜值有没有背景的人...
    伟大的花颜ii阅读 4,229评论 3 11
  • 没有前车之鉴,人生还是要自己选择着走。销售人员的业绩就是命,那英文不好我们会请老师教,因为爱好我们会主动学轮滑,那...
    吕明超阅读 1,287评论 0 0