1. 程式人生 > >CNN-卷積神經網路防止過擬合的方法

CNN-卷積神經網路防止過擬合的方法

過擬合出現的原因

  • 訓練的資料過少,無法準確獲得資料中的特徵
  • 全連線神經網路中引數增多也會導致過擬合問題(還可以導致計算速度減慢)

過擬合解決的辦法

1. data augmentation:

這點不需要解釋太多,所有的過擬合無非就是訓練樣本的缺乏和訓練引數的增加。一般要想獲得更好的模型,需要大量的訓練引數,這也是為什麼CNN網路越來越深的原因之一,而如果訓練樣本缺乏多樣性,那再多的訓練引數也毫無意義,因為這造成了過擬合,訓練的模型泛化能力相應也會很差。大量資料帶來的特徵多樣性有助於充分利用所有的訓練引數。

data augmentation的手段一般有:

  • 1)收集更多資料
  • 2)對已有資料進行crop,flip,加光照等操作
  • 3)利用生成模型(比如GAN)生成一些資料。

2. weight decay:

常用的weight decay有L1和L2正則化,L1較L2能夠獲得更稀疏的引數,但L1零點不可導。在損失函式中,weight decay是放在正則項(regularization)前面的一個係數,正則項一般指示模型的複雜度,所以weight decay的作用是調節模型複雜度對損失函式的影響,若weight decay很大,則複雜的模型損失函式的值也就大。

3.提前終止:

提前停止其實是另一種正則化方法,就是在訓練集和驗證集上,一次迭代之後計算各自的錯誤率,當在驗證集上的錯誤率最小,在沒開始增大之前停止訓練,因為如果接著訓練,訓練集上的錯誤率一般是會繼續減小的,但驗證集上的錯誤率會上升,這就說明模型的泛化能力開始變差了,出現過擬合問題,及時停止能獲得泛化更好的模型。

4.dropout :

CNN訓練過程中使用dropout是在每次訓練過程中隨機將部分神經元的權重置為0,即讓一些神經元失效,這樣可以縮減引數量,避免過擬合,關於dropout為什麼有效,有兩種觀點:
- 1)每次迭代隨機使部分神經元失效使得模型的多樣性增強,獲得了類似多個模型ensemble的效果,避免過擬合
- 2)dropout其實也是一個data augmentation的過程,它導致了稀疏性,使得區域性資料簇差異性更加明顯,這也是其能夠防止過擬合的原因

4.1dropout的具體介紹:

(正在更新)

相關推薦

CNN-神經網路防止方法

過擬合出現的原因 訓練的資料過少,無法準確獲得資料中的特徵 全連線神經網路中引數增多也會導致過擬合問題(還可以導致計算速度減慢) 過擬合解決的辦法 1. data augmentation: 這點不需要解釋太多,所有的過擬合無非就是訓練樣本的

Keras學習(四)——CNN神經網路

本文主要介紹使用keras實現CNN對手寫資料集進行分類。 示例程式碼: import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.models impo

CNN神經網路簡單實現模型

這是基於Mnist手寫識別的資料訓練的一個簡單的CNN卷積神經網路,可以直接在網上下載訓練資料集,但是經常會出現連線不到伺服器的提示,所以我下到本地進行資料的載入,下面程式碼的資料載入有問題,所以自己找了一些程式碼整出來了這個資料載入的辦法,連結為:https://blog.csdn.net/lxi

【深度學習】Tensorflow——CNN 神經網路 2

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-05-CNN3/ 目錄 圖片處理  建立卷積層  建立全連線層  選優化方法  完整程式碼

【深度學習】Tensorflow——CNN 神經網路 1

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-04-CNN2/ 這一次我們會說道 CNN 程式碼中怎麼定義 Convolutional 的層和怎樣進行 pooling. 基於上一次卷積神經網路的介

TensorFlow之CNN神經網路的實現

下載MNIST資料集(28*28,輸入維度為784) import tensorflow as tf #下載MNIST資料集(28*28,輸入維度為784) from tensorflow.examples.tutorials.mnist import input_data mnist =

