Tensorflow Python API 翻譯(constant_op)

做者:chen_h
微信號 & QQ:862251340
微信公衆號:coderpai
簡書地址:https://www.jianshu.com/p/d05...python


計劃現將 tensorflow 中的 Python API 作一個學習,這樣方便之後的學習。
原文連接

該章介紹有關常量張量,序列操做,隨機數張量的API


常量張量

Tensorflow提供了不少的操做,去幫助你構建常量。git


tf.zeros(shape, dtype = tf.float32, name = None)github

解釋:這個函數返回一個全是零的張量,數據維度是 shape,數據類型是 dtype算法

使用例子:api

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.zeros(shape = [2, 3], dtype = tf.int32, name = "input_data")
print sess.run(data)

輸入參數:數組

  • shape: 一個整型的數組,或者一個一維的Tensor,數據類型是:int32
  • dtype: 輸出結果Tensor的數據類型。
  • name:(可選)爲這個操做取一個名字。

輸出參數:微信

  • 一個Tensor,裏面的因此數據都是0。

tf.zeros_like(tensor, dtype = None, name = None)dom

解釋:這個函數返回一個全是零的張量,數據維度是和Tensor同樣,數據類型是默認是和Tensor同樣,可是咱們也能夠本身指定。函數

使用例子:學習

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.zeros(shape = [2, 3], dtype = tf.int32, name = "input_data")
d_1 = tf.zeros_like(data)
d_2 = tf.zeros_like(data, tf.float32)
print sess.run(d_1)
print sess.run(d_2)

輸入參數:

  • tensor: 一個Tensor
  • dtype: 輸出結果Tensor的數據類型,必須是 float32float64int8int16int32int64uint8或者complex64
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,裏面的因此數據都是0。

tf.ones(shape, dtype = tf.float32, name = None)

解釋:這個函數返回一個全是1的張量,數據維度是shape,數據類型是dtype

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.ones(shape = [2, 3], dtype = tf.int32, name = "input_data")
print sess.run(data)

輸入參數:

  • shape: 一個整型的數組,或者一個一維的Tensor,數據類型是 int32
  • dtype: 輸出結果Tensor的數據類型。
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,裏面的因此數據都是1。

tf.ones_like(tensor, dtype = None, name = None)

解釋:這個函數返回一個全是一的張量,數據維度是和Tensor同樣,數據類型是默認是和Tensor同樣,可是咱們也能夠本身指定。

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.zeros(shape = [2, 3], dtype = tf.int32, name = "input_data")
d_1 = tf.ones_like(data)
d_2 = tf.ones_like(data, tf.float32)
print sess.run(d_1)
print sess.run(d_2)

輸入參數:

  • tensor: 一個Tensor
  • dtype: 輸出結果Tensor的數據類型,必須是 float32float64int8int16int32int64uint8或者complex64
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,裏面的因此數據都是1。

tf.fill(dims, value, name = None)

解釋:這個函數返回一個Tensor,數據維度是dims,填充的數據都是value

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.fill([2,3], 9)
print sess.run(data)

輸入參數:

  • dim: 一個Tensor,數據類型是int32,表示輸出數據的維度。
  • value: 一個Tensor,數據維度是0維,便是一個常量(標量),輸出數據因此填充的都是該值。
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,數據類型和value相同。

tf.constant(value, dtype = None, shape = None, name = 'Const')

解釋:這個函數返回一個常量Tensor

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.constant([1, 2, 3])
print sess.run(data)
data = tf.constant(-1.0, shape = [2, 3])
print sess.run(data)
data = tf.constant(2.0, dtype = tf.float32, shape = [2, 3])
print sess.run(data)

輸入參數:

  • value: 一個常量或者是一個數組,該數據類型就是輸出的數據類型。
  • dtype: 輸出數據的類型。
  • shape:(可選)輸出數據的維度。
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個常量Tensor

序列操做

Tensorflow提供了一些函數,去幫助咱們構建序列。


tf.linspace(start, stop, num, name = None)

解釋:這個函數返回一個序列數組,數組的第一個元素是start,若是num>1,那麼序列的最後一個元素就是 stop - start / num - 1。也就是說,最後一個元素確定是stop

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.linspace(10.0, 15.0, 10)
print sess.run(data)

輸入參數:

  • start: 一個Tensor。數據類型必須是float32或者float64。該值是輸出序列的第一個元素。
  • stop: 一個Tensor。數據類型必須和start相同。該值是輸出序列的最後一個元素。
  • num: 一個Tensor,數據類型是int32。該值肯定輸出序列的個數
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,數據類型和start相同,數據維度是一維。

