1. 程式人生 > >(windows10版)Tensorflow 實戰Google深度學習框架學習筆記(五)正則化

(windows10版)Tensorflow 實戰Google深度學習框架學習筆記(五)正則化

# 1. 生成模擬資料集
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

data = []
label = []
np.random.seed(0) #每次生成相同的隨機數

# 以原點為圓心,半徑為1的圓把散點劃分成紅藍兩部分,並加入隨機噪音。
for i in range(150):
    x1 = np.random.uniform(-1,1) #橫軸區間,均勻分佈
    x2 = np.random.uniform(0,2)  #縱軸區間
    if x1**2 + x2**2 <= 1:
        data.append([np.random.normal(x1, 0.1),np.random.normal(x2,0.1)])
        label.append(0)
    else:
        data.append([np.random.normal(x1, 0.1), np.random.normal(x2, 0.1)])
        label.append(1)

# -1就是讓系統根據元素數和已知行或列推算出剩下的列或行,-1就是模糊控制,
# (-1,2)就是固定兩列,行不知道
data = np.hstack(data).reshape(-1,2)
label = np.hstack(label).reshape(-1, 1)
plt.scatter(data[:,0], data[:,1], c=label,
           cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")
plt.show()

# 2. 定義一個獲取權重,並自動加入正則項到損失的函式

def get_weight(shape, lambda1):
    #生成一個變數
    var = tf.Variable(tf.random_normal(shape), dtype=tf.float32)

    # tf.add_to_collection:把變數放入一個集合,把很多變數變成一個列表
    # tf.get_collection:從一個結合中取出全部變數,是一個列表
    # tf.add_n:把一個列表的東西都依次加起來

    #add_to_collection函式將這個新生成變數的L2正則化損失項加入集合
    #這個函式的第一個引數‘losses’是集合的名字,第二個引數是要加入這個集合的內容
    tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(lambda1)(var))
    #返回生成的變數
    return var

# 3. 定義神經網路
x = tf.placeholder(tf.float32, shape=(None, 2))
y_ = tf.placeholder(tf.float32, shape=(None, 1))
sample_size = len(data)

# 每層節點的個數
layer_dimension = [2,10,5,3,1]
#神經網路的層數
n_layers = len(layer_dimension)
#這個變數維護前向傳播時最深層的節點,開始的時候就是輸入層
cur_layer = x
#當前層節點個數
in_dimension = layer_dimension[0]

# 通過一個迴圈來生成5層全連線的神經網路結構
for i in range(1, n_layers):
    #layer_dimension[i]為下一層的節點個數
    out_dimension = layer_dimension[i]
    #生成當前層中權重的變數,並將這個變數的L2正則化損失加入計算圖上的集合
    weight = get_weight([in_dimension, out_dimension], 0.003)
    bias = tf.Variable(tf.constant(0.1, shape=[out_dimension]))
    #使用elu啟用函式
    cur_layer = tf.nn.elu(tf.matmul(cur_layer, weight) + bias)
    #進入下一層之前將下一層的節點個數更新為當前層節點個數
    in_dimension = layer_dimension[i]

y= cur_layer

# 損失函式的定義:
#在定義神經網路前向傳播的同時已經將所有的L2正則化損失加入了圖上的集合,
#這裡只需要計算刻畫模型在訓練資料上表現的損失函式
mse_loss = tf.reduce_sum(tf.pow(y_ - y, 2)) / sample_size
#將均方差損失函式加入到損失集合
tf.add_to_collection('losses', mse_loss)
loss = tf.add_n(tf.get_collection('losses'))

# 4. 訓練不帶正則項的損失函式mse_loss
# 定義訓練的目標函式mse_loss,訓練次數及訓練模型
train_op = tf.train.AdamOptimizer(0.001).minimize(mse_loss)
TRAINING_STEPS = 40000

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    for i in range(TRAINING_STEPS):
        sess.run(train_op, feed_dict={x: data, y_: label})
        if i % 2000 == 0:
            print("After %d steps, mse_loss: %f" % (i,sess.run(mse_loss, feed_dict={x: data, y_: label})))

    # 畫出訓練後的分割曲線
    # mgrid函式產生兩個240×241的陣列:-1.2到1.2每隔0.01取一個數共240個
    xx, yy = np.mgrid[-1.2:1.2:.01, -0.2:2.2:.01]
    #np.c_是按行連線兩個矩陣,就是把兩矩陣左右相加,要求行數相等,類似於pandas中的merge()
    grid = np.c_[xx.ravel(), yy.ravel()]
    probs = sess.run(y, feed_dict={x:grid})
    probs = probs.reshape(xx.shape)

