前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tensorflow语法【tf.gather_nd、reduce_sum、collections.deque 、numpy.random.seed()、tf.gradients()】

tensorflow语法【tf.gather_nd、reduce_sum、collections.deque 、numpy.random.seed()、tf.gradients()】

作者头像
汀丶人工智能
发布2022-12-01 16:40:00
3480
发布2022-12-01 16:40:00
举报
文章被收录于专栏:NLP/KG

相关文章:

【一】tensorflow安装、常用python镜像源、tensorflow 深度学习强化学习教学

【二】tensorflow调试报错、tensorflow 深度学习强化学习教学

【三】tensorboard安装、使用教学以及遇到的问题

【四】超级快速pytorch安装


trick1---实现tensorflow和pytorch迁移环境教学


tf.gather_nd详解

代码语言:javascript
复制
tf.gather_nd(
    params,
    indices,
    name=None
)

按照indices的格式从params中抽取切片(合并为一个Tensor)indices是一个K维整数Tensor。

代码语言:javascript
复制
import tensorflow as tf

a = tf.Variable([[1, 2, 3, 4, 5],
                 [6, 7, 8, 9, 10],
                 [11, 12, 13, 14, 15]])
index_a1 = tf.Variable([[0, 2], [0, 4], [2, 2]])  # 随便选几个
index_a2 = tf.Variable([0, 1])  # 0行1列的元素——2
index_a3 = tf.Variable([[0], [1]])  # [第0行,第1行]
index_a4 = tf.Variable([0])  # 第0行


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(tf.gather_nd(a, index_a1)))
    print(sess.run(tf.gather_nd(a, index_a2)))
    print(sess.run(tf.gather_nd(a, index_a3)))
    print(sess.run(tf.gather_nd(a, index_a4)))

结果:

代码语言:javascript
复制
[ 3  5 13]
2
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
[1 2 3 4 5]

tf.reduce_sum()_tf.reduce_mean()_tf.reduce_max()

reduce_sum应该理解为压缩求和,用于降维

tf.reduce_sum(input_tensor,axis=None,keepdims=None,name=None,reduction_indices=None,keep_dims=None)

  • input_tensor: The tensor to reduce. Should have numeric type. #输入
  • axis: The dimensions to reduce. If None (the default), reduces all dimensions. Must be in the range (rank(input_tensor), rank(input_tensor)).#取0第一维,取1第二维,取-1最后一维
  • keepdims: If true, retains reduced dimensions with length 1.#按照原来的维度
  • name: A name for the operation (optional).
  • reduction_indices: The old (deprecated) name for axis.#axis的原来的名字
  • keep_dims: Deprecated alias for keepdims.
代码语言:javascript
复制
import tensorflow as tf
import numpy as np
 
x = tf.constant([[1,1,1],[2,2,2]])
with tf.Session() as sess:
    print(sess.run(tf.reduce_sum(x))) #所有求和
    print(sess.run(tf.reduce_sum(x,0))) #按 列 求和
    print(sess.run(tf.reduce_sum(x,1))) #按 行 求和
    print(sess.run(tf.reduce_sum(x,1,keepdims=True))) #按维度 行 求和
    print(sess.run(tf.reduce_sum(x,[0,1])))  #行列求和
    print(sess.run(tf.reduce_sum(x,reduction_indices=[1])))

输出结果

代码语言:javascript
复制
9
[3 3 3]
[3 6]
[[3]
 [6]]
9
[3 6]
代码语言:javascript
复制
import tensorflow as tf
import numpy as np
 
x = tf.constant([[1,2],[3,4]])
with tf.Session() as sess:
    print(sess.run(tf.reduce_mean(x))) #所有求平均
    print(sess.run(tf.reduce_mean(x, 0))) #按 列 求和
    print(sess.run( tf.reduce_mean(x, 1)))#按行求平均
    print(sess.run(tf.reduce_max(x)))
    print(sess.run(tf.reduce_max(x, 0)))
    print(sess.run(tf.reduce_max(x, 1)))

输出

代码语言:javascript
复制
###############输出##########2
[2 3]
[1 3]
4
[3 4]
[2 4]

collections.deque -- 队列的使用

deque(maxlen=N)创建一个固定长度的队列。当有新纪录加入而队列已满时会自动移除最老的那条记录。

代码语言:javascript
复制
from collections import deque
q = deque(maxlen=3)
q
Out[9]: deque([])
q.append(1)
q.append(2)
q.append(3)
q
Out[13]: deque([1, 2, 3])
q.append(4)
q
Out[15]: deque([2, 3, 4])

如果不指定队列的大小,也就得到了一个无界限的队列,可以在两端执行添加和删除操作。

代码语言:javascript
复制
q = deque()
q
Out[17]: deque([])
q.append(1)
q.append(2)
q.append(3)
q
Out[21]: deque([1, 2, 3])
q.appendleft(4)
q
Out[23]: deque([4, 1, 2, 3])
q.pop()
Out[24]: 3
q
Out[25]: deque([4, 1, 2])
q.popleft()
Out[26]: 4
q
Out[27]: deque([1, 2])

应用: --保留最后N个元素(保存有限的历史记录),当发现有匹配时就输出当前的匹配行以及最后检查过的N行文本:

代码语言:javascript
复制
def search(lines, pattern, history=5):
    """ 文本匹配操作:当发现有匹配时就输出当前的匹配行及最后检查过的N行文本 """
    previous_lines = deque(maxlen=history)
    for line in lines:
        if pattern in line:
            # 将处理搜索过程的代码和使用搜索结果的代码解耦
            yield line, previous_lines  # 返回line,previous_lines
        previous_lines.append(line)

with open('test.txt') as f:
    for line, prevlines in search(f, 'python', 5):  # for用来迭代生成器search
        for pline in prevlines:
            print(pline, end='')  # 将end='\n'替换
        print(line, end='')
        print('-'*20)

numpy.random.seed()的参数说明

numpy.random.seed()函数:seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同

seed()括号中的参数该如何设置呢?

把seed()中的参数比喻成“类”,eg. seed(5):表示第5类

注意:从每类里选出来的数都是不会变的,从不同的堆里选随机每次都不一样

代码语言:javascript
复制
import numpy as np
np.random.seed(1)
a = np.random.random()
print(a)

a
0.417022004702574
代码语言:javascript
复制
import numpy as np
np.random.seed(2)
a= np.random.random()

a
0.83599490214200376

两次输出的 a 是不一样的,那如果我在某一块程序想要a=0.417022004702574时,该怎么办?那此时我们还需要再申明一次seed(1)

代码语言:javascript
复制
import numpy as np
np.random.seed(1)
a = np.random.random()
print(a)

(参数可以任意设置,只要前后所用参数一样,就可以取到一样的随机数)

tf.gradients()

在tensorflow中,tf.gradients()的参数如下:

代码语言:javascript
复制
tf.gradients(ys, xs, 
			 grad_ys=None, 
			 name='gradients',
			 colocate_gradients_with_ops=False,
			 gate_gradients=False,
			 aggregation_method=None,
			 stop_gradients=None)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • tf.gather_nd详解
  • tf.reduce_sum()_tf.reduce_mean()_tf.reduce_max()
  • collections.deque -- 队列的使用
  • numpy.random.seed()的参数说明
  • tf.gradients()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档