Tensorflow-Function

 

目录

1.tf.equal(x,y,name=None)

2. tf.argmax(input, dimension, name=None)

3. tf.cast(x,dtype,name=None)

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

5.tf.equal + tf.argmax + tf.cast + fr.reduce_mean = Accuracy

6. tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)


对于Tensorflow,有一些函数在 在实际应用场景中经常会用到,计算Accuracy是每个研究都会用到的衡量工具,那么,如何在Tensorflow中计算常见问题的Accuracy呢?实际上几行代码就可以搞定。但是有几个函数需要先了解一下。

1.tf.equal(x,y,name=None)

概述:
  Returns the truth value of (x == y) element-wise.# 按元素返回(x == y)的真值。
  注意这里的按照元素返回,意思就是逐个元素对比并返回True or False

变量介绍:

  x: 一个张量(Tensor),可以选择如下类型:`bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `int16`, `int32`, `int64`, `complex64`, `quint8`, `qint8`, `qint32`, `string`, `bool`, `complex128`.

  y: 一个张量(Tensor),必须和X的类型一致。

  name: 这个操作的名字,可忽略。

  返回值:一个布尔类型的张量。(A 'Tensor' of type 'bool')

举例

import tensorflow as tf
a = [[5,1,0],[4,2,7]]
b = [[5,6,0],[8,2,1]]
with tf.Session() as sess:
   print(sess.run(tf.equal(a,b)))

输出

[[ True False  True]
 [False  True False]]

2. tf.argmax(input, dimension, name=None)

概述:返回input中最大元素对应的下标

变量介绍:

  input:一个张量(Tensor)就是要访问的元素

  dimension:0或者1;0代表按行对比张量中的元素;1代表按列对比张量中的元素

  name:这个操作的名字,可忽略

  返回值:A Tensor of type int64。(注意哦由于这里返回的是元素的下标,也就是位置,因此是int64类型的,如果后面要用这个数据,则需要进行转换,转换函数用tf.cast())

举例:

import tensorflow as tf
a = tf.constant([1.,2.,3.,0.,9.,])
b = tf.constant([[1,2,3],[3,2,1],[4,5,6],[6,5,4]])
with tf.Session() as sess:
    print(sess.run(tf.argmax(a, 0)))

with tf.Session() as sess:
    print(sess.run(tf.argmax(b, 0)))

with tf.Session() as sess:
    print(sess.run(tf.argmax(b, 1)))

输出:

4
[3 2 2]
[2 0 2 0]

3. tf.cast(x,dtype,name=None)

概述:将输入x转化成类型dtype

变量介绍:

  x:一个张量(Tensor)

  dtype:数据类型

  name:操作名称

候选的数据类型(针对x和dtype):

Args:
    x: A `Tensor` or `SparseTensor` or `IndexedSlices` of numeric type. It could
      be `uint8`, `uint16`, `uint32`, `uint64`, `int8`, `int16`, `int32`,
      `int64`, `float16`, `float32`, `float64`, `complex64`, `complex128`,
      `bfloat16`.
    dtype: The destination type. The list of supported dtypes is the same as
      `x`.
    name: A name for the operation (optional).

举例:

import tensorflow as tf

t1 = tf.Variable([1, 2, 3, 4, 5])
t2 = tf.cast(t1, dtype=tf.float32)

print ('t1: {}'.format(t1))
print ('t2: {}'.format(t2))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    sess.run(t2)
    print (t2.eval())

输出:

t1: <tf.Variable 'Variable:0' shape=(5,) dtype=int32_ref>
t2: Tensor("Cast:0", shape=(5,), dtype=float32)
[1. 2. 3. 4. 5.]

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

概述:tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值。

变量介绍:

  input_tensor: 输入的待降维的tensor;
  axis: 指定的轴,如果不指定,则计算所有元素的均值;
  keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;
  name: 操作的名称;
  reduction_indices:在以前版本中用来指定轴,已弃用;

举例:

import tensorflow as tf

x = [[1, 2, 3],
     [1, 2, 3]]

xx = tf.cast(x, tf.float32)

mean_all_F = tf.reduce_mean(xx, keep_dims=False)
mean_0_F = tf.reduce_mean(xx, axis=0, keep_dims=False)
mean_1_F = tf.reduce_mean(xx, axis=1, keep_dims=False)

mean_all_T = tf.reduce_mean(xx, keep_dims=True)
mean_0_T = tf.reduce_mean(xx, axis=0, keep_dims=True)
mean_1_T = tf.reduce_mean(xx, axis=1, keep_dims=True)

with tf.Session() as sess:
    m_a_F, m_0_F, m_1_F = sess.run([mean_all_F, mean_0_F, mean_1_F])
    m_a_T, m_0_T, m_1_T = sess.run([mean_all_T, mean_0_T, mean_1_T])

print(' when keep_dims is False:')
print(m_a_F)
print(m_0_F)
print(m_1_F)

print('when keep_dims is True:')
print(m_a_T)
print(m_0_T)
print(m_1_T)

输出:

 when keep_dims is False:
2.0  # m_a_F
[1. 2. 3.] # m_0_F
[2. 2.] # m_1_F
when keep_dims is True:
[[2.]] # m_a_T
[[1. 2. 3.]] # m_0_T
[[2.] [2.]] # m_1_T

5.tf.equal + tf.argmax + tf.cast + fr.reduce_mean = Accuracy

  没错,有了上述几个函数,我们就可以很容易地对比实际值和预测值之间的关系,并计算模型的准确度。
  例如,定义计算准确度的函数:

import tensorflow as tf
# 以分类问题为例,神经网络的输出结果就是y_pre,
# 分类问题往往用输出神经元的编号作为类别,因此 tf.argmax() 函数会经常被用到
y_pre = [[4],[5],[8]]  # 预测值
y_act = [[4],[6],[8]]  # 实际值
correct_prediction = tf.equal(y1,y2)
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
with tf.Session() as sess:
    print(sess.run(correct_prediction))
    print(sess.run(tf.cast(correct_prediction,tf.float32)))
    print(sess.run(accuracy))

输出:

[[ True]
 [False]
 [ True]]

[[1.]
 [0.]
 [1.]]

0.6666667 # 分类准确率是66.67%

 

为了进一步理解如何计算accuracy,给出一个利用LSTM进行手写识别的计算accuracy的函数实例。

def compute_accuracy(v_xs,v_ys):
    # prediction 函数计算网络的输出值
    global prediction
    y_pre = sess.run(prediction,feed_dict={xs:v_xs})
    # 计算预测值和输出值是否一致,一致为True不一致为False
    correct_prediction = tf.equal(tf.argmax(y_pre,1),tf.argmax(v_ys,1))
    # 将True 和 False 转化成 1. 和0.的形式并计算平均值,换句话说就是计算1的百分比
    accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    # run 一下这个accuracy获得结果
    result = sess.run(accuracy,feed_dict={xs:v_xs,ys:v_ys})
    return result

  对于prediction函数,往往会利用softmax等函数进行计算,也是可以直接调用tf中的方法来实现,这一点会在后面的实例中进一步介绍。

6. tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)

概述:tf.random_normal()从服从指定的正态分布的序列中随机取出指定个数的值。

(正态分布:若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。(来源:百度百科))

变量介绍:

  shape: 输出张量的形状,必选
  mean: 正态分布的均值,默认为0
  stddev: 正态分布的标准差,默认为1.0
  dtype: 输出的类型,默认为tf.float32
  seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
  name: 操作的名称

举例:

import tensorflow as tf

# make a [2,3] shape tensor with
# if you set a seed=1 which means that you will get the same results every time
x1 = tf.Variable(tf.random_normal([2,3],seed=1,dtype=tf.float32))

# init = tf.initialize_all_variables() # for old verson Tensorflow
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print(x1)
    print(sess.run(x1))

输出:

<tf.Variable 'Variable:0' shape=(2, 3) dtype=float32_ref>
[[-0.8113182   1.4845988   0.06532937]
 [-2.4427042   0.0992484   0.5912243 ]]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值