在分類與回歸問題中,預設返回的是訓練的誤差,但是誤差這個度量不夠直觀,也不方便兩個模型做比較。例如:**學生分數誤差是20分,但是**房價的誤差是200元,雖然後者比前者的誤差大,但是大家都應該知道後者**模型肯定比前者要好。為了避免這種情況出現,我們應該把誤差轉化為正確率。
import numpy as np
import tensorflow as tf
y_predict = np.array([[
1,9,
3,4,
6],[
0,2,
4,4,
8]])
y_true = np.array([[
2,3,
4,5,
9],[
1,3,
3,3,
8]])
with tf.session(
)as sess:
# axis為0代表獲取每列最大值,1代表獲取每行最大值
print
(sess.run(tf.argmax(y_predict,1)
))# [1 4]
print
(sess.run(tf.argmax(y_true,1)
))# [4 4]
# 張量(標量,向量,矩陣)的每個值進行比較,比對成功返回為true否則為false
print
(sess.run(tf.equal([1
,2,3
],[3
,2,1
])))
# [false true false]
equal_list = sess.run(tf.equal(tf.argmax(y_predict,0)
, tf.argmax(y_true,0)
))print
(equal_list)
# [ true true false true false]
# 看原始碼:將x的資料格式轉化成dtype.
# 如果是bool則轉化為0,1 反之亦然
accuracy_list = sess.run(tf.cast(equal_list, tf.float32)
)print
('命中率列表'
, accuracy_list)
# [1. 1. 0. 1. 0.]
# 求和在求平均,則可以得到正確率
accuracy = tf.reduce_mean(accuracy_list)
# 0.6
print
('求準確率'
, sess.run(accuracy)
)
# 完成圖形影象的載入 (解析度和尺寸相同)
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
mnist = input_data.read_data_sets(
"../data/input_data"
,one_hot=
true
)# 訓練的時候不會一次性載入55000,因此需要採用佔位符
x = tf.placeholder(tf.float32,
[none
,784])
y_true = tf.placeholder(tf.float32,
[none,10
])# 多少個連線就會有多少個權重weight [none,784] dot [784,10] ===> [none,10]
# 變數: 深度學習過程中可變的量
weight = tf.variable(tf.random.normal(
[784,10
]),name=
"weight"
)bias = tf.variable(tf.random.normal([10
]),name=
"bias"
)y_predict = tf.matmul(x,weight)
+ bias # matmul == dot
# softmax: 就是把向量值歸一化到[0,1]之間,總和為1
y_predict = tf.nn.softmax(y_predict)
loss =
-tf.reduce_mean(y_true * tf.log(y_predict)
)# 採用梯度下降公式來減少誤差值: 學習率 0,1之間
train_op = tf.train.gradientdescentoptimizer(
0.7)
.minimize(loss)
# 獲取神經網路每次執行的正確率
result = tf.equal(tf.argmax(y_predict,axis=1)
,tf.argmax(y_true,axis=1)
)result = tf.cast(result,tf.float32)
accuracy = tf.reduce_mean(result)
# 通過會話連線graph圖
with tf.session(
)as sess:
sess.run(tf.global_variables_initializer())
for i in
range
(5000):
# 每一次獲取指定數量的樣本和樣本的目標值
mnist_x,mnist_y = mnist.train.next_batch(55)
d =sess.run(train_op,feed_dict=d)
print
(f'第次訓練的正確率為:'
)
通過上面**可以看書,無論步長是5000還是10000 我們的正確率基本上在85%~90%之間,很難在有新的提公升,在這種情況下就不是訓練次數不夠了,而是模型本身需要優化。簡單神經網路只有輸入和輸出,沒有隱藏層,問題不能被拆分因此訓練模型粗糙
如果物體本身比較複雜,例如人臉識別,那麼很多時候我們應該把人臉進行拆分鼻子、嘴巴、耳朵… 這樣就需要構建隱藏神經網路
如果一張圖有很多的物體,那麼我們應該把每個物體單獨拿來處理,這個時候就會用到更高階的卷積神經網路
神經網路調參
神經網路的一些調參方法小結 1 網格搜尋法 網格搜尋就是將多個引數進行笛卡爾乘積後逐個試驗,很費時間。sklearn庫有gridsearchcv函式,結合了交叉驗證,我還沒在神經網路上應用過。2 逐個調參 用列舉的方法逐個引數調優,乙個引數取最佳值後固定住再進行下乙個引數調優,比網格搜尋快一些。不過...
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...