寫(xiě)在前面
- 態(tài)度決定高度诅病!讓優(yōu)秀成為一種習(xí)慣揍魂!
- 世界上沒(méi)有什么事兒是加一次班解決不了的讽膏,如果有檩电,就加兩次!(- - -茂強(qiáng))
tensorflow的一般建模步驟:
數(shù)據(jù)的輸入(這個(gè)有很多方法府树,讀取本地文件俐末,或者爬蟲(chóng)網(wǎng)絡(luò)數(shù)據(jù),或者數(shù)倉(cāng)都可以)
數(shù)據(jù)的標(biāo)準(zhǔn)化 (主要是數(shù)據(jù)轉(zhuǎn)換成tensorflow能接受的格式)
把數(shù)據(jù)分成訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
設(shè)置模型參數(shù) (主要有學(xué)習(xí)率奄侠,迭代次數(shù)卓箫,batch_size等)
learning_rate = 0.01
batch_size = 100
iterations = 1000初始化variables和placeholders
a_var = tf.constant(42)
x_input = tf.placeholder(tf.float32, [None, input_size])
y_input = tf.placeholder(tf.float32, [None, num_classes])
其中( float64 and float16 )表示浮點(diǎn)類(lèi)型的不同精度-
創(chuàng)建模型
y_pred = tf.add(tf.mul(x_input, weight_matrix), b_matrix)
模型 定義損失函數(shù)
loss = tf.reduce_mean(tf.square(y_actual – y_pred)
- 初始化和訓(xùn)練模型
with tf.Session(graph=graph) as session:
...
session.run(...)
... - 模型評(píng)估
- 參數(shù)或者結(jié)構(gòu)調(diào)整優(yōu)化模型
- 模型應(yīng)用
Tensors的聲明方式
- 創(chuàng)建一個(gè)0值填充的tensor
zero_tsr = tf.zeros([row_dim, col_dim]) - 創(chuàng)建一個(gè)1填充的tensor
ones_tsr = tf.ones([row_dim, col_dim]) - 創(chuàng)建一個(gè)常量填充的tensor
filled_tsr = tf.fill([row_dim, col_dim], 42) - 通過(guò)以聲明的常量創(chuàng)建tensor
constant_tsr = tf.constant([1,2,3])
tf.constant(42, [row_dim, col_dim])與上一個(gè)是一樣的 - 通過(guò)其他的tensor創(chuàng)建
zeros_similar = tf.zeros_like(constant_tsr)
ones_similar = tf.ones_like(constant_tsr) - 序列tensor
linear_tsr = tf.linspace(start=0, stop=1, start=3)
[0.0, 0.5, 1.0]
integer_seq_tsr = tf.range(start=6, limit=15, delta=3)
[6, 9, 12] - 隨機(jī)tensor
randunif_tsr = tf.random_uniform([row_dim, col_dim],minval=0, maxval=1) 均與分布 ( minval <= x < maxval )
randnorm_tsr = tf.random_normal([row_dim, col_dim],mean=0.0, stddev=1.0) 正態(tài)分布
runcnorm_tsr = tf.truncated_normal([row_dim, col_dim],mean=0.0, stddev=1.0) 非負(fù)截尾正態(tài)分布 - 隨機(jī)項(xiàng)數(shù)組
shuffled_output = tf.random_shuffle(input_tensor)
cropped_output = tf.random_crop(input_tensor, crop_size) - 隨機(jī)copy一個(gè)圖像
cropped_image = tf.random_crop(my_image, [height/2, width/2,3])
variable的聲明
- 先看一個(gè)例子,體會(huì)一下接受的入?yún)⑹鞘裁矗?br> my_var = tf.Variable(tf.zeros([row_dim, col_dim]))
- 如何創(chuàng)建和初始化一個(gè)變量
my_var = tf.Variable(tf.zeros([2,3]))
sess = tf.Session()
initialize_op = tf.global_variables_initializer ()
sess.run(initialize_op) - Placeholders的直觀感受垄潮,該占位符是為了session訓(xùn)練思的數(shù)據(jù)可以從feed_dict中獲取烹卒,我們只有對(duì)placeholders有個(gè)操作才能把它放到圖中計(jì)算闷盔,首先初始化一個(gè)圖session,然后聲明一個(gè)placeholders就是x旅急,然后聲明一個(gè)y跟x之間有個(gè)恒等操作identity逢勾,然后隨機(jī)創(chuàng)建一個(gè)數(shù)據(jù)x_vals,運(yùn)行identity操作坠非。
sess = tf.Session()
x = tf.placeholder(tf.float32, shape=[2,2])
y = tf.identity(x)
x_vals = np.random.rand(2,2)
sess.run(y, feed_dict={x: x_vals})
# Note that sess.run(x, feed_dict={x: x_vals}) will result in a self-referencing error - 全局與局部初始化變量
在初始化時(shí)沒(méi)有變量依賴(lài)順序的就用全局的
initializer_op = tf.global_variables_initializer ()
如果有依賴(lài)順序的就用局部的
sess = tf.Session()
first_var = tf.Variable(tf.zeros([2,3]))
sess.run(first_var.initializer)
second_var = tf.Variable(tf.zeros_like(first_var))
# Depends on first_var
sess.run(second_var.initialize
Matrices矩陣操作
identity_matrix = tf.diag([1.0, 1.0, 1.0])
A = tf.truncated_normal([2, 3])
B = tf.fill([2,3], 5.0)
C = tf.random_uniform([3,2])
D = tf.convert_to_tensor(np.array([[1., 2., 3.],[-3., -7.,-1.],[0., 5., -2.]]))
print(sess.run(identity_matrix))
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
print(sess.run(A))
[[ 0.96751703 0.11397751 -0.3438891 ]
[-0.10132604 -0.8432678 0.29810596]]
print(sess.run(B))
[[ 5. 5. 5.]
[ 5. 5. 5.]]
print(sess.run(C))
[[ 0.33184157 0.08907614]
[ 0.53189191 0.67605299]
[ 0.95889051 0.67061249]]
print(sess.run(D))
[[ 1. 2. 3.]
[-3. -7. -1.]
[ 0. 5. -2.]]
- 矩陣的加減和乘
print(sess.run(A+B))
[[ 4.61596632 5.39771316 4.4325695 ]
[ 3.26702736 5.14477345 4.98265553]]
print(sess.run(B-B))
[[ 0. 0. 0.]
[ 0. 0. 0.]]
Multiplication
print(sess.run(tf.matmul(B, identity_matrix)))
[[ 5. 5. 5.]
[ 5. 5. 5.]] - 矩陣的行列式
print(sess.run(tf.matrix_determinant(D)))
-38.0 - 矩陣的逆
print(sess.run(tf.matrix_inverse(D)))
[[-0.5 -0.5 -0.5 ]
[ 0.15789474 0.05263158 0.21052632]
[ 0.39473684 0.13157895 0.02631579]] - 矩陣的楚列斯基分解
print(sess.run(tf.cholesky(identity_matrix)))
[[ 1. 0. 1.]
[ 0. 1. 0.]
[ 0. 0. 1.]] - 矩陣的特征值與特征向量
print(sess.run(tf.self_adjoint_eig(D))
[[-10.65907521 -0.22750691 2.88658212]
[ 0.21749542 0.63250104 -0.74339638]
[ 0.84526515 0.2587998 0.46749277]
[ -0.4880805 0.73004459 0.47834331]]
第一行就是特征值,剩下的行就是特征向量
Operations的聲明
tensorflow有一些標(biāo)準(zhǔn)的operations(加減乘除)
add() , sub() , mul() , div()tensorflow提供了數(shù)種div()方法
print(sess.run(tf.div(3,4)))
0
print(sess.run(tf.truediv(3,4)))
0.75
print(sess.run(tf.floordiv(3.0,4.0)))
0.0取余
print(sess.run(tf.mod(22.0, 5.0)))
2.0cross()方法
該方法只接受兩個(gè)三維的tensor
print(sess.run(tf.cross([1., 0., 0.], [0., 1., 0.])))
[ 0. 0. 1.0]其他的函數(shù)列表果正,大家自己體會(huì)吧(英文不好下個(gè)金山詞霸炎码,挺好用的)
- 特殊的數(shù)學(xué)函數(shù)
# Tangent function (tan(pi/4)=1)
print(sess.run(tf.div(tf.sin(3.1416/4.), tf.cos(3.1416/4.))))
1.0
- 自定義函數(shù)
def custom_polynomial(value):
return(tf.sub(3 * tf.square(value), value) + 10)
print(sess.run(custom_polynomial(11)))
362 - 激活函數(shù)(不用多說(shuō)都知道激活函數(shù)吧)
- max(0,x)
print(sess.run(tf.nn.relu([-3., 3., 10.])))
[ 0. 3. 10.] - min(max(0,x),6)
print(sess.run(tf.nn.relu6([-3., 3., 10.])))
[ 0. 3. 6.] - 1/(1+exp(-x))
print(sess.run(tf.nn.sigmoid([-1., 0., 1.])))
[ 0.26894143 0.5 0.7310586 ] - ((exp(x)-exp(-x))/(exp(x)+exp(-x)) [-1, 1]
print(sess.run(tf.nn.tanh([-1., 0., 1.])))
[-0.76159418 0. 0.76159418 ] - x/(abs(x) + 1)
print(sess.run(tf.nn.softsign([-1., 0., -1.])))
[-0.5 0. 0.5] - log(exp(x) + 1)
print(sess.run(tf.nn.softplus([-1., 0., -1.])))
[ 0.31326166 0.69314718 1.31326163] - (exp(x)+1) if x < 0 else x
print(sess.run(tf.nn.elu([-1., 0., -1.])))
[-0.63212055 0. 1. ]
下面使一些圖形
好了,基礎(chǔ)性的東西介紹就先到這里秋泳,可否贊一個(gè)潦闲?你的支持就是我的動(dòng)力!