神經網絡搭建八股

搭建模塊化的神經網絡八股

前向傳播就是搭建網絡,設計網絡結構(forward.py)

1.def forward(x, regularizer):#完成網絡結構的設計,給出從輸入到輸出的數據通路。
        w = 
        b = 
        y = 
        return y 

2.def get_weight(shape, regularizer): #w的shape,以及正則化權重
        w = tf.Variable() #給w賦初值
        tf.add_to_collection("losses", tf.contrib.layers.l2_regularizer(regularizer)(w))
        return w
3.def get_bias(shape):
        b = tf.Variabel() #賦初值
        return b

反向傳播就是訓練網絡,優化網絡參數(backward.py)

def backward():
    x = tf.placeholder () #占位
    y_ = tf.placeholder()
    y = forward.forward(x,REGULARIZER) #復現前向傳播結構,求y
    global_step = tf.Variable(0,trainable = False)
    loss = 
    #損失函數,正則化
    #loss可以是:
    y與y_的差距(loss_mse) = tf.reduce_mean(tf.square(y-y_))
    #也可以是:
    ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits =              y,labels = tf.argmax(y_,1))
    y與y_的差距(cem) = tf.reduce_mean(ce)

    #加入正則化后:
    loss = y于y_的差距+tf.add_n(tf.get_collection("losses"))
    #指數衰減學習率
    learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,數據集總樣本數/BATCH_SIZE,LEARNING_RATE_DECAY,staircase = True)
    train_step =tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step = global_step)
    #滑動平均
    ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)
    ema_op = ema.apply(tf.trainable_variables())
    with tf.control_dependencies([train_step,ema_op]):
    trian_op = tf.no_op(name = "train")
    with tf.Session() as sess:
        init.run(init_op)
        for i in range(STEPS):
            sess.run(train_step,feed_dict = {x:, y:})
            if i % 輪數 == 0 :
                print()
if __name__ = "__main__": #判斷Python運行的文件是否是主文件,如果是主文件,就執行backward這個函數
    backward()

案例

#opt4_8_generateds.py
#0導入模塊 ,生成模擬數據集
import numpy as np
import matplotlib.pyplot as plt
seed = 2 
def generateds():
    #基于seed產生隨機數
    rdm = np.random.RandomState(seed)
    #隨機數返回300行2列的矩陣,表示300組坐標點(x0,x1)作為輸入數據集
    X = rdm.randn(300,2)
    #從X這個300行2列的矩陣中取出一行,判斷如果兩個坐標的平方和小于2,給Y賦值1,其余賦值0
    #作為輸入數據集的標簽(正確答案)
    Y_ = [int(x0*x0 + x1*x1 <2) for (x0,x1) in X]
    #遍歷Y中的每個元素,1賦值'red'其余賦值'blue',這樣可視化顯示時人可以直觀區分
    Y_c = [['red' if y else 'blue'] for y in Y_]
    #對數據集X和標簽Y進行形狀整理,第一個元素為-1表示跟隨第二列計算,第二個元素表示多少列,可見X為兩列,Y為1列
    X = np.vstack(X).reshape(-1,2)
    Y_ = np.vstack(Y_).reshape(-1,1)
    
    return X, Y_, Y_c
    
#print X
#print Y_
#print Y_c
#用plt.scatter畫出數據集X各行中第0列元素和第1列元素的點即各行的(x0,x1),用各行Y_c對應的值表示顏色(c是color的縮寫) 
#plt.scatter(X[:,0], X[:,1], c=np.squeeze(Y_c)) 
#plt.show()
#opt4_8_forward.py
#0導入模塊 ,生成模擬數據集
import tensorflow as tf

#定義神經網絡的輸入、參數和輸出,定義前向傳播過程 
def get_weight(shape, regularizer):
    w = tf.Variable(tf.random_normal(shape), dtype=tf.float32)
    tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))
    return w

def get_bias(shape):  
    b = tf.Variable(tf.constant(0.01, shape=shape)) 
    return b
    
def forward(x, regularizer):
    
    w1 = get_weight([2,11], regularizer)    
    b1 = get_bias([11])
    y1 = tf.nn.relu(tf.matmul(x, w1) + b1)

    w2 = get_weight([11,1], regularizer)
    b2 = get_bias([1])
    y = tf.matmul(y1, w2) + b2 
    
    return y
#
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import opt4_8_generateds  #兩個py文件放在\Anaconda3\Lib文件夾下
import opt4_8_forward

STEPS = 40000
BATCH_SIZE = 30 
LEARNING_RATE_BASE = 0.001
LEARNING_RATE_DECAY = 0.999
REGULARIZER = 0.01

def backward():
    x = tf.placeholder(tf.float32, shape=(None, 2))
    y_ = tf.placeholder(tf.float32, shape=(None, 1))

    X, Y_, Y_c = opt4_8_generateds.generateds()

    y = opt4_8_forward.forward(x, REGULARIZER) #復現前向傳播求y
    
    global_step = tf.Variable(0,trainable=False)    
        #指數學習衰減率
    learning_rate = tf.train.exponential_decay(    
        LEARNING_RATE_BASE,
        global_step,
        300/BATCH_SIZE,
        LEARNING_RATE_DECAY,
        staircase=True)


    #定義損失函數
#損失函數為均方誤差
    loss_mse = tf.reduce_mean(tf.square(y-y_))
    loss_total = loss_mse + tf.add_n(tf.get_collection('losses'))
    
    #定義反向傳播方法:包含正則化
    train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss_total)

    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        for i in range(STEPS):
            start = (i*BATCH_SIZE) % 300
            end = start + BATCH_SIZE
            sess.run(train_step, feed_dict={x: X[start:end], y_:Y_[start:end]})
            if i % 2000 == 0:   #每2000輪打印一次參數
                loss_v = sess.run(loss_total, feed_dict={x:X,y_:Y_})
                print("After %d steps, loss is: %f" %(i, loss_v))

        xx, yy = np.mgrid[-3:3:.01, -3:3:.01]
        grid = np.c_[xx.ravel(), yy.ravel()]
        probs = sess.run(y, feed_dict={x:grid})
        probs = probs.reshape(xx.shape)
    
    plt.scatter(X[:,0], X[:,1], c=np.squeeze(Y_c)) 
    plt.contour(xx, yy, probs, levels=[.5])
    plt.show()
    
if __name__=='__main__':
    backward()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372