成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Tensorflow Python API 翻譯(array_ops)

xiaoqibTn / 3895人閱讀

摘要:解釋這個(gè)函數(shù)的作用是對(duì)的維度進(jìn)行重新組合。其中,表示要解壓出來(lái)的的個(gè)數(shù)。如果,無(wú)法得到,那么系統(tǒng)將拋出異常。異常如果沒(méi)有被正確指定,那么將拋出異常。向量中的值必須滿(mǎn)足,并且其長(zhǎng)度必須是。對(duì)于每個(gè)切片的輸出,我們將第維度的前的數(shù)據(jù)進(jìn)行翻轉(zhuǎn)。

作者:chen_h
微信號(hào) & QQ:862251340
微信公眾號(hào):coderpai
簡(jiǎn)書(shū)地址:https://www.jianshu.com/p/00a...


計(jì)劃現(xiàn)將 tensorflow 中的 Python API 做一個(gè)學(xué)習(xí),這樣方便以后的學(xué)習(xí)。
原文鏈接
該章介紹有關(guān)張量轉(zhuǎn)換的API
數(shù)據(jù)類(lèi)型投射

Tensorflow提供了很多的數(shù)據(jù)類(lèi)型投射操作,你能將數(shù)據(jù)類(lèi)型投射到一個(gè)你想要的數(shù)據(jù)類(lèi)型上去。


tf.string_to_number(string_tensor, out_type = None, name = None)

解釋?zhuān)哼@個(gè)函數(shù)是將一個(gè)stringTensor轉(zhuǎn)換成一個(gè)數(shù)字類(lèi)型的Tensor。但是要注意一點(diǎn),如果你想轉(zhuǎn)換的數(shù)字類(lèi)型是tf.float32,那么這個(gè)string去掉引號(hào)之后,里面的值必須是一個(gè)合法的浮點(diǎn)數(shù),否則不能轉(zhuǎn)換。如果你想轉(zhuǎn)換的數(shù)字類(lèi)型是tf.int32,那么這個(gè)string去掉引號(hào)之后,里面的值必須是一個(gè)合法的浮點(diǎn)數(shù)或者整型,否則不能轉(zhuǎn)換。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant("123")
print sess.run(data)
d = tf.string_to_number(data)
print sess.run(d)

輸入?yún)?shù):

string_tensor: 一個(gè)string類(lèi)型的Tensor。

out_type: 一個(gè)可選的數(shù)據(jù)類(lèi)型tf.DType,默認(rèn)的是tf.float32,但我們也可以選擇tf.int32或者tf.float32。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型是out_type,數(shù)據(jù)維度和string_tensor相同。


tf.to_double(x, name = "ToDouble")

解釋?zhuān)哼@個(gè)函數(shù)是將一個(gè)Tensor的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成float64

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant(123)
print sess.run(data)
d = tf.to_double(data)
print sess.run(d)

輸入?yún)?shù):

x: 一個(gè)Tensor或者是SparseTensor。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor或者SparseTensor,數(shù)據(jù)類(lèi)型是float64,數(shù)據(jù)維度和x相同。

提示:

錯(cuò)誤: 如果x是不能被轉(zhuǎn)換成float64類(lèi)型的,那么將報(bào)錯(cuò)。


tf.to_float(x, name = "ToFloat")

解釋?zhuān)哼@個(gè)函數(shù)是將一個(gè)Tensor的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成float32。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant(123)
print sess.run(data)
d = tf.to_float(data)
print sess.run(d)

輸入?yún)?shù):

x: 一個(gè)Tensor或者是SparseTensor。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor或者SparseTensor,數(shù)據(jù)類(lèi)型是float32,數(shù)據(jù)維度和x相同。

提示:

錯(cuò)誤: 如果x是不能被轉(zhuǎn)換成float32類(lèi)型的,那么將報(bào)錯(cuò)。


tf.to_bfloat16(x, name = "ToBFloat16")

解釋?zhuān)哼@個(gè)函數(shù)是將一個(gè)Tensor的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成bfloat16。

譯者注:這個(gè)API的作用不是很理解,但我測(cè)試了一下,輸入的x必須是浮點(diǎn)型的,別的類(lèi)型都不行。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([x for x in range(20)], tf.float32)
print sess.run(data)
d = tf.to_bfloat16(data)
print sess.run(d)

輸入?yún)?shù):

x: 一個(gè)Tensor或者是SparseTensor

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor或者SparseTensor,數(shù)據(jù)類(lèi)型是bfloat16,數(shù)據(jù)維度和x相同。

提示:

錯(cuò)誤: 如果x是不能被轉(zhuǎn)換成bfloat16類(lèi)型的,那么將報(bào)錯(cuò)。


