Tensorflow 在損失函式中加入正則項(Normalization)
L1和L2正則:
舉例說明,假設有一個數組 nums=[1,2,3,4]
L1 = a*(|1|+|2|+|3|+|4|)
L2 = a*(1^2+2^2+3^2+4^2)/2
其中a是係數,用於平衡正則項與經驗損失函式的權重關係,即:C = loss+a*Normalization。
這裡說明一下,利用L1經過訓練後,會讓權重得到稀疏結,即權重中的一部分項為0,這種作用相當於對原始資料進行了特徵選擇;利用L2進行訓練後,會讓權重更趨於0,但不會得到稀疏解,這樣做可以避免某些權重過大;兩種正則做法都可以減輕過擬合,使訓練結果更加具有魯棒性。
下面給出使用TensorFlow計算L1,L2的方法。
import tensorflow as tf alpha = 0.5 #係數設定為0.5,alpha相當於上述a val = tf.constant([[1,2],[3,4]],dtype=tf.float32) l1 = tf.contrib.layers.l1_regularizer(alpha)(val) l2 = tf.contrib.layers.l2_regularizer(alpha)(val) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print ("l1:",sess.run(l1)) print ("l2:",sess.run(l2))
下面給出使用TensorFlow的整體訓練過程:
# -*- coding: utf-8 -*- """ Created on Sun Jun 4 21:51:33 2017 @author: Yangyang Deng @Email: [email protected] """ import tensorflow as tf from numpy.random import RandomState w1 = tf.Variable(tf.truncated_normal([2,3],seed=1)) w2 = tf.Variable(tf.truncated_normal([3,1],seed=1)) x = tf.placeholder(dtype=tf.float32,shape=[None,2]) y_real = tf.placeholder(dtype=tf.float32,shape=[None,1]) a = tf.nn.relu(tf.matmul(x,w1)) #神經元的啟用函式為 relu y_pre = tf.nn.relu(tf.matmul(a,w2)) sample_size = 20000 #訓練樣本總數 batch = 500 # 使用mini-batch(批梯度下降),每個batch的大小。 rds = RandomState(0) X = rds.rand(sample_size,2) Y = [[int(20*x1+30*x2)]+rds.rand(1) for (x1,x2) in X] #Y = 20*x1+30*x2+noise global_step = tf.Variable(0) #--------------學習速率的設定(學習速率呈指數下降)--------------------- learning_rate = tf.train.exponential_decay(1e-2,global_step,decay_steps=sample_size/batch,decay_rate=0.98,staircase=True) #-------------使用均方誤差(MSE)作為損失函式,在損失函式中加入L1正則項 MSE = tf.reduce_mean(tf.square(y_real-y_pre)+tf.contrib.layers.l1_regularizer(0.1)(w1)) train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(MSE,global_step=global_step) step = 20000 #訓練的總次數 start = 0 end = batch sess = tf.Session() sess.run(tf.global_variables_initializer()) for i in range(step): sess.run(train_step,feed_dict={x:X[start:end],y_real:Y[start:end]}) if not i%20: H = sess.run(MSE,feed_dict={x:X[start:end],y_real:Y[start:end]}) lr = sess.run(learning_rate) l1 = sess.run(tf.contrib.layers.l1_regularizer(0.1)(w1)) print ("MSE: ",H," learning_rate: ",lr," l1:",l1) if H<1e-1: #採用stop early 的方法防止過擬合,節省訓練時間。 break strat = end if end<sample_size else 0 end = start+batch y1 = sess.run(y_pre,feed_dict={x:X[start:end]}) y2 = Y[start:end] sess.close() #訓練結果的部分展示 for i in range(100): print(y1[i],y2[i])
相關推薦
Tensorflow 在損失函式中加入正則項(Normalization)
L1和L2正則: 舉例說明,假設有一個數組 nums=[1,2,3,4] L1 = a*(|1|+|2|+|3|+|4|) L2 = a*(1^2+2^2+3^2+4^2)/2 其中a是係數,用於平衡正則項與經驗損失函式的權重關係,即:C = loss+a*Normaliz
神經網路損失函式中的正則化項L1和L2
轉自:https://blog.csdn.net/dcrmg/article/details/80229189 神經網路中損失函式後一般會加一個額外的正則項L1或L2,也成為L1範數和L2範數。正則項可以看做是損失函式的懲罰項,用來對損失函式中的係數做一些限制
79、tensorflow計算一個五層神經網路的正則化損失係數、防止網路過擬合、正則化的思想就是在損失函式中加入刻畫模型複雜程度的指標
''' Created on Apr 20, 2017 @author: P0079482 ''' import tensorflow as tf #獲取一層神經網路邊上的權重,並將這個權重的L2正
機器學習中目標函式、損失函式以及正則項的通俗解釋
目錄: 前言: 1、什麼是目標函式? 定義是:指所關心的目標與相關的因素的函式關係。舉個例子,假如我們想要預測公司樓下手抓餅店明天能賣多少張手抓餅,已知過去10天每天賣多少,以及每天的天氣情況,是否有節假日,和手抓餅店老闆和老闆娘的感情狀況,
資料預處理中歸一化(Normalization)與損失函式中正則化(Regularization)解惑
背景:資料探勘/機器學習中的術語較多,而且我的知識有限。之前一直疑惑正則這個概念。所以寫了篇博文梳理下 摘要: 1.正則化(Regularization) 1.1 正則化的目的 1.2 結構風險最小化(SRM)理論 1.3 L1範數
機器學習演算法中如何選取超引數 學習速率 正則項係數 minibatch size
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
sql中的正則函式
SQL 中的正則函式 ORACLE中支援正則表示式的函式主要有下面四個: 1,REGEXP_LIKE :與LIKE的功能相似,比LIKE強大得多。 2,REGEXP_INSTR :與INSTR的功能相似。 3,REGEXP_SUBSTR :與SUBSTR的功能相似。 4,REGEXP_REPLA
Python中re(正則表示式)常用函式總結
1 re.match #嘗試從字串的開始匹配一個模式 re.match的函式原型為:re.match(pattern, string, flags) 第一個引數是正則表示式,這裡為"(\w+)\s",如果匹配成功,則返回一個Match,否則返
機器學習筆記之五——目標函式、經驗風險與結構風險、正則項
一、常見的目標函式(loss/cost function) 二、經驗風險與結構風險 經驗風險 L(f) 就是以上損失函式,描述的是模型與訓練資料的契合程度。 結構風險Ω(f)對應於過擬合問題,用正則項解決過擬合是結構風險的課
TensorFlow 中的正則化(Batch Normalization)詳解和實現程式碼
雖然在訓練初期使用 He 初始化方法初始ELU(或者其他派生的ReLU)能夠有效的防止梯度彌散、爆炸問題。但是這種方式無法保證梯度問題不會在訓練過程中產生。 2015年的一篇paper( “Batch Normalization: Accel
Oracle中的正則表示式(及函式)詳解
1、概述 相信大家對正則表示式都不陌生,從linux下的命令到Java等程式語言,正則表示式無處不在,雖然我們實際使用的時候也並不一定太多,但是當我們要處理字串時,它確實是一個強大的工具。 上一篇文章(Oracle中的字串型別及相關函式詳解)中,已
caffe中如何列印/輸出總loss,包括loss和正則項(待完成)
並沒有找到合適的方案,目前來看,需要修改原始碼,但是咋修改原始碼,還沒有搞定。並沒有找到合適的方案,目前來看,需要修改原始碼,但是咋修改原始碼,還沒有搞定。並沒有找到合適的方案,目前來看,需要修改原始碼
JS中利用正則表示式交換函式的引數位置
某百科中看到一個例子,要用正則表示式將函式foo(a,b,c)中的引數位置換為foo(b,a,c),正好又在複習JS的過程中看到了正則表示式的部分,於是考慮用JS來實現這個功能。 函式的引數同例題中一樣通過 [^,]* 進行匹配,於是寫出正則式: /foo\
機器學習中regularization正則化(加入weight_decay)的作用
Regularization in Linear Regression 轉載自:http://blog.sina.com.cn/s/blog_a18c98e5010115ta.html Regularization是Linear Regression中很重要的一步。
javascript中使用正則表達式
表達 制表符 script java asc 重復 scrip a-z 出現 1.標準字符集和 \d:任意一個數字,0-9中的一個; \w:任意一個字母數字下劃線,即a-z, A-Z, 0-9,_中的一個; \s:空格,換行符,制表符等空白字符中的一個; .:小數點可以匹配
vim中使用正則表達式
.html 函數表達式 定向 源文件 替換字符 標準 一覽 ati adc 一、使用正則表達式的命令 使用正則表達式的命令最常見的就是 / (搜索)命令。其格式例如以下: /正則表達式 還有一個非常實用的命令就是 :s(替換)
【js 正則表達式】記錄所有在js中使用正則表達式的情況
表達式 字符 username 之前 replace rep 慢慢 字符串 pla 說實話,對正則表達式有些許的畏懼感,之前的每次只要碰到需要正則表達式去匹配的情況,都會刻意的躲過或者直接從度娘處獲取。 此時此刻,感覺到了某一個特定的點去觸及她。但筆者對於正則表達式使用上的
python中的正則表達式
spa cnblogs cep 字符0 輸出 正則表達式 pytho clas 匹配字符串 特殊字符 "." : Matches any character except a newline. 匹配任何字符 除了換行符"^" :匹配字符的開頭 1 import re
Python中的正則表達式-re模塊
最大的 語法 詳細 ict over emp 則表達式 regular mpi 有時候我們需要模糊查找我們需要的字符串等值,這個時候需要用到正則表達式。 正則表達式的使用,在python中需要引入re包 import re 1、首先了解下正則表達式的常用語
爬蟲——爬蟲中使用正則表達式
txt文件 點擊 頁碼 range safari 頁面 gen odin ace 下面我們嘗試爬取內涵段子網站:http://www.neihan8.com/article/list_5_1.html 打開之後,當你進行翻頁的時候,不能註意到,url地址的變化: