Keras-数据增广
生活随笔
收集整理的這篇文章主要介紹了
Keras-数据增广
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據增廣
簡介
在實際的深度學習項目中,數據集的需求是非常大的,強大的模型包含更多的參數,訓練這些參數需要大量的數據;大量的數據訓練使得模型的泛化能力變強,一定程度上克制過擬合的出現。
數據增廣是對數據集進行倍增的有效手段,首次成功應用于AlexNet取得巨大的效果。對圖片增廣其主要含義為對原來的圖片進行翻轉(水平翻轉和垂直翻轉)、扭曲、變形、拉伸、填充、換色、裁減等手段產生新的圖片,該圖片近似于原圖分布且對模型而言是全新的圖片,從而達到獲取更多訓練數據且有標注(標注與原圖一致或可以通過變換得到)的目的。
Keras作為一個成熟的方便的深度學習框架提供了很高效的圖片數據增廣的API,本項目將逐一演示其作用。
原則
數據增廣的手段是以任務為驅動的,是對任務有利的而不是有害的。
不恰當的數據增廣會干擾模型的訓練,而不會提高模型效果。(如將手寫數據垂直翻轉沒有意義,沒有人的手寫字是倒置的且會使模型難以擬合。)
不是所有時候數據增廣都是有效果的,有時候即使正確的增廣未必會達到預期的效果,這是模型的問題。
數據增廣
-
說明
- Keras要求在創建生成器的時候就指定增廣方式,所以對于訓練數據和測試數據必須創建不同的生成器(要求訓練數據一般情況下是不需要增廣的)。**注意,生成器只是生成器,要想生成數據需要調用生成器的flow方法或者flow_*方法才能得到數據集,調用flow得到的生成器才是fit_generator方法需要的生成器。
- 參數說明
- from keras.preprocessing.image import ImageDataGeneratorimport keras.backend as Ktrain_gen = ImageDataGenerator(featurewise_center=False,samplewise_center=False,featurewise_std_normalization=False,samplewise_std_normalization=False,rescale=1/255.,zca_whitening=False,zca_epsilon=1e-6,rotation_range=0.,width_shift_range=0.,height_shift_range=0.,shear_range=0.,zoom_range=0.,channel_shift_range=0.,fill_mode='nearest',cval=0.,horizontal_flip=False,vertical_flip=False,preprocessing_function=None,data_format=K.image_data_format())
- 說明
- featurewise_center:布爾型,輸入數據集去中心化(均值為0)。
- samplewise_center:布爾型,輸入數據每個樣本均值為0。
- featurewise_std_normalization:布爾型,將輸入樣本除以數據集的標準差以完成標準化。
- samplewise_std_normalization:布爾型,將輸入樣本除以樣本自身的標準差以完成標準化。
- rescale:數值型,重放縮因子,默認為None。如果為None或0則不進行放縮,否則會將該放縮因子乘到樣本數據上(在應用任何其他變換之前),一般設定為1/255.用于圖片歸一化。
- zca_whitening:布爾型,對輸入數據進行ZCA白化。
- zca_epsilon: 數值型,ZCA白化使用的eposilon,默認1e-6。
- rotation_range:整型,增廣時圖片隨機轉動的角度,取值為0-180。
- width_shift_range:數值型,圖片寬度的某個比例值,增廣時圖片水平偏移的幅度。
- height_shift_range:數值型,圖片高度的某個比例值,增廣時圖片豎直偏移的幅度。
- shear_range:數值型,剪切強度(逆時針方向的剪切變換角度)。
- zoom_range:數值型或[low, high]的列表,隨機縮放的幅度,數值型表示[low, high]=[1-zoom_range, 1+zoom_range]。
- channel_shift_range:數值型,通道偏移的幅度。
- fill_mode:‘constant’,‘nearest’,'reflect’或’wrap’取值之一,當增廣越出邊界按該值指定的方法處理。
- cval:數值型,當fill_mode為’constant’時,越界點的填充值。
- horizontal_flip:布爾型,是否隨機進行水平翻轉。
- vertical_flip:布爾型,是否隨機進行豎直翻轉。
- preprocessing_function:將被應用于每個輸入的函數。該函數將在圖片縮放和數據增廣之后運行。該函數接受一個參數,為一張圖片(ndarray),并且輸出一個具有相同shape的ndarray。
- data_format:'channel_first’或’channel_last’之一,代表圖像的通道維的位置。numpy類型圖片通道維在最后,如(224,224, 3)。
- flow方法參數說明
- train_generator = train_gen.flow(X,y, batch_size=1, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='png')
- 說明
- flow方法會死循環地返回一批隨機增廣后數據及其標簽(在y不為None時)。
- X:樣本數據,四維數據。黑白圖像的channel軸的值為1,彩色圖像為3。
- y:與X第一維數值相同的標簽數據。
- batch_size:批尺寸大小,默認為32。
- shuffle:是否隨機打亂數據,默認為True。
- save_to_dir:默認為None,字符串類型,圖片存儲目錄,該參數能讓你將增廣后的圖片保存本地。
- save_prefix:字符串類型,保存增廣后圖片時使用的前綴(如train), 僅當設置了save_to_dir時生效。
- save_format:‘png’或’jpeg’之一,指定保存圖片的數據格式,默認’jpeg’。
- seed:隨機數種子,保證復現。
-
增廣
- 代碼
- train_gen = ImageDataGenerator(featurewise_center=False,samplewise_center=False,featurewise_std_normalization=False,samplewise_std_normalization=False,rescale=1/255.,zca_whitening=False,zca_epsilon=1e-6,rotation_range=15,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,channel_shift_range=0.,fill_mode='nearest',cval=0.,horizontal_flip=True,vertical_flip=True,preprocessing_function=None,data_format=K.image_data_format())train_generator = train_gen.flow(X,y, batch_size=1, shuffle=True, seed=None, save_to_dir='gene', save_prefix='train', save_format='png')index = 0for (batch_x, batch_y) in train_generator:index += 1if index > 50:break
- 結果
- 可以看到,每一批都有概率進行了隨機增廣。
- 代碼
補充說明
本項目重點是數據增廣,數據的多種讀入方式沒有過多提及。具體代碼上傳至我的Github,歡迎Star或者Fork。
總結
以上是生活随笔為你收集整理的Keras-数据增广的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python高级语法-详解set机制
- 下一篇: Keras-模型