tf.to_int32(x, name = "ToInt32")

解釋?zhuān)哼@個(gè)函數(shù)是將一個(gè)Tensor的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成int32。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([x for x in range(20)], tf.float32)
print sess.run(data)
d = tf.to_int32(data)
print sess.run(d)

輸入?yún)?shù):

x: 一個(gè)Tensor或者是SparseTensor

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor或者SparseTensor,數(shù)據(jù)類(lèi)型是int32,數(shù)據(jù)維度和x相同。

提示:

錯(cuò)誤: 如果x是不能被轉(zhuǎn)換成int32類(lèi)型的,那么將報(bào)錯(cuò)。


tf.to_int64(x, name = "ToInt64")

解釋?zhuān)哼@個(gè)函數(shù)是將一個(gè)Tensor的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成int64

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([x for x in range(20)], tf.float32)
print sess.run(data)
d = tf.to_int64(data)
print sess.run(d)

輸入?yún)?shù):

x: 一個(gè)Tensor或者是SparseTensor。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor或者SparseTensor,數(shù)據(jù)類(lèi)型是int64,數(shù)據(jù)維度和x相同。

提示:

錯(cuò)誤: 如果x是不能被轉(zhuǎn)換成int64類(lèi)型的,那么將報(bào)錯(cuò)。


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

解釋?zhuān)哼@個(gè)函數(shù)是將一個(gè)Tensor或者SparseTensor的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成dtype。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([x for x in range(20)], tf.float32)
print sess.run(data)
d = tf.cast(data, tf.int32)
print sess.run(d)

輸入?yún)?shù):

x: 一個(gè)Tensor或者是SparseTensor。

dtype: 目標(biāo)數(shù)據(jù)類(lèi)型。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor或者SparseTensor,數(shù)據(jù)維度和x相同。

提示:

錯(cuò)誤: 如果x是不能被轉(zhuǎn)換成dtype類(lèi)型的,那么將報(bào)錯(cuò)。


數(shù)據(jù)維度轉(zhuǎn)換

Tensorflow提供了很多的數(shù)據(jù)維度轉(zhuǎn)換操作,你能改變數(shù)據(jù)的維度,將它變成你需要的維度。


tf.shape(input, name = None)

解釋?zhuān)哼@個(gè)函數(shù)是返回input的數(shù)據(jù)維度,返回的Tensor數(shù)據(jù)維度是一維的。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
print sess.run(data)
d = tf.shape(data)
print sess.run(d)

輸入?yún)?shù):

input: 一個(gè)Tensor。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32。


tf.size(input, name = None)

解釋?zhuān)哼@個(gè)函數(shù)是返回input中一共有多少個(gè)元素。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
print sess.run(data)
d = tf.size(data)
print sess.run(d)

輸入?yún)?shù):

input: 一個(gè)Tensor。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32。


tf.rank(input, name = None)

解釋?zhuān)哼@個(gè)函數(shù)是返回Tensor的秩。

注意:Tensor的秩和矩陣的秩是不一樣的,Tensor的秩指的是元素維度索引的數(shù)目,這個(gè)概念也被成為order, degree或者ndims。比如,一個(gè)Tensor的維度是[1, 28, 28, 1],那么它的秩就是4。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
print sess.run(data)
d = tf.rank(data)
print sess.run(tf.shape(data))
print sess.run(d)

輸入?yún)?shù):

input: 一個(gè)Tensor。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32。


tf.reshape(tensor, shape, name = None)

解釋?zhuān)哼@個(gè)函數(shù)的作用是對(duì)tensor的維度進(jìn)行重新組合。給定一個(gè)tensor,這個(gè)函數(shù)會(huì)返回?cái)?shù)據(jù)維度是shape的一個(gè)新的tensor,但是tensor里面的元素不變。
如果shape是一個(gè)特殊值[-1],那么tensor將會(huì)變成一個(gè)扁平的一維tensor
如果shape是一個(gè)一維或者更高的tensor,那么輸入的tensor將按照這個(gè)shape進(jìn)行重新組合,但是重新組合的tensor和原來(lái)的tensor的元素是必須相同的。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
print sess.run(data)
print sess.run(tf.shape(data))
d = tf.reshape(data, [-1])
print sess.run(d)
d = tf.reshape(data, [3, 4])
print sess.run(d)

輸入?yún)?shù):

tensor: 一個(gè)Tensor。

shape: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32,定義輸出數(shù)據(jù)的維度。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和輸入數(shù)據(jù)相同。


tf.squeeze(input, squeeze_dims = None, name = None)