plt.scatter(data[:,0], data[:,1], c=label,
           cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")
plt.contour(xx, yy, probs, levels=[.5], cmap="Greys", vmin=0, vmax=.1)
plt.show()

# 5. 訓練帶正則項的損失函式loss
# 定義訓練的目標函式loss,訓練次數及訓練模型
train_op = tf.train.AdamOptimizer(0.001).minimize(loss)
TRAINING_STEPS = 40000

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    for i in range(TRAINING_STEPS):
        sess.run(train_op, feed_dict={x: data, y_: label})
        if i % 2000 == 0:
            print("After %d steps, loss: %f" % (i, sess.run(loss, feed_dict={x: data, y_: label})))

    # 畫出訓練後的分割曲線
    xx, yy = np.mgrid[-1:1:.01, 0:2:.01]
    grid = np.c_[xx.ravel(), yy.ravel()]
    probs = sess.run(y, feed_dict={x:grid})
    probs = probs.reshape(xx.shape)

plt.scatter(data[:,0], data[:,1], c=label,
           cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")
plt.contour(xx, yy, probs, levels=[.5], cmap="Greys", vmin=0, vmax=.1)

plt.show()


注:之前使用pycharm進行計算,這次使用conda內建的spyder編譯器生成結果。在spyder開著的情況下,pycharm無法執行此程式,會提示各種錯誤,解決辦法就是關閉pycharm。

相關推薦

windows10Tensorflow 實戰Google深度學習框架學習筆記

# 1. 生成模擬資料集import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npdata = []label = []np.random.seed(0) #每次生成相同的隨機數# 以原點為

TensorFlow-實戰Google深度學習框架 筆記

當我 日誌 不一定 rain 如何 validate .config 存儲 構建 TensorFlow TensorFlow 是一種采用數據流圖(data flow graphs),用於數值計算的開源軟件庫。在 Tensorflow 中,所有不同的變量和運算都是儲存在計算圖

TensorFlow+實戰Google深度學習框架學習筆記12------Mnist識別和卷積神經網路LeNet

一、卷積神經網路的簡述 卷積神經網路將一個影象變窄變長。原本【長和寬較大,高較小】變成【長和寬較小,高增加】 卷積過程需要用到卷積核【二維的滑動視窗】【過濾器】,每個卷積核由n*m(長*寬)個小格組成,每個小格都有自己的權重值, 長寬變窄:過濾器的長寬決定的 高度變高:過濾器的個數決定的 &nb

TensorFlow+實戰Google深度學習框架學習筆記13------Mnist識別和卷積神經網路AlexNet

一、AlexNet:共8層:5個卷積層(卷積+池化)、3個全連線層,輸出到softmax層,產生分類。  論文中lrn層推薦的引數:depth_radius = 4,bias = 1.0 , alpha = 0.001 / 9.0 , beta = 0.75 lrn現在僅在AlexNet中使用,

TensorFlow+實戰Google深度學習框架學習筆記13------Mnist識別和卷積神經網絡AlexNet

net dev adding 筆記 learn 明顯 lex test info 一、AlexNet:共8層:5個卷積層(卷積+池化)、3個全連接層,輸出到softmax層,產生分類。 論文中lrn層推薦的參數:depth_radius = 4,bias = 1.0 ,

TensorFlow+實戰Google深度學習框架學習筆記14------VGGNet

一、VGGNet:5段卷積【每段有2~3個卷積層+最大池化層】【每段過濾器個數:64-128-256-512-512】 每段的2~3個卷積層串聯在一起的作用: 2個3×3的卷積層串聯的效果相當於一個5×5的卷積層,即一個畫素會跟周圍5×5的畫素產生關聯。【28*28的輸入經過一次5*5得到24*24,s=

TensorFlow實戰Google深度學習框架》——4.2.1 經典損失函式交叉熵、均方差

目錄 1、交叉熵 1、交叉熵 交叉熵是分類問題中使用比較廣的一種損失函式,刻畫了兩個概率分佈之間的距離。 給定兩個概率分佈p和q,通過q來表示p的交叉熵為: 交叉熵刻畫的是兩個概率分佈之間的距離,然而神經網路的輸出卻不一定是一個概率分佈。Softmax迴歸就

Tensorflow 實戰Google深度學習框架——學習筆記LeNet-5網路實現MNIST手寫數字集識別

使用LeNet-5模型實現MNIST手寫數字識別,其神經網路架構如下: 一、詳細介紹LeNet-5模型每一層的結構 第一層,卷積層 這一層輸入原始的影象畫素,接受的輸入層大小為32*32*1,第一個卷積層過濾器尺寸為5*5,共6個,不使用全0填

Tensorflow 實戰Google深度學習框架——學習筆記TensorFlow持久化

TensorFlow模型持久化 模型持久化的目的:為了讓訓練完的模型可以在下次使用 TensorFlow提供了一個非常簡單的API來儲存和還原一個神經網路,這個API類就是tf.train.Saver類。以下是儲存TensorFlow計算圖的方法。 變數

Tensorflow 實戰Google深度學習框架——學習筆記遷移學習

TensorFlow遷移學習的步驟 1、獲取(你要訓練的)資料集 2、獲取模型(bp檔案載入) 3、獲取遷移後的輸出張量bottleneck_tensor和輸入張量jpeg_data_tensor(這一步同時也會獲取jpeg_data_tens

我是初學者——TensorFlow實戰Google深度學習框架學習筆記

書本3.1.2計算圖的使用中的第41頁,例項中 v=tf.get_variable(     "v",initializer=tf.zeros_initializer(shape=[1])) 報錯 原因在於新版的tensorflow將語法改為 v=tf.get_varia

TensorFlow實戰Google深度學習框架2017.3第一版學習筆記

書本3.1.2計算圖的使用中的第41頁,例項中 v = tf.get_variable( 'v', initializer = tf.zeros_initializer(shape = [1])) 報錯 原因在於新版的tensorflow將語法改為 v

Tensorflow 實戰Google深度學習框架》PDF

roc mage com size 深度學習框架 pdf 深度學習 ext flow 鏈接:https://pan.baidu.com/s/1Jf8LWJXWUnfpNly0KagVMA《Tensorflow 實戰Google深度學習框架》PDF版

TensorFlow實戰Google深度學習框架 (第2) 》中文版PDF和源代碼

分享 flow shadow 源代碼 ges ado text href 第2版 下載:https://pan.baidu.com/s/1aD1Y2erdtppgAbk8c63xEw 更多最新的資料:http://blog.51cto.com/3215120 《Tensor

分享《TensorFlow實戰Google深度學習框架 (第2) 》中文版PDF和源代碼

技術分享 roc orf 中文版 RoCE term col vpd pan 下載:(https://pan.baidu.com/s/1mrEiGC2B3h6p1iOZuOkGlw) 《TensorFlow實戰Google深度學習框架(第2版)》中文版PDF和源代碼中文版P

TensorFlow實戰Google深度學習框架(第2)》+《TensorFlow實戰_黃文堅》

代碼 tex ref 深度學習框架 term 第2版 ogl type google 資源鏈接:https://pan.baidu.com/s/1n-ydbsnvKag4jWgpHRGIUA《TensorFlow實戰Google深度學習框架(第2版)》中文版PDF和源代碼帶

王權富貴書評:《TensorFlow實戰Google深度學習框架第二》(鄭澤宇 樑博文 顧思宇 著)

一本介紹TensorFlow的書,比較基礎,但是還是寫的不好。這本是我TensorFlow的啟蒙書,我硬著頭皮看完的,目前還沒發現比這本書好的。 推薦指數:**                   

Tensorflow 實戰Google深度學習框架章 5.2.1Minister數字識別 原始碼

1 import os 2 import tab 3 import tensorflow as tf 4 5 print "tensorflow 5.2 " 6 7 from tensorflow.examples.tutorials.mnist import input

Tensorflow 實戰Google深度學習框架章 5.2.1Minister數字識別 源代碼

sting var initial testin def after depend reduce sky 1 import os 2 import tab 3 import tensorflow as tf 4 5 print "tensorflow

Tensorflow實戰Google深度學習框架 第1-3章總結

Tensorflow實戰Google深度學習框架 第1章 深度學習簡介 深度學習在NLP上的應用: 1.語言模型 2.機器翻譯 3.詞性標註 4.實體識別 5.情感分析 6.廣告推薦 7.搜尋排序 語料庫: WordNet, ConceptN