DeepLearning tutorial(4)CNN神經網路原理簡介+程式碼詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Python CNN神經網路程式碼實現

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Wed Nov 21 17:32:28 2018 4 5 @author: zhen 6 """ 7 8 import tensorflow as tf 9 from tensorflow.e

TensorFlow實現CNN神經網路對手寫數字集mnist的模型訓練

mnist手寫數字集相當於是TensorFlow應用中的Helloworld。 在學習了TensorFlow的卷積神經網路應用之後,今天就分步解析一下其應用過程  一、mnist手寫數字資料集         MN

CNN神經網路入門整合

這是一篇關於CNN入門知識的部落格,基本手法是抄、刪、改、查,就算是自己的一個筆記吧,以後忘了多看看。   1.邊界檢測示例 假如你有一張如下的影象,你想讓計算機搞清楚影象上有什麼物體,你可以做的事情是檢測影象的垂直邊緣和水平邊緣。   卷積計算可以得

CNN-神經網路

開局一張圖 資料輸入層 去均值:把輸入資料各個維度都中心化到0             注意只是在訓練資料上,測試集上減去的是訓練集上的均值,不要再求測試集的均值。 歸一化:幅度歸一到同一範圍。             在實際操作中不用,因為RGB天生就是0-2

吳恩達deeplearning之CNN神經網路入門

1.邊界檢測示例 假如你有一張如下的影象,你想讓計算機搞清楚影象上有什麼物體,你可以做的事情是檢測影象的垂直邊緣和水平邊緣。  如下是一個6*6的灰度影象,構造一個3*3的矩陣,在卷積神經網路中通常稱之為filter,對這個6*6的影象進行卷積運算,以左上角的-5計算為例  3*1+

詳細解釋CNN神經網路各層的引數和連線個數的計算

積神經網路是一個多層的神經網路,每層由多個二維平面組成,而每個平面由多個獨立神經元組成。        圖:卷積神經網路的概念示範:輸入影象通過和三個可訓練的濾波器和可加偏置進行卷積,濾波過程如圖一,卷積後在C1層產生三個特徵對映圖,然後特徵對映圖中每組的四個畫素再進行

CNN神經網路原理的直觀理解

哈哈?偶然在知乎上翻到了我旭神對CNN原理的通俗易懂的解釋,看完以後簡直醍醐灌頂呢。 下面上頭像!! 哼,趕緊記錄一下加強一下理解! 轉自知乎我旭神 如果學過數字影象處理,對於卷積核的作用應該不陌生,比如你做一個最簡單的方向濾波器,那就是一個二維卷積核,這個

CNN神經網路

1、MLP和CNN的區別 MLP喪失了二維影象資訊,必須轉成向量 2、將全連線層轉換為區域性連線層 stride和填充:stride步長,對於超出範圍的區域,可以刪除或者填充預設值,根據需要選擇(pandding分別對應valid和same) 3、卷積層的

python神經網路案例——CNN神經網路實現mnist手寫體識別

全棧工程師開發手冊 (作者:欒鵬) 載入樣本資料集 首先我們要有手寫體的資料集檔案 我們實現一個MNIST.py檔案,專門用來讀取手寫體檔案中的資料。 # -*- coding: UTF-8 -*- # 獲取手寫資料。

CNN神經網路基礎

轉自:http://www.sohu.com/a/138403426_470008 卷積神經網路基礎 神經網路 先借用 CNTK 的一個例子,來看看如何使用神經網路來進行分類。如果想根據一個人的年齡和年收入,對他的政治傾向進行分類(保守派,居中和自由派),怎麼做呢?

CNN神經網路學習筆記1:背景介紹

     Convolutional Neural Network 卷積神經網路是基於人工神經網路提出的。人工神經網路模擬人的神經系統,由一定數量的神經元構成。在一個監督學習問題中,有一組訓練資料(xi,yi),x是樣本,y是label,把它們輸入人工神經網路,

用keras小試CNN神經網路應用於人臉識別

Keras是一個簡約,高度模組化的神經網路庫。採用Python / Theano開發。 使用Keras如果你需要一個深度學習庫: 可以很容易和快速實現原型(通過總模組化,極簡主義,和可擴充套件性)同時支援卷積網路(vision)和複發性的網路(序列資料)。以及兩者的組合。

TensorFlow——CNN神經網路處理Mnist資料集

import tensorflow as tf #Tensorflow提供了一個類來處理MNIST資料 from tensorflow.examples.tutorials.mnist import input_data import time #載入資料集 mnist=input_data.read_