解釋?zhuān)哼@個(gè)函數(shù)的作用是將input中維度是1的那一維去掉。但是如果你不想把維度是1的全部去掉,那么你可以使用squeeze_dims參數(shù),來(lái)指定需要去掉的位置。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([[1, 2, 1], [3, 1, 1]])
print sess.run(tf.shape(data))
d_1 = tf.expand_dims(data, 0)
d_1 = tf.expand_dims(d_1, 2)
d_1 = tf.expand_dims(d_1, -1)
d_1 = tf.expand_dims(d_1, -1)
print sess.run(tf.shape(d_1))
d_2 = d_1
print sess.run(tf.shape(tf.squeeze(d_1)))
print sess.run(tf.shape(tf.squeeze(d_2, [2, 4])))

# "t" is a tensor of shape [1, 2, 1, 3, 1, 1]
# shape(squeeze(t)) ==> [2, 3]

# "t" is a tensor of shape [1, 2, 1, 3, 1, 1]
# shape(squeeze(t, [2, 4])) ==> [1, 2, 3, 1]

輸入?yún)?shù):

input: 一個(gè)Tensor。

squeeze_dims: (可選)一個(gè)序列,索引從0開(kāi)始,只移除該列表中對(duì)應(yīng)位的tensor。默認(rèn)下,是一個(gè)空序列[]。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和輸入數(shù)據(jù)相同。


tf.expand_dims(input, dim, name = None)

解釋?zhuān)哼@個(gè)函數(shù)的作用是向input中插入維度是1的張量。
我們可以指定插入的位置dim,dim的索引從0開(kāi)始,dim的值也可以是負(fù)數(shù),從尾部開(kāi)始插入,符合 python 的語(yǔ)法。
這個(gè)操作是非常有用的。舉個(gè)例子,如果你有一張圖片,數(shù)據(jù)維度是[height, width, channels],你想要加入“批量”這個(gè)信息,那么你可以這樣操作expand_dims(images, 0),那么該圖片的維度就變成了[1, height, width, channels]。

這個(gè)操作要求:
-1-input.dims() <= dim <= input.dims()

這個(gè)操作是squeeze()函數(shù)的相反操作,可以一起靈活運(yùn)用。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([[1, 2, 1], [3, 1, 1]])
print sess.run(tf.shape(data))
d_1 = tf.expand_dims(data, 0)
print sess.run(tf.shape(d_1))
d_1 = tf.expand_dims(d_1, 2)
print sess.run(tf.shape(d_1))
d_1 = tf.expand_dims(d_1, -1)
print sess.run(tf.shape(d_1))

輸入?yún)?shù):

input: 一個(gè)Tensor。

dim: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32,標(biāo)量。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和輸入數(shù)據(jù)相同,數(shù)據(jù)和input相同,但是維度增加了一維。


數(shù)據(jù)抽取和結(jié)合

Tensorflow提供了很多的數(shù)據(jù)抽取和結(jié)合的方法。


tf.slice(input_, begin, size, name = None)

解釋?zhuān)哼@個(gè)函數(shù)的作用是從輸入數(shù)據(jù)input中提取出一塊切片,切片的尺寸是size,切片的開(kāi)始位置是begin。切片的尺寸size表示輸出tensor的數(shù)據(jù)維度,其中size[i]表示在第i維度上面的元素個(gè)數(shù)。開(kāi)始位置begin表示切片相對(duì)于輸入數(shù)據(jù)input_的每一個(gè)偏移量,比如數(shù)據(jù)input_
`
[[[1, 1, 1], [2, 2, 2]],
[[33, 3, 3], [4, 4, 4]],
[[5, 5, 5], [6, 6, 6]]]`,
begin[1, 0, 0],那么數(shù)據(jù)的開(kāi)始位置是33。因?yàn)椋谝痪S偏移了1,其余幾位都沒(méi)有偏移,所以開(kāi)始位置是33。

操作滿(mǎn)足:
size[i] = input.dim_size(i) - begin[i]
0 <= begin[i] <= begin[i] + size[i] <= Di for i in [0, n]

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
input = tf.constant([[[1, 1, 1], [2, 2, 2]],
                    [[3, 3, 3], [4, 4, 4]],
                    [[5, 5, 5], [6, 6, 6]]])
data = tf.slice(input, [1, 0, 0], [1, 1, 3])
print sess.run(data)
data = tf.slice(input, [1, 0, 0], [1, 2, 3])
print sess.run(data)
data = tf.slice(input, [1, 0, 0], [2, 1, 3])
print sess.run(data)
data = tf.slice(input, [1, 0, 0], [2, 2, 2])
print sess.run(data)

輸入?yún)?shù):