tf.range(start, limit, delta = 1, name = 'range')

解釋:這個函數返回一個序列數組,數組的第一個元素是start,以後的每個元素都在前一個元素的基礎上,加上delta,直到limit,可是不包括limit

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.range(3, 15, 3)
print sess.run(data)

輸入參數:

  • start: 一個0維的Tensor,即一個標量。數據類型必須是int32。該值是輸出序列的第一個元素。
  • limit: 一個0維的Tensor,即一個標量。數據類型必須是int32。該值是輸出序列的最後限制,但不包含該值。
  • delta: 一個0維的Tensor,即一個標量。數據類型必須是int32。(可選)該值默認是1,也就是說輸出數據從start開始。
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,數據類型int32,數據維度是一維。

隨機數張量

Tensorflow提供了一些函數,去幫助咱們構建隨機數張量。


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

解釋:這個函數返回一個隨機數序列,數組裏面的值按照正態分佈。

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.random_normal([2, 3])
print sess.run(data)

輸入參數:

  • shape: 一個一維的Tensor,或者是一個python數組。該值是肯定輸出序列的數據維度。
  • mean: 一個0維的Tensor,或者一個數據類型是dtype的python值。該值表示正態分佈的均值。
  • stddev: 一個0維的Tensor,或者一個數據類型是dtype的python值,該值表示正態分佈的標準誤差。
  • dtype: 輸出數據的數據類型。
  • seed: 一個python整型,爲分佈產生一個隨機種子,具體能夠參見set_random_seed函數。
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,數據類型是dtype,數據維度是shape,裏面的值符合正態分佈。

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

解釋:這個函數返回一個隨機數序列,數組裏面的值按照正態分佈,但和random_normal函數不一樣的是,該值返回的是一個截斷的正態分佈類型。也就是說,產生出來的值範圍都是在 [mean - 2 * standard_deviations, mean + 2 * standard_deviations]內,下圖能夠告訴你這個具體範圍在哪。

truncated_normal

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.truncated_normal([2, 3])
print sess.run(data)

輸入參數:

  • shape: 一個一維的Tensor,或者是一個python數組。該值是肯定輸出序列的數據維度。
  • mean: 一個0維的Tensor,或者一個數據類型是dtype的python值。該值表示正態分佈的均值。
  • stddev: 一個0維的Tensor,或者一個數據類型是dtype的python值,該值表示正態分佈的標準誤差。
  • dtype: 輸出數據的數據類型。
  • seed: 一個python整型,爲分佈產生一個隨機種子,具體能夠參見set_random_seed函數。
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,數據類型是dtype,數據維度是shape,裏面的值是一個截斷的正態分佈。

tf.random_uniform(shape, minval = 0.0, maxval = 1.0, dtype = tf.float32, seed = None, name = None)

解釋:這個函數返回一個隨機數序列,數組裏面的值按照均勻分佈,數據範圍是 [minval, maxval)

使用例子:

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

import tensorflow as tf 
import numpy as np 

sess = tf.Session()
data = tf.random_uniform([2, 3])
print sess.run(data)

輸入參數:

  • shape: 一個一維的Tensor,或者是一個python數組。該值是肯定輸出序列的數據維度。
  • minval: 一個0維的Tensor,或者一個數據類型是dtype的python值。該值表示均勻分佈的最小值。
  • maxval: 一個0維的Tensor,或者一個數據類型是dtype的python值,該值表示均勻分佈的最大值,可是不能取到該值。
  • dtype: 輸出數據的數據類型。
  • seed: 一個python整型,爲分佈產生一個隨機種子,具體能夠參見set_random_seed函數。
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,數據類型是dtype,數據維度是shape,裏面的值符合均勻分佈。

tf.random_shuffle(value, seed = None, name = None)

解釋:這個函數返回一個隨機數序列,將value中的數據打亂輸出。

使用例子:

#!/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], [5, 6]])
shuff_data = tf.random_shuffle(data)
print sess.run(data)
print sess.run(shuff_data)

data = tf.constant([1, 2, 3, 4, 5, 6])
shuff_data = tf.random_shuffle(data)
print sess.run(data)
print sess.run(shuff_data)

輸入參數:

  • value: 一個Tensor,須要打亂的數據。
  • seed: 一個python整型,爲分佈產生一個隨機種子,具體能夠參見set_random_seed函數。
  • name:(可選)爲這個操做取一個名字。

輸出參數:

  • 一個Tensor,數據類型和數據維度都和value相同。

