摘要:使用例子輸入參數一個,數據類型必須是以下之一,,,,,,。解釋這個函數的作用是沿著指定的維度,分割張量中的值,并且返回最大值。
作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai
簡書地址:https://www.jianshu.com/p/4da...
計劃現將 tensorflow 中的 Python API 做一個學習,這樣方便以后的學習。該章介紹有關數學符號操作的API
原文鏈接
第一部分
第二部分
TensorFlow提供了一些操作,你可以用它來執行常見的數學運算,以此減少張量的維度。
tf.reduce_sum(input_tensor, reduction_indices=None, keep_dims=False, name=None)
解釋:這個函數的作用是計算指定維度的元素總和。
沿著給定的reduction_indices維度,累加input_tensor中該維度的元素,最后返回累加的值。如果keep_dims = False,沿著reduction_indices維度進行累加,最后返回一個秩為1的tensor。如果keep_dims = True,那么每一維度的累加值返回一個秩為1的tensor。
如果reduction_indices沒有給定,那么我們將input_tensor中的元素全部進行累加,最后返回一個標量。
比如:
# "x" is [[1, 1, 1]] # [1, 1, 1]] tf.reduce_sum(x) ==> 6 tf.reduce_sum(x, 0) ==> [2, 2, 2] tf.reduce_sum(x, 1) ==> [3, 3] tf.reduce_sum(x, 1, keep_dims=True) ==> [[3], [3]] tf.reduce_sum(x, [0, 1]) ==> 6
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant(np.random.rand(3,4)) c = tf.reduce_sum(a, 1, keep_dims = True) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input_tensor: 一個累加的Tensor,它應該是數字類型。
reduction_indices: 指定累加的維度。如果是None,那么累加所有的元素。
keep_dims: 如果是True,那么指定維度中的元素累加返回一個秩為1的Tensor。如果是False,那么返回一個累加的標量。
name:(可選)為這個操作取一個名字。
輸出參數:
一個累加的Tensor。
tf.reduce_prod(input_tensor, reduction_indices=None, keep_dims=False, name=None)
解釋:這個函數的作用是計算指定維度的元素相乘的總和。
沿著給定的reduction_indices維度,累乘input_tensor中該維度的元素,最后返回累乘的值。如果keep_dims = False,沿著reduction_indices維度進行累乘,最后返回一個秩為1的tensor。如果keep_dims = True,那么每一維度的累乘值返回一個秩為1的tensor。
如果reduction_indices沒有給定,那么我們將input_tensor中的元素全部進行累乘,最后返回一個標量。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[2,3,1],[4,5,1]]) c = tf.reduce_prod(a, 0) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input_tensor: 一個累乘的Tensor,它應該是數字類型。
reduction_indices: 指定累乘的維度。如果是None,那么累乘所有的元素。
keep_dims: 如果是True,那么指定維度中的元素累乘返回一個秩為1的Tensor。如果是False,那么返回一個累乘的標量。
name:(可選)為這個操作取一個名字。
輸出參數:
一個累乘的Tensor。
tf.reduce_min(input_tensor, reduction_indices=None, keep_dims=False, name=None)
解釋:這個函數的作用是計算指定維度的元素中的最小值。
沿著給定的reduction_indices維度,找到input_tensor中該維度的元素的最小值,最后返回這個最小值。如果keep_dims = False,沿著reduction_indices維度尋找最小值,最后返回一個秩為1的tensor。如果keep_dims = True,那么每一維度的最小值返回一個秩為1的tensor。
如果reduction_indices沒有給定,那么我們取input_tensor中的最小元素,最后返回一個標量。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[2,3,2],[4,5,1]]) c = tf.reduce_min(a, 0) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input_tensor: 一個需要處理的Tensor,它應該是數字類型。
reduction_indices: 指定需要查找最小值的維度。如果是None,那么從所有的元素中找最小值。
keep_dims: 如果是True,那么指定維度中的最小值返回一個秩為1的Tensor。如果是False,那么返回一個最小值的標量。
name:(可選)為這個操作取一個名字。
輸出參數:
一個處理之后的Tensor。
tf.reduce_max(input_tensor, reduction_indices=None, keep_dims=False, name=None)
解釋:這個函數的作用是計算指定維度的元素中的最大值。
沿著給定的reduction_indices維度,找到input_tensor中該維度的元素的最大值,最后返回這個最大值。如果keep_dims = False,沿著reduction_indices維度尋找最大值,最后返回一個秩為1的tensor。如果keep_dims = True,那么每一維度的最大值返回一個秩為1的tensor。
如果reduction_indices沒有給定,那么我們取input_tensor中的最大元素,最后返回一個標量。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[2,3,2],[4,5,1]]) c = tf.reduce_max(a, 0) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input_tensor: 一個需要處理的Tensor,它應該是數字類型。
reduction_indices: 指定需要查找最大值的維度。如果是None,那么從所有的元素中找最大值。
keep_dims: 如果是True,那么指定維度中的最大值返回一個秩為1的Tensor。如果是False,那么返回一個最大值的標量。
name:(可選)為這個操作取一個名字。
輸出參數:
一個處理之后的Tensor。
tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)
解釋:這個函數的作用是計算指定維度中的元素的平均值。
沿著給定的reduction_indices維度,找到input_tensor中該維度的元素的平均值,最后返回這個平均值。如果keep_dims = False,沿著reduction_indices維度尋找平均值,最后返回一個秩為1的tensor。如果keep_dims = True,那么每一維度的平均值返回一個秩為1的tensor。
如果reduction_indices沒有給定,那么我們取input_tensor中的平均值,最后返回一個標量。
比如:
# "x" is [[1., 1. ]] # [2., 2.]] tf.reduce_mean(x) ==> 1.5 tf.reduce_mean(x, 0) ==> [1.5, 1.5] tf.reduce_mean(x, 1) ==> [1., 2.]
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[2,3,2],[4,5,1]], tf.float32) c = tf.reduce_mean(a, 0) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input_tensor: 一個需要處理的Tensor,它應該是數字類型。
reduction_indices: 指定需要查找平均值的維度。如果是None,那么從所有的元素中找平均值。
keep_dims: 如果是True,那么指定維度中的平均值返回一個秩為1的Tensor。如果是False,那么返回一個平均值的標量。
name:(可選)為這個操作取一個名字。
輸出參數:
一個處理之后的Tensor。
tf.reduce_all(input_tensor, reduction_indices=None, keep_dims=False, name=None)
解釋:這個函數的作用是計算指定維度中的元素的邏輯與。
沿著給定的reduction_indices維度,找到input_tensor中該維度的元素的邏輯與,最后返回這個邏輯與值。如果keep_dims = False,沿著reduction_indices維度尋找邏輯與值,最后返回一個秩為1的tensor。如果keep_dims = True,那么每一維度的邏輯與值返回一個秩為1的tensor。
如果reduction_indices沒有給定,那么我們取input_tensor中的邏輯與值,最后返回一個標量。
比如:
# "x" is [[True, True]] # [False, False]] tf.reduce_all(x) ==> False tf.reduce_all(x, 0) ==> [False, False] tf.reduce_all(x, 1) ==> [True, False]
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[False, False,True],[False,True,True]]) c = tf.reduce_all(a, 0) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input_tensor: 一個需要處理的Tensor,它應該是數字類型。
reduction_indices: 指定需要查找邏輯與值的維度。如果是None,那么從所有的元素中找邏輯與值。
keep_dims: 如果是True,那么指定維度中的邏輯與值返回一個秩為1的Tensor。如果是False,那么返回一個邏輯與值的標量。
name:(可選)為這個操作取一個名字。
輸出參數:
一個處理之后的Tensor。
tf.reduce_any(input_tensor, reduction_indices=None, keep_dims=False, name=None)
解釋:這個函數的作用是計算指定維度中的元素的邏輯或。
沿著給定的reduction_indices維度,找到input_tensor中該維度的元素的邏輯或,最后返回這個邏輯或值。如果keep_dims = False,沿著reduction_indices維度尋找邏輯或值,最后返回一個秩為1的tensor。如果keep_dims = True,那么每一維度的邏輯或值返回一個秩為1的tensor。
如果reduction_indices沒有給定,那么我們取input_tensor中的邏輯或值,最后返回一個標量。
比如:
# "x" is [[True, True]] # [False, False]] tf.reduce_all(x) ==> False tf.reduce_all(x, 0) ==> [True, True] tf.reduce_all(x, 1) ==> [True, False]
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[False, False,True],[False,True,True]]) c = tf.reduce_any(a, 0) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input_tensor: 一個需要處理的Tensor,它應該是數字類型。
reduction_indices: 指定需要查找邏輯或值的維度。如果是None,那么從所有的元素中找邏輯或值。
keep_dims: 如果是True,那么指定維度中的邏輯或值返回一個秩為1的Tensor。如果是False,那么返回一個邏輯或值的標量。
name:(可選)為這個操作取一個名字。
輸出參數:
一個處理之后的Tensor。
tf.accumulate_n(inputs, shape=None, tensor_dtype=None, name=None)
解釋:這個函數的作用是計算張量列表中每個對應的元素的累加和。
其中,shape和tensor_dtype是可選項,主要是為了驗證最后返回的累加值的數據維度和數據類型是否和猜測的一樣,如果不一樣,將會報錯。
比如:
# tensor "a" is [[1, 2], [3, 4] # tensor `b` is [[5, 0], [0, 6]] tf.accumulate_n([a, b, a]) ==> [[7, 4], [6, 14]] # Explicitly pass shape and type tf.accumulate_n([a, b, a], shape=[2, 2], tensor_dtype=tf.int32) ==> [[7, 4], [6, 14]]
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1, 2], [3, 4]]) b = tf.constant([[5, 0], [0, 6]]) c = tf.accumulate_n([a,b,a], shape = [2,2]) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
inputs: 一個需要處理的Tensor列表,其中每一個tensor都必須擁有相同的數據維度和數據類型。
shape: inputs的數據維度。
tensor_dtype: inputs的數據類型。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據維度和數據類型都和inputs相同。
異常:
如果inputs中每一個tensor的數據維度不一樣,或者推測的數據維度或數據類型不正確,那么都會拋出異常。
TensorFlow提供了一些操作,你可以使用基本的算術運算來分割輸入的tensor。這里的分割操作是沿著第一個維度的一個分區,等價于這里定義了一個從第一個維度到第segment_ids維度的一個映射。segment_ids張量的長度必須和需要分割的tensor的第一維度的尺寸d0一樣,其中segment_ids中的編號從0到k,并且k < d0。舉個例子,如果我們需要分割的tensor是一個矩陣,那么segment_ids的映射就指向矩陣的每一行。
比如:
c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]) tf.segment_sum(c, tf.constant([0, 0, 1])) ==> [[0 0 0 0] [5 6 7 8]]
tf.segment_sum(data, segment_ids, name=None)
解釋:這個函數的作用是沿著segment_ids指定的維度,分割張量data中的值,并且返回累加值。
計算公式為:
其中,segment_ids[j] == i。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8], [-1,-2,-3,-4]]) c = tf.segment_sum(a, tf.constant([0, 0, 1, 2])) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
data: 一個Tensor,數據類型必須是以下之一:float32,float64,int32,int64,uint8,int16,int8。
segment_ids: 一個tensor,數據類型必須是int32或者int64,數據維度是一維的,并且長度和data第一維度的長度相同。里面的值是從0到k的有序排列,但是可以重復。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型和data相同,數據的第一維度是k,其余維度和data相同。
tf.segment_prod(data, segment_ids, name=None)
解釋:這個函數的作用是沿著segment_ids指定的維度,分割張量data中的值,并且返回累乘值。
計算公式為:
其中,segment_ids[j] == i。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8], [-1,-2,-3,-4]]) c = tf.segment_prod(a, tf.constant([0, 0, 1, 2])) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
data: 一個Tensor,數據類型必須是以下之一:float32,float64,int32,int64,uint8,int16,int8。
segment_ids: 一個tensor,數據類型必須是int32或者int64,數據維度是一維的,并且長度和data第一維度的長度相同。里面的值是從0到k的有序排列,但是可以重復。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型和data相同,數據的第一維度是k,其余維度和data相同。
tf.segment_min(data, segment_ids, name=None)
解釋:這個函數的作用是沿著segment_ids指定的維度,分割張量data中的值,并且返回最小值。
計算公式為:
其中,segment_ids[j] == i。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8], [-1,-2,-3,-4]]) c = tf.segment_min(a, tf.constant([0, 0, 1, 2])) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
data: 一個Tensor,數據類型必須是以下之一:float32,float64,int32,int64,uint8,int16,int8。
segment_ids: 一個tensor,數據類型必須是int32或者int64,數據維度是一維的,并且長度和data第一維度的長度相同。里面的值是從0到k的有序排列,但是可以重復。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型和data相同,數據的第一維度是k,其余維度和data相同。
tf.segment_max(data, segment_ids, name=None)
解釋:這個函數的作用是沿著segment_ids指定的維度,分割張量data中的值,并且返回最大值。
計算公式為:
其中,segment_ids[j] == i。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8], [-1,-2,-3,-4]]) c = tf.segment_max(a, tf.constant([0, 0, 1, 2])) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
data: 一個Tensor,數據類型必須是以下之一:float32,float64,int32,int64,uint8,int16,int8。
segment_ids: 一個tensor,數據類型必須是int32或者int64,數據維度是一維的,并且長度和data第一維度的長度相同。里面的值是從0到k的有序排列,但是可以重復。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型和data相同,數據的第一維度是k,其余維度和data相同。
tf.segment_mean(data, segment_ids, name=None)
解釋:這個函數的作用是沿著segment_ids指定的維度,分割張量data中的值,并且返回平均值。
計算公式為:
其中,segment_ids[j] == i。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8], [-1,-2,-3,-4]]) c = tf.segment_mean(a, tf.constant([0, 0, 1, 2])) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
data: 一個Tensor,數據類型必須是以下之一:float32,float64,int32,int64,uint8,int16,int8。
segment_ids: 一個tensor,數據類型必須是int32或者int64,數據維度是一維的,并且長度和data第一維度的長度相同。里面的值是從0到k的有序排列,但是可以重復。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型和data相同,數據的第一維度是k,其余維度和data相同。
tf.unsorted_segment_sum(data, segment_ids, num_segments, name=None)
解釋:這個函數的作用是沿著segment_ids指定的維度,分割張量data中的值,并且返回累加值。
計算公式為:
其中,segment_ids[j] == i。這個API和SegmentSum最大的區別是,這個API不需要從0到k有序排列,可以亂序排列,并且該API不需要包含從0到k。
如果對于給定的分割區間ID i,output[i] = 0。那么,num_segmetns應該等于不同的段ID的數量。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8], [-1,-2,-3,-4]]) c = tf.unsorted_segment_sum(a, tf.constant([0, 0, 1, 1]), 2) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
data: 一個Tensor,數據類型必須是以下之一:float32,float64,int32,int64,uint8,int16,int8。
segment_ids: 一個tensor,數據類型必須是int32或者int64,數據維度是一維的,并且長度和data第一維度的長度相同。
num_segments: 一個tensor,數據類型是int32。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型和data相同,數據的第一維度是num_segments,其余維度和data相同。
tf.sparse_segment_sum(data, indices, segment_ids, name=None)
解釋:這個函數的作用是沿著segment_ids指定的維度,分割張量data中的值,并且返回累加值。
該API和SegmentSum差不多,但是該API的segment_ids的長度可以小于data的第一維度的長度,而是從indices中選擇出需要切分的分割索引。
比如:
c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]) # Select two rows, one segment. tf.sparse_segment_sum(c, tf.constant([0, 1]), tf.constant([0, 0])) ==> [[0 0 0 0]] # Select two rows, two segment. tf.sparse_segment_sum(c, tf.constant([0, 1]), tf.constant([0, 1])) ==> [[ 1 2 3 4] [-1 -2 -3 -4]] # Select all rows, two segments. tf.sparse_segment_sum(c, tf.constant([0, 1, 2]), tf.constant([0, 0, 1])) ==> [[0 0 0 0] [5 6 7 8]] # Which is equivalent to: tf.segment_sum(c, tf.constant([0, 0, 1]))
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8], [-1,-2,-3,-4]]) c = tf.sparse_segment_sum(a, tf.constant([0, 1, 1, 2]), tf.constant([0, 0, 1, 2])) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
data: 一個Tensor,數據類型必須是以下之一:float32,float64,int32,int64,uint8,int16,int8。
indices: 一個tensor,數據類型是int32,數據維度是一維的,長度和segment_ids相同。
segment_ids: 一個tensor,數據類型必須是int32,數據維度是一維的。里面的值是有序排列的,但是可以重復。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型和data相同,數據的第一維度是k,其余維度和data相同。
tf.sparse_segment_mean(data, indices, segment_ids, name=None)
解釋:這個函數的作用是沿著segment_ids指定的維度,分割張量data中的值,并且返回累加值。
該API和SegmentSum差不多,但是該API的segment_ids的長度可以小于data的第一維度的長度,而是從indices中選擇出需要切分的分割索引。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8], [-1,-2,-3,-4]], tf.float32) c = tf.sparse_segment_mean(a, tf.constant([0, 1, 1, 2]), tf.constant([0, 0, 1, 2])) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
data: 一個Tensor,數據類型必須是以下之一:float32,float64。
indices: 一個tensor,數據類型是int32,數據維度是一維的,長度和segment_ids相同。
segment_ids: 一個tensor,數據類型必須是int32,數據維度是一維的。里面的值是有序排列的,但是可以重復。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型和data相同,數據的第一維度是k,其余維度和data相同。
TensorFlow提供了一些操作,你可以使用這些函數去處理序列比較和索引提取,并且添加到你的圖中。你可以使用這些函數去確定一些序列之間的差異,以及確定tensor中一些特定的值的索引。
tf.argmin(input, dimension, name=None)
解釋:這個函數的作用是返回指定維度中的最小值的索引。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[11,22,3,4], [2,6,3,1]]) c = tf.argmin(a, 1) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input: 一個Tensor,數據類型必須是以下之一:float32,float64,int64,int32,uint8,uint16,int8,complex64,qint8,qint32。
dimension: 一個tensor,數據類型是int32,0 <= dimension < rank(input)。這個參數選定了需要合并處理的哪個維度。如果輸入input是一個向量,那么我們取dimension = 0。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型是int64。
tf.argmax(input, dimension, name=None)
解釋:這個函數的作用是返回指定維度中的最大值的索引。
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[11,22,3,4], [2,6,3,1]]) c = tf.argmax(a, 1) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input: 一個Tensor,數據類型必須是以下之一:float32,float64,int64,int32,uint8,uint16,int8,complex64,qint8,qint32。
dimension: 一個tensor,數據類型是int32,0 <= dimension < rank(input)。這個參數選定了需要合并處理的哪個維度。如果輸入input是一個向量,那么我們取dimension = 0。
name:(可選)為這個操作取一個名字。
輸出參數:
一個Tensor,數據類型是int64。
tf.listdiff(x, y, name=None)
解釋:這個函數的作用是計算兩個列表中元素的不同值。
給定一個列表x和列表y,這個操作返回一個列表out,列表中的元素是存在于x中,但不存在于y 中。列表out中的元素是按照原來x中的順序是一樣的。這個操作也返回一個索引列表idx,表示out中的值在原來x中的索引位置,即:
out[i] = x[idx[i]] for i in [0, 1, ..., len(out) - 1]
比如:
輸入數據為:
x = [1, 2, 3, 4, 5, 6] y = [1, 3, 5]
輸出數據為:
out ==> [2, 4, 6] idx ==> [1, 3, 5]
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([2,6,3,1]) b = tf.constant([11,22,3,4, 8]) c = tf.listdiff(a, b) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
x: 一個一維的Tensor,里面的值是需要保留的。
y: 一個一維的tensor,數據類型和x相同,里面的值是需要去除的。
name:(可選)為這個操作取一個名字。
輸出參數:
一個tensor元祖,里面的元素為(out, idx)。
out: 一個tensor,數據類型和x相同,數據維度是一維的,里面的元素存在于x中,但不存在與y中。
idx: 一個tensor,數據類型是int32,數據維度是一維的,里面的元素表示out中的值在原來x中的索引位置。
tf.where(input, name=None)
解釋:這個函數的作用是返回input中元素是true的位置。
這個操作是返回input中值為true的坐標。坐標是保存在一個二維的tensor中,其中第一維度表示true元素的個數,第二維度表示true元素的坐標。記住,輸出tensor的維度依賴于input中true的個數。并且里面的坐標排序按照input中的排序。
比如:
# "input" tensor is [[True, False] # [True, False]] # "input" has two true values, so output has two coordinates. # "input" has rank of 2, so coordinates have two indices. where(input) ==> [[0, 0], [1, 0]] # `input` tensor is [[[True, False] # [True, False]] # [[False, True] # [False, True]] # [[False, False] # [False, True]]] # "input" has 5 true values, so output has 5 coordinates. # "input" has rank of 3, so coordinates have three indices. where(input) ==> [[0, 0, 0], [0, 1, 0], [1, 0, 1], [1, 1, 1], [2, 1, 1]]
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([[True, False],[False, True]]) c = tf.where(a) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
input: 一個Tensor,數據類型是布爾類型bool。
name:(可選)為這個操作取一個名字。
輸出參數:
一個tensor,數據類型是int64。
tf.unique(x, name=None)
解釋:這個函數的作用是找到x中的唯一元素。
這個操作是返回一個張量y,里面的元素都是x中唯一的值,并且按照原來x中的順序進行排序。這個操作還會返回一個位置張量idx,這個張量的數據維度和x相同,表示的含義是x中的元素在y中的索引位置,即:
y[idx[i]] = x[i] for i in [0, 1,...,rank(x) - 1]
比如:
# tensor "x" is [1, 1, 2, 4, 4, 4, 7, 8, 8] y, idx = unique(x) y ==> [1, 2, 4, 7, 8] idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4]
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([1, 1, 24, 4, 4, 4, 7, 8, 8]) c, d = tf.unique(a) sess = tf.Session() print sess.run(c) print sess.run(d) sess.close()
輸入參數:
x: 一個Tensor,數據維度是一維的。
name:(可選)為這個操作取一個名字。
輸出參數:
一個tensor元祖,里面的元素為(y, idx)。
y: 一個tensor,數據類型和x相同,數據維度是一維的。
idx: 一個tensor,數據類型是int32,數據維度是一維的。
tf.edit_distance(hypothesis, truth, normalize=True, name="edit_distance")
解釋:這個函數的作用是計算兩個序列之間的編輯距離,即Levenshtein距離。
這個操作輸入的是兩個可變長度序列hypothesis和truth,每個序列都是SparseTensor,之后計算編輯距離。如果你將normalize設置為true,那么最后結果將根據truth的長度進行歸一化。
比如:
輸入數據:
# "hypothesis" is a tensor of shape `[2, 1]` with variable-length values: # (0,0) = ["a"] # (1,0) = ["b"] hypothesis = tf.SparseTensor( [[0, 0, 0], [1, 0, 0]], ["a", "b"] (2, 1, 1)) # "truth" is a tensor of shape `[2, 2]` with variable-length values: # (0,0) = [] # (0,1) = ["a"] # (1,0) = ["b", "c"] # (1,1) = ["a"] truth = tf.SparseTensor( [[0, 1, 0], [1, 0, 0], [1, 0, 1], [1, 1, 0]] ["a", "b", "c", "a"], (2, 2, 2)) normalize = True
輸出數據:
# "output" is a tensor of shape `[2, 2]` with edit distances normalized # by "truth" lengths. output ==> [[inf, 1.0], # (0,0): no truth, (0,1): no hypothesis [0.5, 1.0]] # (1,0): addition, (1,1): no hypothesis
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np hypothesis = tf.SparseTensor( [[0, 0, 0], [1, 0, 0]], ["a", "b"], (2, 1, 1)) truth = tf.SparseTensor( [[0, 1, 0], [1, 0, 0], [1, 0, 1], [1, 1, 0]], ["a", "b", "c", "a"], (2, 2, 2)) c = tf.edit_distance(hypothesis, truth) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
hypothesis: 一個SparseTensor,表示猜測的數據序列。
truth: 一個SparseTensor,表示真實的數據序列。
normalize: 一個布爾類型,如果設置為true,那么最后結果將根據truth的長度進行歸一化。
name:(可選)為這個操作取一個名字。
輸出參數:
一個密集tensor,其秩為R-1。其中,R是輸入hypothesis和truth的秩。
異常:
類型異常: 如果hypothesis和truth不是SparseTensor類型的,那么就會拋出這個異常。
tf.invert_permutation(x, name=None)
解釋:這個函數的作用是計算張量x的逆置換。
這個操作是計算張量x的逆置換。輸入參數x是一個一維的整型tensor,它表示一個從0開始的數組的索引,并且交換其索引位置的每個值,得到的結果就是輸出y。 輸出結果y的具體計算公式如下:
y[x[i]] = i for i in [0, 1, ..., len(x) - 1]
該參數x必須包含0,并且不能有重復數據和負數。
比如:
# tensor `x` is [3, 4, 0, 2, 1] invert_permutation(x) ==> [2, 4, 3, 0, 1]
使用例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant([3, 4, 0, 2, 1]) c = tf.invert_permutation(a) sess = tf.Session() print sess.run(c) sess.close()
輸入參數:
x: 一個Tensor,數據類型是int32,數據維度是一維的。
name:(可選)為這個操作取一個名字。
輸出參數:
一個tensor,數據類型是int32,數據維度是一維的。
作者:chen_h
微信號 & QQ:862251340
簡書地址:https://www.jianshu.com/p/4da...
CoderPai 是一個專注于算法實戰的平臺,從基礎的算法到人工智能算法都有設計。如果你對算法實戰感興趣,請快快關注我們吧。加入AI實戰微信群,AI實戰QQ群,ACM算法微信群,ACM算法QQ群。長按或者掃描如下二維碼,關注 “CoderPai” 微信號(coderpai)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41236.html
摘要:輸出數據的第維將根據指定。輸入數據必須是一個二維的矩陣,經過轉置或者不轉置,內部維度必須相匹配。默認情況下,該標記都是被設置為。解釋這個函數的作用是將兩個 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/ce4... 計劃現將 tensorflow 中的 Python API 做一個學習,...
摘要:貢獻者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節拆開,再按照知識點合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻者:飛龍版...
摘要:你可以發布一個可再現的機器學習項目,它幾乎不需要用戶設置,不需要用戶花小時去下載依賴或者報錯相反,你可以這樣做這種方法可以直接運行你的腳本,所有的依賴包括支持都幫你準備好了。應該怎么做針對機器學習的使用場景,你較好把你的代碼發布到上。 Docker提供了一種將Linux Kernel中需要的內容靜態鏈接到你的應用中的方法。Docker容器可以使用宿主機的GPUs,因此我們可以把TensorF...
閱讀 1120·2023-04-26 02:46
閱讀 623·2023-04-25 19:38
閱讀 638·2021-10-14 09:42
閱讀 1234·2021-09-08 09:36
閱讀 1353·2019-08-30 15:44
閱讀 1318·2019-08-29 17:23
閱讀 2236·2019-08-29 15:27
閱讀 801·2019-08-29 14:15