input_: 一個(gè)Tensor。

begin: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32或者int64。

size: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32或者int64。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和input_相同。


tf.split(split_dim, num_split, value, name = "split")

解釋?zhuān)哼@個(gè)函數(shù)的作用是,沿著split_dim維度將value切成num_split塊。要求,num_split必須被value.shape[split_dim]整除,即value.shape[split_dim] % num_split == 0。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
input = tf.random_normal([5,30])
print sess.run(tf.shape(input))[0] / 5
split0, split1, split2, split3, split4 = tf.split(0, 5, input)
print sess.run(tf.shape(split0))

輸入?yún)?shù):

split_dim: 一個(gè)0維的Tensor,數(shù)據(jù)類(lèi)型是int32,該參數(shù)的作用是確定沿著哪個(gè)維度進(jìn)行切割,參數(shù)范圍 [0, rank(value))。

num_split: 一個(gè)0維的Tensor,數(shù)據(jù)類(lèi)型是int32,切割的塊數(shù)量。

value: 一個(gè)需要切割的Tensor

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

value中切割的num_split個(gè)Tensor


tf.tile(input, multiples, name = None)

解釋?zhuān)哼@個(gè)函數(shù)的作用是通過(guò)給定的tensor去構(gòu)造一個(gè)新的tensor。所使用的方法是將input復(fù)制multiples次,輸出的tensor的第i維有input.dims(i) * multiples[i]個(gè)元素,input中的元素被復(fù)制multiples[i]次。比如,input = [a b c d], multiples = [2],那么tile(input, multiples) = [a b c d a b c d]。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([[1, 2, 3, 4], [9, 8, 7, 6]])
d = tf.tile(data, [2,3])
print sess.run(d)

輸入?yún)?shù):

input_: 一個(gè)Tensor,數(shù)據(jù)維度是一維或者更高維度。

multiples: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32,數(shù)據(jù)維度是一維,長(zhǎng)度必須和input的維度一樣。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和input相同。


tf.pad(input, paddings, name = None)

解釋?zhuān)哼@個(gè)函數(shù)的作用是向input中按照paddings的格式填充0。paddings是一個(gè)整型的Tensor,數(shù)據(jù)維度是[n, 2],其中ninput的秩。對(duì)于input的中的每一維Dpaddings[D, 0]表示增加多少個(gè)0input之前,paddings[D, 1]表示增加多少個(gè)0input之后。舉個(gè)例子,假設(shè)paddings = [[1, 1], [2, 2]]input的數(shù)據(jù)維度是[2,2],那么最后填充完之后的數(shù)據(jù)維度如下:

也就是說(shuō),最后的數(shù)據(jù)維度變成了[4,6]

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
t = tf.constant([[[3,3,],[2,2]]])
print sess.run(tf.shape(t))
paddings = tf.constant([[3,3],[1,1],[2,2]])
print sess.run(tf.pad(t, paddings)).shape

輸入?yún)?shù):

input: 一個(gè)Tensor。

paddings: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int32。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和input相同。


tf.concat(concat_dim, value, name = "concat")

解釋?zhuān)哼@個(gè)函數(shù)的作用是沿著concat_dim維度,去重新串聯(lián)value,組成一個(gè)新的tensor。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
t1 = tf.constant([[1, 2, 3], [4, 5, 6]])
t2 = tf.constant([[7, 8, 9], [10, 11, 12]])
d1 = tf.concat(0, [t1, t2])
d2 = tf.concat(1, [t1, t2])
print sess.run(d1)
print sess.run(tf.shape(d1))
print sess.run(d2)
print sess.run(tf.shape(d2))

# output
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

# tips
從直觀(guān)上來(lái)看,我們?nèi)〉腸oncat_dim的那一維的元素個(gè)數(shù)肯定會(huì)增加。比如,上述例子中的d1的第0維增加了,而且d1.shape[0] = t1.shape[0]+t2.shape[0]。

輸入?yún)?shù):

concat_dim: 一個(gè)零維度的Tensor,數(shù)據(jù)類(lèi)型是int32。

values: 一個(gè)Tensor列表,或者一個(gè)多帶帶的Tensor。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)重新串聯(lián)之后的Tensor


tf.pack(values, name = "pack")

解釋?zhuān)哼@個(gè)函數(shù)的作用是將秩為Rtensor打包成一個(gè)秩為R+1tensor。具體的公式可以表示為:

tf.pack([x, y, z]) = np.asqrray([x, y, z])

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf

x = tf.constant([1,2,3])
y = tf.constant([4,5,6])
z = tf.constant([7,8,9])

p = tf.pack([x,y,z])