tf.set_random_seed(seed)

解釋:這個函數是設置圖層面的隨機種子。隨機種子分爲兩類,一類是圖層面的隨機種子,另外一類是操做層面的隨機種子。具體區別以下:

第一種,若是圖層面和操做層面的隨機種子都沒有設置,那麼隨機種子將在每一個操做中被更新。例子以下:

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

import tensorflow as tf 
import numpy as np 

a = tf.random_uniform([1])
b = tf.random_normal([1])

print "Session 1"
with tf.Session() as sess1:
    print sess1.run(a)  # generates 'A1'
    print sess1.run(a)  # generates 'A2'
    print sess1.run(b)  # generates 'B1'
    print sess1.run(b)  # generates 'B2'

print "Session 2"
with tf.Session() as sess2:
    print sess2.run(a)  # generates 'A3'
    print sess2.run(a)  # generates 'A4'
    print sess2.run(b)  # generates 'B3'
    print sess2.run(b)  # generates 'B4'

第二種,若是圖層面的隨機種子被設置了,可是操做層面的隨機種子沒有被設置。那麼,系統將把圖層面的隨機種子設置成操做層面的隨機種子,以致於操做層面的隨機種子將被肯定下來。

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

import tensorflow as tf 
import numpy as np 

tf.set_random_seed(1234)
a = tf.random_uniform([1])
b = tf.random_normal([1])

# Repeatedly running this block with the same graph will generate different
# sequences of 'a' and 'b'.
print "Session 1"
with tf.Session() as sess1:
    print sess1.run(a)  # generates 'A1'
    print sess1.run(a)  # generates 'A2'
    print sess1.run(b)  # generates 'B1'
    print sess1.run(b)  # generates 'B2'

print "Session 2"
with tf.Session() as sess2:
    print sess2.run(a)  # generates 'A1'
    print sess2.run(a)  # generates 'A2'
    print sess2.run(b)  # generates 'B1'
    print sess2.run(b)  # generates 'B2'

第三種,若是圖層面的隨機種子沒有被設置,可是操做層面的隨機種子被設置了,那麼被設置隨機種子的操做層將有肯定的惟一種子,其餘操做層不具備惟一種子。

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

import tensorflow as tf 
import numpy as np 

a = tf.random_uniform([1], seed=1)
b = tf.random_normal([1])

# Repeatedly running this block with the same graph will generate the same
# sequence of values for 'a', but different sequences of values for 'b'.
print "Session 1"
with tf.Session() as sess1:
    print sess1.run(a)  # generates 'A1'
    print sess1.run(a)  # generates 'A2'
    print sess1.run(b)  # generates 'B1'
    print sess1.run(b)  # generates 'B2'

print "Session 2"
with tf.Session() as sess2:
    print sess2.run(a)  # generates 'A1'
    print sess2.run(a)  # generates 'A2'
    print sess2.run(b)  # generates 'B3'
    print sess2.run(b)  # generates 'B4'

第四種,若是圖層面和操做層面都設置了隨機種子,那麼這兩個隨機種子都將被使用,可是最後起做用的隨機種子是惟一的,即操做的隨機輸出值是肯定的。

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

import tensorflow as tf 
import numpy as np 

tf.set_random_seed(1234)
a = tf.random_uniform([1], seed = 1)
b = tf.random_normal([1], seed = 2)

# Repeatedly running this block with the same graph will generate the same
# sequence of values for 'a', but different sequences of values for 'b'.
print "Session 1"
with tf.Session() as sess1:
    print sess1.run(a)  # generates 'A1'
    print sess1.run(a)  # generates 'A2'
    print sess1.run(b)  # generates 'B1'
    print sess1.run(b)  # generates 'B2'

print "Session 2"
with tf.Session() as sess2:
    print sess2.run(a)  # generates 'A1'
    print sess2.run(a)  # generates 'A2'
    print sess2.run(b)  # generates 'B1'
    print sess2.run(b)  # generates 'B2'

輸入參數:

  • seed: 一個整數類型。

做者:chen_h
微信號 & QQ:862251340
簡書地址:https://www.jianshu.com/p/d05...

CoderPai 是一個專一於算法實戰的平臺,從基礎的算法到人工智能算法都有設計。若是你對算法實戰感興趣,請快快關注咱們吧。加入AI實戰微信羣,AI實戰QQ羣,ACM算法微信羣,ACM算法QQ羣。長按或者掃描以下二維碼,關注 「CoderPai」 微信號(coderpai)
這裏寫圖片描述

相關文章
相關標籤/搜索