tensorflow: 如何定義常量tensor與變量tensor

Refence:  《Tensorflow machine learning cookbook》 : Declaring Tensors


Packt.TensorFlow.Machine.Learning.Cookbook.2017 筆記


主要應用領域:計算機視覺,語音識別,機器翻譯,健康醫療
流行的GPU架構:Nvidia Tesla and Pascal,4G RAM,
GPU軟件支持:Nvidia Cuda Toolkit and also v 5.x +
通用十步驟:
1.導入或生成數據集;
2.轉換和標準化數據;data = tf.nn.batch_norm_with_global_normalization(...)
3.劃分訓練、測試和驗證數據集;
4.設置超參數,集中設置;
learning_rate = 0.01
batch_size = 100
iterations = 1000
5.初始化變量與佔位符;通過佔位符喂數據,模型調整變量,權重和偏好。
a_var = tf.constant(42)
x_input = tf.placeholder(tf.float32, [None, input_size])
y_input = tf.placeholder(tf.float32, [None, num_classes])
6.定義模型結構;構建計算圖。
y_pred = tf.add(tf.mul(x_input, weight_matrix), b_matrix)
7.定義損失函數;
loss = tf.reduce_mean(tf.square(y_actual – y_pred))
8.初始化和訓練模型
with tf.Session(graph=graph) as session:
...
session.run(...)
...
或:
session = tf.Session(graph=graph)
session.run(…)
9.評估模型;在訓練集和測試集上。
10.超參數調優;在驗證集上
11.應用,部署上線,預測新輸出;


http://tensorfly.cn/tfdoc/mltools.html有廣泛的機器學習資源介紹。
但tensorflow的api在tensorfly.cn上還沒有。可以下一個tensorflow manual,裏面包括了tensorflow的基礎教程,運作方式和python,c++的api.


圖一:模型的各類參數


申明tensor: 只創建tensor,tf不會在計算圖中加任何東西,只有這些東西可用時纔會加入計算圖。


定義tensor練習:

#申明tensor常見方式
import tensorflow as tf;
from tensorflow.python.framework import ops
ops.reset_default_graph()


def show(tip, *a):
    sess = tf.Session()
    b = sess.run(a)
    print('-------------------')
    print(tip)
    for i in b:
        print(i)  


sess = tf.Session()
    
#1.常量tensor    
zeros_tsr = tf.zeros([2, 3])
show("tf.zeros:",zeros_tsr)
ones_tsr = tf.ones([1, 3])
show("tf.ones:",ones_tsr)
filled_tsr = tf.fill([2, 4], 8) #創建一個常量
show('tf.fill:',filled_tsr)
constant_tsr = tf.constant([1, 2, 3]) #創建一個自定義的常量
show('tf.constant:',constant_tsr)
constant2_str = tf.constant(8, tf.float32, [2,4]) #等價於fill
show('tf.constant:',constant2_str)
#2.其於其它變量的shape來創建常量
zeros_similar = tf.zeros_like(zeros_tsr)
show('tf.zeros_like:',zeros_similar)
ones_similar = tf.ones_like(ones_tsr)
show('tf.ones_like:',ones_similar)
#3.序列類常量
linear_tsr = tf.linspace(start=0.0, stop=1, num=11) #使用樣本個數,常用
show("tf.linspace:",linear_tsr)
range_tsr = tf.range(0, 1, 0.1) #等價於linspace,但使用步長,有時不方便 
show('tf.range:',range_tsr)
#4.隨機類常量
rand_unif_tsr = tf.random_uniform([2,3], 0, 10) #[0,10)的均勻分佈
show('tf.random_uniform:',rand_unif_tsr)
randnorm = tf.random_normal([2,3], 0, 0.1) #均值0,標準差 0.1
show('tf.random_normal:' , randnorm)
trunc_norm = tf.truncated_normal([2,3], 0, 0.1) #同上,但2個標準差之外的截掉
show('tf.truncated_normal',trunc_norm)
value = tf.range(1,10)
show('tf.range:', value)
shuffle_output = tf.random_shuffle(value) #洗牌
show('tf.random_shuffle:',shuffle_output)
rand_int_tsr = tf.random_uniform([3,4], 0, 100)
cropped_output = tf.random_crop(rand_int_tsr, [2,2])
show('tf.random_crop:', rand_int_tsr,  cropped_output)  #在3*4的矩陣上,隨機取一個 2*2的子矩陣,常用於彩色圖片 (高,寬,3顏色通道)


#創建變量tensor
print('--------------------------------')
cropped_output_var = tf.Variable(cropped_output)
sess.run(cropped_output_var.initializer)
print(sess.run(cropped_output_var))
cropped_output_var2 = tf.Variable(tf.lin_space(7.0, 9, 3))
sess.run(cropped_output_var2.initializer)
print(sess.run(cropped_output_var2))


var1 = tf.Variable(tf.range(1,3))
var2 = tf.Variable(tf.range(4,8))
init_allvars_op = tf.global_variables_initializer() #不用每個變量都去取initializer
sess.run(init_allvars_op)
print(sess.run([var1,var2]))


#轉任意數組或常量到tensor
a = [1, 2, 3]
show("const to tensor:" , tf.convert_to_tensor(a))

輸出結果:

-------------------
tf.zeros:
[[ 0.  0.  0.]
 [ 0.  0.  0.]]
-------------------
tf.ones:
[[ 1.  1.  1.]]
-------------------
tf.fill:
[[8 8 8 8]
 [8 8 8 8]]
-------------------
tf.constant:
[1 2 3]
-------------------
tf.constant:
[[ 8.  8.  8.  8.]
 [ 8.  8.  8.  8.]]
-------------------
tf.zeros_like:
[[ 0.  0.  0.]
 [ 0.  0.  0.]]
-------------------
tf.ones_like:
[[ 1.  1.  1.]]
-------------------
tf.linspace:
[ 0.          0.1         0.2         0.30000001  0.40000001  0.5
  0.60000002  0.69999999  0.80000001  0.90000004  1.        ]
-------------------
tf.range:
[ 0.          0.1         0.2         0.30000001  0.40000001  0.5
  0.60000002  0.70000005  0.80000007  0.9000001 ]
-------------------
tf.random_uniform:
[[ 7.20409775  6.92542934  4.91668463]
 [ 2.51387954  4.47322464  0.28337955]]
-------------------
tf.random_normal:
[[ 0.05500451 -0.01932122 -0.00656942]
 [ 0.27151474  0.05169746  0.08516382]]
-------------------
tf.truncated_normal
[[-0.09705421  0.18184513 -0.09811895]
 [-0.00603499  0.11441358 -0.19262247]]
-------------------
tf.range:
[1 2 3 4 5 6 7 8 9]
-------------------
tf.random_shuffle:
[2 9 8 3 1 5 7 4 6]
-------------------
tf.random_crop:
[[ 99.53952026   1.27675533  68.68402863  85.94589233]
 [ 21.94381905  83.0783844   88.68248749  51.50793839]
 [ 16.83168411  37.43605804  72.67305756   7.39020109]]
[[ 68.68402863  85.94589233]
 [ 88.68248749  51.50793839]]
--------------------------------
[[ 17.86952019  46.57141113]
 [ 64.63282013  68.54146576]]
[ 7.  8.  9.]
[array([1, 2]), array([4, 5, 6, 7])]
-------------------
const to tensor:
[1 2 3]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章