sess = tf.Session()
print sess.run(tf.shape(p))
print sess.run(p)

輸入?yún)?shù):

values: 一個(gè)Tensor的列表,每個(gè)Tensor必須有相同的數(shù)據(jù)類(lèi)型和數(shù)據(jù)維度。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

output: 一個(gè)打包的Tensor,數(shù)據(jù)類(lèi)型和values相同。


tf.unpack(value, num = None, name = "unpack")

解釋?zhuān)哼@個(gè)函數(shù)的作用是將秩為R+1tensor解壓成一些秩為Rtensor。其中,num表示要解壓出來(lái)的tensor的個(gè)數(shù)。如果,num沒(méi)有被指定,那么num = value.shape[0]。如果,value.shape[0]無(wú)法得到,那么系統(tǒng)將拋出異常ValueError。具體的公式可以表示為:

tf.unpack(x, n) = list(x)

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf

x = tf.constant([1,2,3])
y = tf.constant([4,5,6])
z = tf.constant([7,8,9])

p = tf.pack([x,y,z])

sess = tf.Session()
print sess.run(tf.shape(p))
pp = tf.unpack(p,3)
print sess.run(pp)

輸入?yún)?shù):

value: 一個(gè)秩大于0Tensor

num: 一個(gè)整型,value的第一維度的值。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

value中解壓出來(lái)的一個(gè)Tensor數(shù)組。

異常:

ValueError: 如果num沒(méi)有被正確指定,那么將拋出異常。


tf.reverse_sequence(input, seq_lengths, seq_dim, name = None)

解釋?zhuān)簩?b>input中的值沿著第seq_dim維度進(jìn)行翻轉(zhuǎn)。

這個(gè)操作先將input沿著第0維度切分,然后對(duì)于每個(gè)切片,將切片長(zhǎng)度為seq_lengths[i]的值,沿著第seq_dim維度進(jìn)行翻轉(zhuǎn)。

向量seq_lengths中的值必須滿(mǎn)足seq_lengths[i] < input.dims[seq_dim],并且其長(zhǎng)度必須是input_dims(0)。

對(duì)于每個(gè)切片i的輸出,我們將第seq_dim維度的前seq_lengths[i]的數(shù)據(jù)進(jìn)行翻轉(zhuǎn)。

比如:

# Given this:
seq_dim = 1
input.dims = (4, 10, ...)
seq_lengths = [7, 2, 3, 5]

# 因?yàn)閕nput的第0維度是4,所以先將input切分成4個(gè)切片;
# 因?yàn)閟eq_dim是1,所以我們按著第1維度進(jìn)行翻轉(zhuǎn)。
# 因?yàn)閟eq_lengths[0] = 7,所以我們第一個(gè)切片只翻轉(zhuǎn)前7個(gè)值,該切片的后面的值保持不變。
# 因?yàn)閟eq_lengths[1] = 2,所以我們第一個(gè)切片只翻轉(zhuǎn)前2個(gè)值,該切片的后面的值保持不變。
# 因?yàn)閟eq_lengths[2] = 3,所以我們第一個(gè)切片只翻轉(zhuǎn)前3個(gè)值,該切片的后面的值保持不變。
# 因?yàn)閟eq_lengths[3] = 5,所以我們第一個(gè)切片只翻轉(zhuǎn)前5個(gè)值,該切片的后面的值保持不變。
output[0, 0:7, :, ...] = input[0, 7:0:-1, :, ...]
output[1, 0:2, :, ...] = input[1, 2:0:-1, :, ...]
output[2, 0:3, :, ...] = input[2, 3:0:-1, :, ...]
output[3, 0:5, :, ...] = input[3, 5:0:-1, :, ...]

output[0, 7:, :, ...] = input[0, 7:, :, ...]
output[1, 2:, :, ...] = input[1, 2:, :, ...]
output[2, 3:, :, ...] = input[2, 3:, :, ...]
output[3, 2:, :, ...] = input[3, 2:, :, ...]

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 

sess = tf.Session()
input = tf.constant([[1, 2, 3, 4], [3, 4, 5, 6]], tf.int64)
seq_lengths = tf.constant([3, 2], tf.int64)
seq_dim = 1
output = tf.reverse_sequence(input, seq_lengths, seq_dim)
print sess.run(output)
sess.close()

# output
[[3 2 1 4]
 [4 3 5 6]]

輸入?yún)?shù):

input: 一個(gè)Tensor,需要反轉(zhuǎn)的數(shù)據(jù)。

seq_lengths: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型是int64,數(shù)據(jù)長(zhǎng)度是input.dims(0),并且max(seq_lengths) < input.dims(seq_dim)。

