TensotFlow 應用實例:10-Overfitting 過擬合介紹及解決過擬合的方法

TensotFlow 應用實例:10-Overfitting 過擬合介紹及解決過擬合的方法

本文是我在學習TensotFlow 的時候所記錄的筆記崇决,共享出來希望能夠幫助一些需要的人岁疼。

過擬合
什么是過擬合餐禁? 過擬合就是機器過于自信传睹,已經(jīng)到了自負的階段了
自負的壞處就是在自己的小圈子里表現(xiàn)非凡乾戏,但是在現(xiàn)實的大圈子里往往處處碰壁
自負 = 過擬合

我們做人可不要"過擬合"哦蹲诀!

import tensorflow as tf
from sklearn.datasets import load_digits
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import LabelBinarizer


# 過擬合
# 什么是過擬合斑粱? 過擬合就是機器過于自信,以及到了自負的階段了
# 自負的壞處就是在自己的小圈子里表現(xiàn)非凡脯爪,但是在現(xiàn)實的大圈子里往往處處碰壁
# 自負 = 過擬合

# 結果過擬合的方法
# 1. 增加數(shù)據(jù)量
# 大多數(shù)過擬合的原因是因為數(shù)據(jù)量太少了
# 如果有足夠多的數(shù)據(jù)就可以減少過擬合
# 2. 運用正規(guī)化
# L1, L2.. regularization
# y = Wx :其中 W是機器學習要學到的參數(shù)
# 在過擬合中W往往變化過大则北,為了防止W變化過大,可以通過懲罰參數(shù)的方式來減小W的變化
# 原來的誤差是 cost = (Wx - real y)^2
# 可以通過將cost的計算公式中加上 W的絕對值的方式來懲罰W過大的情況
# 既:cost = (Wx - real y)^2 + abs(W), 這樣使得當W過大的時候cost也隨之變大
# cost變大就證明此時的W不是一個很好的參數(shù)值痕慢。這種是L1的正規(guī)化方式

# L2 的方式是將L1中的絕對值換成平方
# 既:cost = (Wx - real y)^2 + (W)^2
# L3尚揣,L4...

# 3. Dropout regularization
# 這種方式專門用在神經(jīng)網(wǎng)絡中,既:在訓練的過程中掖举,隨機忽略一些神經(jīng)元和神經(jīng)的連接
# 這個時候神經(jīng)網(wǎng)絡就會變得不完整快骗,用一個不完整的神經(jīng)網(wǎng)絡訓練一次,而在下一次
# 又去忽略一些其他的神經(jīng)元塔次,變成另一個不完整的神經(jīng)網(wǎng)絡方篮,通過這種隨機Dropout的規(guī)則,
# 就會使得每一次訓練和預測的結果都不會特別依賴于某一部分特定的神經(jīng)元励负。


# load data 加載數(shù)據(jù)
digits = load_digits()
x = digits.data
y = digits.target
y = LabelBinarizer().fit_transform(y)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.3)


# 添加神經(jīng)層
def add_layer(inputs, in_size, out_size, layer_name, activation_function=None):
    # Weights define
    # 權重藕溅,盡量要是一個隨機變量
    # 隨機變量在生成初始變量的時候比全部為零效果要好的很多
    with tf.name_scope('layer'):
        with tf.name_scope('weights'):
            Weights = tf.Variable(tf.random_normal([in_size, out_size]), name='W')
            # histogram 直方圖;柱狀圖 總結weights
            tf.summary.histogram(layer_name + '/weights', Weights)

        # biases define
        # 偏值項继榆,是一個列表巾表,不是矩陣,默認設置為0 + 0.1
        with tf.name_scope('biases'):
            biases = tf.Variable(tf.add(tf.zeros([1, out_size]), 0.1), name='b')
            # histogram 直方圖裕照;柱狀圖 總結biases
            tf.summary.histogram(layer_name + '/biases', biases)
        # W * x + b
        with tf.name_scope('Wx_plus_b'):
            Wx_plus_b = tf.add(tf.matmul(inputs, Weights), biases)
            # add drop out function
            Wx_plus_b = tf.nn.dropout(Wx_plus_b, keep_prob=keep_prob)
        # 如果activation_function是空的時候就表示是一個線性關系直接放回即可
        if activation_function is None:
            outputs = Wx_plus_b
        else:
            outputs = activation_function(Wx_plus_b)
            # histogram 直方圖攒发;柱狀圖 總結biases
            tf.summary.histogram(layer_name + '/outputs', outputs)
        return outputs

