TensorFlow常用总结

1.计算图节点与Tensor

TensorFlow计算图中每一个节点都定义了一个计算,而计算的结果都通过Tensor 来保存,因此Tensor和计算图中节点对应的计算结果所对应,同时Tensor具有3个重要属性,name,dtype,shape,通过name可以唯一确定计算图上的一个Tensor,而Tensor通过dtype和shape相当于确定了一个schema,只有在计算图每次运行的时候,会有符合该schema的值被赋予到Tensor上。

2.tf.py_func使用

因为在tensorflow中 tensor只是占位符,只有在运行的时候才能够有真是的值填充,这也就导致了在构建Graph的时候有很多局限,比如 你无法在构建Graph的时候针对某一个operation的运算结果进行if else条件判断,同时你也无法将某个Operation计算结果直接当做numpy的array进行处理,为了弥补这一局限性 tensorflow中使用tf.py_func进行补充。
tf.py_func函数解析:

tf.py_func(func,inp,Tout,stateful=True,name)

定义一个python函数 func,该函数的输入参数为numpy array形式,输出也是一个numpy array,tf.py_func将该函数包装成为一个operation,嵌入到Graph中
func:用户自定义的python函数,输入为numpy array,输出也为numpy array
inp:func函数接收的输入 是一个Tensor的list
Tout:指定了func函数返回值转化为Tensor的数据类型

以一个真实场景举例

def np_random_choice_sample(self, sample_prob, candidate_num, choice_number):
        two_axis_tensor = tf.constant([[j+i*candidate_num for j in range(candidate_num)] for i in range(self.batch_size)], tf.int32)
        line_num, _ = two_axis_tensor.get_shape()
        result = []
        for i in range(self.batch_size):
            result.append(tf.py_func(np.random.choice, [two_axis_tensor[i], tf.constant(choice_number, tf.int32), tf.constant(False, tf.bool), sample_prob[i]], tf.int32))
        return tf.reshape(tf.concat(result, axis=0), [-1])

首先声明一个Tensor two_axis_tensor ,然后利用 np.random.choice ,因为 np.random.choice 接收4个传入的参数,要注意在这里传入的参数均需要是tf.Variable类型,以list的形式传入,当传入参数只有一个的时候 也需要以list的形式传入)同时 Tout指定输出的结果的数据类型,当然如果返回多个值并且每个值的数据类型不同 可以使用list分别指定不同的数据类型

当然func可以是用户自定义的任意numpy数据处理集合 但是要注意不可以在func中进行需要反向传播的操作

数据采样相关函数

tf.unique_with_count

对于一个1D的数组 其中有若干重复的元素 想要观察其中非重复的部分的分布情况,可以使用 tf.unique_with_count

# tensor 'x' is [1, 1, 2, 4, 4, 4, 7, 8, 8]
y, idx, count = tf.unique_with_counts(x)
y ==> [1, 2, 4, 7, 8]
idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4]
count ==> [2, 1, 3, 1, 2]
tf.nn.topk

给定Tensor以及k值 ,对于给定的tensor 如果是多维Tensor 则每次采样都是在最后一维中进行

import numpy as np
a = tf.convert_to_tensor(np.random.random([3,3]))

# 按照最后一个维度取出前5个最大的数据,默认从大到小进行排序。
b = tf.nn.top_k(a, 2)

with tf.Session() as sess:
    print(sess.run(a))
    print(sess.run(b))

[[0.24674883 0.10466478 0.15669153]
 [0.17753881 0.4964197  0.23149027]
 [0.85461829 0.77626046 0.81463996]]
TopKV2(values=array([[0.24674883, 0.15669153],
       [0.4964197 , 0.23149027],
       [0.85461829, 0.81463996]]), indices=array([[0, 2],
       [1, 2],
       [0, 2]], dtype=int32))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值