seq_dim: 一個(gè)int,確定需要翻轉(zhuǎn)的維度。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和input相同,數(shù)據(jù)維度和input相同。


tf.reverse(tensor, dims, name = None)

解釋?zhuān)簩⒅付ňS度中的數(shù)據(jù)進(jìn)行翻轉(zhuǎn)。

給定一個(gè)tensor和一個(gè)bool類(lèi)型的dims,dims中的值為False或者True。如果dims[i] == True,那么就將tensor中這一維的數(shù)據(jù)進(jìn)行翻轉(zhuǎn)。

tensor最多只能有8個(gè)維度,并且tensor的秩必須和dims的長(zhǎng)度相同,即rank(tensor) == size(dims)。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 

sess = tf.Session()
input_data = tf.constant([[
[
[ 0,  1,  2,  3],
[ 4,  5,  6,  7],
[ 8,  9, 10, 11]
],
[
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]
]
]])
print "input_data shape : ", sess.run(tf.shape(input_data))
dims = tf.constant([False, False, False, True])
print sess.run(tf.reverse(input_data, dims))
print "=========================="
dims = tf.constant([False, True, False, False])
print sess.run(tf.reverse(input_data, dims))
print "=========================="
dims = tf.constant([False, False, True, False])
print sess.run(tf.reverse(input_data, dims))
sess.close()

輸入?yún)?shù):

tensor: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型必須是以下之一:uint8,int8,int32,bool,float32或者float64,數(shù)據(jù)維度不超過(guò)8維。

dims: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型是bool。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和tensor相同,數(shù)據(jù)維度和tensor相同。


tf.transpose(a, perm = None, name = "transpose")

解釋?zhuān)簩?b>a進(jìn)行轉(zhuǎn)置,并且根據(jù)perm參數(shù)重新排列輸出維度。

輸出數(shù)據(jù)tensor的第i維將根據(jù)perm[i]指定。比如,如果perm沒(méi)有給定,那么默認(rèn)是perm = [n-1, n-2, ..., 0],其中rank(a) = n。默認(rèn)情況下,對(duì)于二維輸入數(shù)據(jù),其實(shí)就是常規(guī)的矩陣轉(zhuǎn)置操作。

比如:

input_data.dims = (1, 4, 3)
perm = [1, 2, 0]

# 因?yàn)?output_data.dims[0] = input_data.dims[ perm[0] ]
# 因?yàn)?output_data.dims[1] = input_data.dims[ perm[1] ]
# 因?yàn)?output_data.dims[2] = input_data.dims[ perm[2] ]
# 所以得到 output_data.dims = (4, 3, 1)
output_data.dims = (4, 3, 1)

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 

sess = tf.Session()
input_data = tf.constant([[1,2,3],[4,5,6]])
print sess.run(tf.transpose(input_data))
print sess.run(input_data)
print sess.run(tf.transpose(input_data, perm=[1,0]))
input_data = tf.constant([[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]])
print "input_data shape: ", sess.run(tf.shape(input_data))
output_data = tf.transpose(input_data, perm=[1, 2, 0])
print "output_data shape: ", sess.run(tf.shape(output_data))
print sess.run(output_data)
sess.close()

輸入?yún)?shù):

a: 一個(gè)Tensor

perm: 一個(gè)對(duì)于a的維度的重排列組合。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)經(jīng)過(guò)翻轉(zhuǎn)的Tensor。


tf.gather(params, indices, name = None)

解釋?zhuān)焊鶕?jù)indices索引,從params中取對(duì)應(yīng)索引的值,然后返回。

indices必須是一個(gè)整型的tensor,數(shù)據(jù)維度是常量或者一維。最后輸出的數(shù)據(jù)維度是indices.shape + params.shape[1:]。

比如:

# Scalar indices
output[:, ..., :] = params[indices, :, ... :]

# Vector indices
output[i, :, ..., :] = params[indices[i], :, ... :]

# Higher rank indices
output[i, ..., j, :, ... :] = params[indices[i, ..., j], :, ..., :]

如果indices是一個(gè)從0params.shape[0]的排列,即len(indices) = params.shape[0],那么這個(gè)操作將把params進(jìn)行重排列。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 

sess = tf.Session()
params = tf.constant([6, 3, 4, 1, 5, 9, 10])
indices = tf.constant([2, 0, 2, 5])
output = tf.gather(params, indices)
print sess.run(output)
sess.close()

輸入?yún)?shù):

params: 一個(gè)Tensor。

indices: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型必須是int32或者int64。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和params相同。


tf.dynamic_partition(data, partitions, num_partitions, name = None)

解釋?zhuān)焊鶕?jù)從partitions中取得的索引,將data分割成num_partitions份。

我們先從partitions.ndim 中取出一個(gè)元祖js,那么切片data[js, ...]將成為輸出數(shù)據(jù)outputs[partitions[js]]的一部分。我們將js按照字典序排列,即js里面的值為(0, 0, ..., 1, 1, ..., 2, 2, ..., ..., num_partitions - 1, num_partitions - 1, ...)。我們將partitions[js] = i的值放入outputs[i]。outputs[i]中的第一維對(duì)應(yīng)于partitions.values == i的位置。更多細(xì)節(jié)如下:

outputs[i].shape = [sum(partitions == i)] + data.shape[partitions.ndim:]

outputs[i] = pack([data[js, ...] for js if partitions[js] == i])

data.shape must start with partitions.shape
這句話(huà)不是很明白,說(shuō)說(shuō)自己的理解。
data.shape(0)必須和partitions.shape(0)相同,即data.shape[0] == partitions.shape[0]。

比如:

# Scalar partitions
partitions = 1
num_partitions = 2
data = [10, 20]
outputs[0] = []  # Empty with shape [0, 2]
outputs[1] = [[10, 20]]

# Vector partitions
partitions = [0, 0, 1, 1, 0]
num_partitions = 2
data = [10, 20, 30, 40, 50]
outputs[0] = [10, 20, 50]
outputs[1] = [30, 40]

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 

sess = tf.Session()
params = tf.constant([6, 3, 4, 1, 5, 9, 10])
indices = tf.constant([2, 0, 2, 5])
output = tf.gather(params, indices)
print sess.run(output)
sess.close()

輸入?yún)?shù):

data: 一個(gè)Tensor。

partitions: 一個(gè)Tensor,數(shù)據(jù)類(lèi)型必須是int32。任意數(shù)據(jù)維度,但其中的值必須是在范圍[0, num_partitions)。

num_partitions: 一個(gè)int,其值必須不小于1。輸出的切片個(gè)數(shù)。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)數(shù)組Tensor,數(shù)據(jù)類(lèi)型和data相同。


tf.dynamic_stitch(indices, data, name = None)

解釋?zhuān)哼@是一個(gè)交錯(cuò)合并的操作,我們根據(jù)indices中的值,將data交錯(cuò)合并,并且返回一個(gè)合并之后的tensor。

如下構(gòu)建一個(gè)合并的tensor

merged[indices[m][i, ..., j], ...] = data[m][i, ..., j, ...]

其中,m是一個(gè)從0開(kāi)始的索引。如果indices[m]是一個(gè)標(biāo)量或者向量,那么我們可以得到更加具體的如下推導(dǎo):

# Scalar indices
merged[indices[m], ...] = data[m][...]

# Vector indices
merged[indices[m][i], ...] = data[m][i, ...]

從上式的推導(dǎo),我們也可以看出最終合并的數(shù)據(jù)是按照索引從小到大排序的。那么會(huì)產(chǎn)生兩個(gè)問(wèn)題:1)假設(shè)如果一個(gè)索引同時(shí)存在indices[m][i]indices[n][j]中,其中(m, i) < (n, j)。那么,data[n][j]將作為最后被合并的值。2)假設(shè)索引越界了,那么缺失的位上面的值將被隨機(jī)值給填補(bǔ)。

比如:

indices[0] = 6
indices[1] = [4, 1]
indices[2] = [[5, 2], [0, 3]]
data[0] = [61, 62]
data[1] = [[41, 42], [11, 12]]
data[2] = [[[51, 52], [21, 22]], [[1, 2], [31, 32]]]
merged = [[1, 2], [11, 12], [21, 22], [31, 32], [41, 42],
          [51, 52], [61, 62]]

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 

sess = tf.Session()
indices = [6, [4, 1], [[5, 2], [0, 3]]]
data = [[61, 62], [[41, 42], [11, 12]], [[[51, 52], [21, 22]], [[1, 2], [31, 32]]]]
output = tf.dynamic_stitch(indices, data)
print sess.run(output)
# 缺少了第6,第7的位置,索引最后合并的數(shù)據(jù)中,這兩個(gè)位置的值會(huì)被用隨機(jī)數(shù)代替
indices = [8, [4, 1], [[5, 2], [0, 3]]]
output = tf.dynamic_stitch(indices, data)
# 第一個(gè)2被覆蓋了,最后合并的數(shù)據(jù)是第二個(gè)2所指的位置
indices = [6, [4, 1], [[5, 2], [2, 3]]]
output = tf.dynamic_stitch(indices, data)
print sess.run(output)
print sess.run(output)
sess.close()

輸入?yún)?shù):