# placeholder
# 輸入是64個單位8*8 輸出是10個單位[0,1,2,.....9]
xs = tf.placeholder(tf.float32, [None, 64])
ys = tf.placeholder(tf.float32, [None, 10])

# drop define
# keep_prob 是你至少需要保持的連接比例,不被drop的比例
keep_prob = tf.placeholder(tf.float32)


# add output layer
# hidden layer
# 這里使用tanh可以防止報錯
l1 = add_layer(xs, 64, 100, 'l1', activation_function=tf.nn.tanh)
# output layer
#
prediction = add_layer(l1, 100, 10, 'l2', activation_function=tf.nn.softmax)

# the error between prediction and real data
# loss function
# cross_entropy 分類的時候經(jīng)常使用softmax + cross_entropy來計算的
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),
                                              reduction_indices=[1]))
tf.summary.scalar('loss', cross_entropy)
train_step = tf.train.GradientDescentOptimizer(0.6).minimize(cross_entropy)

sess = tf.Session()
merged = tf.summary.merge_all()

# summary writer goes in here

train_writer = tf.summary.FileWriter("logs/train", sess.graph)
test_writer = tf.summary.FileWriter("logs/test", sess.graph)

# init variables
sess.run(tf.global_variables_initializer())

for i in range(500):
    # 訓練的時候drop 40%
    sess.run(train_step, feed_dict={xs: x_train, ys: y_train, keep_prob: 0.6})
    if i % 50 is 0:
        # record loss
        # 記錄的時候不drop
        train_result = sess.run(merged, feed_dict={xs: x_train, ys: y_train, keep_prob: 1})
        test_result = sess.run(merged, feed_dict={xs: x_test, ys: y_test,  keep_prob: 1})

        # writer file
        train_writer.add_summary(train_result, i)
        test_writer.add_summary(test_result, i)

        # ps
        # tensorboard 當中要有 history summary
        #



本文代碼GitHub地址 tensorflow_learning_notes

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末晋南,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子羔砾,更是在濱河造成了極大的恐慌负间,老刑警劉巖偶妖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異政溃,居然都是意外死亡趾访,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門董虱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扼鞋,“玉大人,你說我怎么就攤上這事愤诱≡仆罚” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵淫半,是天一觀的道長溃槐。 經(jīng)常有香客問我,道長科吭,這世上最難降的妖魔是什么昏滴? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮对人,結果婚禮上谣殊,老公的妹妹穿的比我還像新娘。我一直安慰自己牺弄,他們只是感情好蟹倾,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猖闪,像睡著了一般鲜棠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上培慌,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天豁陆,我揣著相機與錄音,去河邊找鬼吵护。 笑死盒音,一個胖子當著我的面吹牛,可吹牛的內容都是我干的馅而。 我是一名探鬼主播祥诽,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓮恭!你這毒婦竟也來了雄坪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屯蹦,失蹤者是張志新(化名)和其女友劉穎维哈,沒想到半個月后绳姨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡阔挠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年飘庄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片购撼。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡跪削,死狀恐怖,靈堂內的尸體忽然破棺而出迂求,到底是詐尸還是另有隱情碾盐,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布锁摔,位于F島的核電站廓旬,受9級特大地震影響,放射性物質發(fā)生泄漏谐腰。R本人自食惡果不足惜孕豹,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望十气。 院中可真熱鬧励背,春花似錦、人聲如沸砸西。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芹枷。三九已至衅疙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸳慈,已是汗流浹背饱溢。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留走芋,地道東北人绩郎。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像翁逞,于是被迫代替她去往敵國和親肋杖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容