indices: 一個(gè)列表,至少包含兩Tensor,數(shù)據(jù)類(lèi)型是int32

data: 一個(gè)列表,里面Tensor的個(gè)數(shù)和indices相同,并且擁有相同的數(shù)據(jù)類(lèi)型。

name:(可選)為這個(gè)操作取一個(gè)名字。

輸出參數(shù):

一個(gè)Tensor,數(shù)據(jù)類(lèi)型和data相同。


作者:chen_h
微信號(hào) & QQ:862251340
簡(jiǎn)書(shū)地址:https://www.jianshu.com/p/00a...

CoderPai 是一個(gè)專(zhuān)注于算法實(shí)戰(zhàn)的平臺(tái),從基礎(chǔ)的算法到人工智能算法都有設(shè)計(jì)。如果你對(duì)算法實(shí)戰(zhàn)感興趣,請(qǐng)快快關(guān)注我們吧。加入AI實(shí)戰(zhàn)微信群,AI實(shí)戰(zhàn)QQ群,ACM算法微信群,ACM算法QQ群。長(zhǎng)按或者掃描如下二維碼,關(guān)注 “CoderPai” 微信號(hào)(coderpai)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41235.html

相關(guān)文章

  • Tensorflow Python API 翻譯(constant_op)

    摘要:隨機(jī)數(shù)張量提供了一些函數(shù),去幫助我們構(gòu)建隨機(jī)數(shù)張量。該值表示正態(tài)分布的均值。一個(gè)維的,或者一個(gè)數(shù)據(jù)類(lèi)型是的值,該值表示正態(tài)分布的標(biāo)準(zhǔn)偏差。解釋這個(gè)函數(shù)返回一個(gè)隨機(jī)數(shù)序列,數(shù)組里面的值按照均勻分布,數(shù)據(jù)范圍是。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書(shū)地址:https://www.jianshu.com/p/d05... 計(jì)劃現(xiàn)將 tens...

    godlong_X 評(píng)論0 收藏0
  • Tensorflow Python API 翻譯(sparse_ops)

    摘要:數(shù)據(jù)維度是一維,表示輸出密集張量的維度。解釋這個(gè)函數(shù)的作用是將稀疏張量的坐標(biāo)轉(zhuǎn)換成密集張量中的布爾坐標(biāo)。一個(gè)布爾類(lèi)型的向量,向量長(zhǎng)度是,并且其中包含個(gè)值。一個(gè)布爾類(lèi)型的向量,數(shù)據(jù)長(zhǎng)度是,如果該行填充了,那么該位置的布爾值為。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書(shū)地址:https://www.jianshu.com/p/c23... 計(jì)...

    BDEEFE 評(píng)論0 收藏0
  • Tensorflow Python API 翻譯(math_ops)(第一部分)

    摘要:輸出數(shù)據(jù)的第維將根據(jù)指定。輸入數(shù)據(jù)必須是一個(gè)二維的矩陣,經(jīng)過(guò)轉(zhuǎn)置或者不轉(zhuǎn)置,內(nèi)部維度必須相匹配。默認(rèn)情況下,該標(biāo)記都是被設(shè)置為。解釋這個(gè)函數(shù)的作用是將兩個(gè) 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書(shū)地址:https://www.jianshu.com/p/ce4... 計(jì)劃現(xiàn)將 tensorflow 中的 Python API 做一個(gè)學(xué)習(xí),...

    cnTomato 評(píng)論0 收藏0
  • Tensorflow Python API 翻譯(math_ops)(第二部分)

    摘要:使用例子輸入?yún)?shù)一個(gè),數(shù)據(jù)類(lèi)型必須是以下之一,,,,,,。解釋這個(gè)函數(shù)的作用是沿著指定的維度,分割張量中的值,并且返回最大值。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書(shū)地址:https://www.jianshu.com/p/4da... 計(jì)劃現(xiàn)將 tensorflow 中的 Python API 做一個(gè)學(xué)習(xí),這樣方便以后的學(xué)習(xí)。原文鏈接...

    wujl596 評(píng)論0 收藏0
  • Tensorflow Python API 翻譯(nn)

    摘要:表示元素是否放電的概率。更加具體的表示細(xì)節(jié)為注意,必須有。數(shù)據(jù)維度是四維。在大部分處理過(guò)程中,卷積核的水平移動(dòng)步數(shù)和垂直移動(dòng)步數(shù)是相同的,即。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書(shū)地址:https://www.jianshu.com/p/e3a... 計(jì)劃現(xiàn)將 tensorflow 中的 Python API 做一個(gè)學(xué)習(xí),這樣方便以后...

    lx1036 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<