国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Keras Image Data Augmentation 各參數(shù)詳解

wenyiweb / 654人閱讀

摘要:后來成,就沒有內(nèi)存錯誤了,但是代碼運行了一晚上都不結(jié)束,因此使用貓狗大戰(zhàn)圖片無法復(fù)現(xiàn)效果,這里轉(zhuǎn)發(fā)另外一個博客使用復(fù)現(xiàn)出的結(jié)果,如下圖。圖當然了,在貓狗大戰(zhàn)數(shù)據(jù)集當中不適合使用,因為一般沒有倒過來的動物。

圖像深度學(xué)習(xí)任務(wù)中,面對小數(shù)據(jù)集,我們往往需要利用Image Data Augmentation圖像增廣技術(shù)來擴充我們的數(shù)據(jù)集,而keras的內(nèi)置ImageDataGenerator很好地幫我們實現(xiàn)圖像增廣。但是面對ImageDataGenerator中眾多的參數(shù),每個參數(shù)所得到的效果分別是怎樣的呢?本文針對Keras中ImageDataGenerator的各項參數(shù)數(shù)值的效果進行了詳細解釋,為各位深度學(xué)習(xí)研究者們提供一個參考。

我們先來看看ImageDataGenerator的官方說明(https://keras.io/preprocessing/image/):

keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,

? ?samplewise_center=False,

? ?featurewise_std_normalization=False,

? ?samplewise_std_normalization=False,

? ?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,

? ?rescale=None,

? ?preprocessing_function=None,

? ?data_format=K.image_data_format())

官方提供的參數(shù)解釋因為太長就不貼出來了,大家可以直接點開上面的鏈接看英文原介紹,我們現(xiàn)在就從每一個參數(shù)開始看看它會帶來何種效果。

我們測試選用的是kaggle dogs vs cats redux 貓狗大戰(zhàn)的數(shù)據(jù)集,隨機選取了9張狗狗的照片,這9張均被resize成224×224的尺寸,如圖1:

圖1

1. featurewise

datagen = image.ImageDataGenerator(featurewise_center=True,

? ?featurewise_std_normalization=True)

featurewise_center的官方解釋:"Set input mean to 0 over the dataset, feature-wise." 大意為使數(shù)據(jù)集去中心化(使得其均值為0),而samplewise_std_normalization的官方解釋是“ Divide inputs by std of the dataset, feature-wise.”,大意為將輸入的每個樣本除以其自身的標準差。這兩個參數(shù)都是從數(shù)據(jù)集整體上對每張圖片進行標準化處理,我們看看效果如何:

圖2

與圖1原圖相比,經(jīng)過處理后的圖片在視覺上稍微“變暗”了一點。

2. samplewise

datagen = image.ImageDataGenerator(samplewise_center=True,

? ?samplewise_std_normalization=True)

samplewise_center的官方解釋為:“ Set each sample mean to 0.”,使輸入數(shù)據(jù)的每個樣本均值為0;samplewise_std_normalization的官方解釋為:“Divide each input by its std.”,將輸入的每個樣本除以其自身的標準差。這個月featurewise的處理不同,featurewise是從整個數(shù)據(jù)集的分布去考慮的,而samplewise只是針對自身圖片,效果如圖3:

圖3

看來針對自身數(shù)據(jù)分布的處理在貓狗大戰(zhàn)數(shù)據(jù)集上沒有什么意義,或許在mnist這類灰度圖上有用?讀者可以試試。

3. zca_whtening

datagen = image.ImageDataGenerator(zca_whitening=True)

zca白化的作用是針對圖片進行PCA降維操作,減少圖片的冗余信息,保留最重要的特征,細節(jié)可參看:Whitening transformation--維基百科,Whitening--斯坦福(http://ufldl.stanford.edu/wiki/index.php/Whitening)。

很抱歉的是,本人使用keras的官方演示代碼,并沒有復(fù)現(xiàn)出zca_whitening的效果,當我的圖片resize成224×224時,代碼報內(nèi)存錯誤,應(yīng)該是在計算SVD的過程中數(shù)值太大。后來resize成28×28,就沒有內(nèi)存錯誤了,但是代碼運行了一晚上都不結(jié)束,因此使用貓狗大戰(zhàn)圖片無法復(fù)現(xiàn)效果,這里轉(zhuǎn)發(fā)另外一個博客使用mnist復(fù)現(xiàn)出的結(jié)果,如下圖4。針對mnist的其它DataAugmentation結(jié)果可以看這個博客:Image Augmentation for Deep Learning With Keras,有修改意見的朋友歡迎留言。

圖4

4. rotation range

datagen = image.ImageDataGenerator(rotation_range=30)

rotation range的作用是用戶指定旋轉(zhuǎn)角度范圍,其參數(shù)只需指定一個整數(shù)即可,但并不是固定以這個角度進行旋轉(zhuǎn),而是在 [0, 指定角度] 范圍內(nèi)進行隨機角度旋轉(zhuǎn)。效果如圖5:

圖5

5. width_shift_range & height_shift_range

datagen = image.ImageDataGenerator(width_shift_range=0.5,height_shift_range=0.5)

width_shift_range & height_shift_range 分別是水平位置評議和上下位置平移,其參數(shù)可以是[0, 1]的浮點數(shù),也可以大于1,其較大平移距離為圖片長或?qū)挼某叽绯艘詤?shù),同樣平移距離并不固定為較大平移距離,平移距離在 [0, 較大平移距離] 區(qū)間內(nèi)。效果如圖6:

圖6

平移圖片的時候一般會出現(xiàn)超出原圖范圍的區(qū)域,這部分區(qū)域會根據(jù)fill_mode的參數(shù)來補全,具體參數(shù)看下文。當參數(shù)設(shè)置過大時,會出現(xiàn)圖7的情況,因此盡量不要設(shè)置太大的數(shù)值。

圖7

6. shear_range

datagen = image.ImageDataGenerator(shear_range=0.5)

shear_range就是錯切變換,效果就是讓所有點的x坐標(或者y坐標)保持不變,而對應(yīng)的y坐標(或者x坐標)則按比例發(fā)生平移,且平移的大小和該點到x軸(或y軸)的垂直距離成正比。

如圖8所示,一個黑色矩形圖案變換為藍色平行四邊形圖案。狗狗圖片變換效果如圖9所示。

圖8

圖9

7. zoom_range

datagen = image.ImageDataGenerator(zoom_range=0.5)

zoom_range參數(shù)可以讓圖片在長或?qū)挼姆较蜻M行放大,可以理解為某方向的resize,因此這個參數(shù)可以是一個數(shù)或者是一個list。當給出一個數(shù)時,圖片同時在長寬兩個方向進行同等程度的放縮操作;當給出一個list時,則代表[width_zoom_range, height_zoom_range],即分別對長寬進行不同程度的放縮。而參數(shù)大于0小于1時,執(zhí)行的是放大操作,當參數(shù)大于1時,執(zhí)行的是縮小操作。

參數(shù)大于0小于1時,效果如圖10:

圖10

參數(shù)等于4時,效果如圖11:

圖11

8. channel_shift_range

datagen = image.ImageDataGenerator(channel_shift_range=10)

channel_shift_range可以理解成改變圖片的顏色,通過對顏色通道的數(shù)值偏移,改變圖片的整體的顏色,這意味著是“整張圖”呈現(xiàn)某一種顏色,像是加了一塊有色玻璃在圖片前面一樣,因此它并不能多帶帶改變圖片某一元素的顏色,如黑色小狗不能變成白色小狗。當數(shù)值為10時,效果如圖12;當數(shù)值為100時,效果如圖13,可見當數(shù)值越大時,顏色變深的效果越強。

圖12

圖13

9. horizontal_flip & vertical_flip

datagen = image.ImageDataGenerator(horizontal_flip=True)

horizontal_flip的作用是隨機對圖片執(zhí)行水平翻轉(zhuǎn)操作,意味著不一定對所有圖片都會執(zhí)行水平翻轉(zhuǎn),每次生成均是隨機選取圖片進行翻轉(zhuǎn)。效果如圖14。

圖14

datagen = image.ImageDataGenerator(vertical_flip=True

vertical_flip是作用是對圖片執(zhí)行上下翻轉(zhuǎn)操作,和horizontal_flip一樣,每次生成均是隨機選取圖片進行翻轉(zhuǎn),效果如圖15。

圖15

當然了,在貓狗大戰(zhàn)數(shù)據(jù)集當中不適合使用vertical_flip,因為一般沒有倒過來的動物。

10. rescale

datagen = image.ImageDataGenerator(rescale= 1/255, width_shift_range=0.1)

rescale的作用是對圖片的每個像素值均乘上這個放縮因子,這個操作在所有其它變換操作之前執(zhí)行,在一些模型當中,直接輸入原圖的像素值可能會落入激活函數(shù)的“死亡區(qū)”,因此設(shè)置放縮因子為1/255,把像素值放縮到0和1之間有利于模型的收斂,避免神經(jīng)元“死亡”。

圖片經(jīng)過rescale之后,保存到本地的圖片用肉眼看是沒有任何區(qū)別的,如果我們在內(nèi)存中直接打印圖片的數(shù)值,可以看到以下結(jié)果:

圖16

可以從圖16看到,圖片像素值都被縮小到0和1之間,但如果打開保存在本地的圖片,其數(shù)值依然不變,如圖17。

圖17

應(yīng)該是在保存到本地的時候,keras把圖像像素值恢復(fù)為原來的尺度了,在內(nèi)存中查看則不會。

11. fill_mode

datagen = image.ImageDataGenerator(fill_mode="wrap", zoom_range=[4, 4])

fill_mode為填充模式,如前面提到,當對圖片進行平移、放縮、錯切等操作時,圖片中會出現(xiàn)一些缺失的地方,那這些缺失的地方該用什么方式補全呢?就由fill_mode中的參數(shù)確定,包括:“constant”、“nearest”(默認)、“reflect”和“wrap”。這四種填充方式的效果對比如圖18所示,從左到右,從上到下分別為:“reflect”、“wrap”、“nearest”、“constant”。

圖18

當設(shè)置為“constant”時,還有一個可選參數(shù),cval,代表使用某個固定數(shù)值的顏色來進行填充。圖19為cval=100時的效果,可以與圖18右下角的無cval參數(shù)的圖對比。

圖19

自己動手來測試?

這里給出一段小小的代碼,作為進行這些參數(shù)調(diào)試時的代碼,你也可以使用jupyter notebook來試驗這些參數(shù),把圖片結(jié)果打印到你的網(wǎng)頁上。

%matplotlib inline

import matplotlib.pyplot as plt

from PIL import Image

from keras.preprocessing import image

import glob

# 設(shè)置生成器參數(shù)

datagen = image.ImageDataGenerator(fill_mode="wrap", zoom_range=[4, 4])

gen_data = datagen.flow_from_directory(PATH,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? batch_size=1,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? shuffle=False,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? save_to_dir=SAVE_PATH,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? save_prefix="gen",?

? ? ? target_size=(224, 224))

# 生成9張圖

for i in range(9):

? ?gen_data.next()?

# 找到本地生成圖,把9張圖打印到同一張figure上

name_list = glob.glob(gen_path+"16/*")

fig = plt.figure()

for i in range(9):

? ?img = Image.open(name_list[i])

? ?sub_img = fig.add_subplot(331 + i)

? ?sub_img.imshow(img)

plt.show()

結(jié)語

面對小數(shù)據(jù)集時,使用DataAugmentation擴充你的數(shù)據(jù)集就變得非常重要,但在使用DataAugmentation之前,先要了解你的數(shù)據(jù)集需不需要這類圖片,如貓狗大戰(zhàn)數(shù)據(jù)集不需要上下翻轉(zhuǎn)的圖片,以及思考一下變換的程度是不是合理的,例如把目標水平偏移到圖像外面就是不合理的。多試幾次效果,再最終確定使用哪些參數(shù)。上面所有內(nèi)容已經(jīng)公布在我的github(https://github.com/JustinhoCHN/keras-image-data-augmentation)上面,附上了實驗時的jupyter notebook文件,大家可以玩一玩,have fun!

歡迎加入本站公開興趣群

商業(yè)智能與數(shù)據(jù)分析群

興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價值的辦法,實際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報表系統(tǒng)等全方位知識

QQ群:81035754

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/4669.html

相關(guān)文章

  • 深度學(xué)習(xí)精要之CapsuleNets理論與實踐(附Python代碼)

    摘要:摘要本文對膠囊網(wǎng)絡(luò)進行了非技術(shù)性的簡要概括,分析了其兩個重要屬性,之后針對手寫體數(shù)據(jù)集上驗證多層感知機卷積神經(jīng)網(wǎng)絡(luò)以及膠囊網(wǎng)絡(luò)的性能。這是一個非結(jié)構(gòu)化的數(shù)字圖像識別問題,使用深度學(xué)習(xí)算法能夠獲得最佳性能。作者信息,數(shù)據(jù)科學(xué),深度學(xué)習(xí)初學(xué)者。 摘要: 本文對膠囊網(wǎng)絡(luò)進行了非技術(shù)性的簡要概括,分析了其兩個重要屬性,之后針對MNIST手寫體數(shù)據(jù)集上驗證多層感知機、卷積神經(jīng)網(wǎng)絡(luò)以及膠囊網(wǎng)絡(luò)的性...

    luffyZh 評論0 收藏0
  • 提高深度學(xué)習(xí)性能的四種方式

    摘要:可以參見以下相關(guān)閱讀創(chuàng)造更多數(shù)據(jù)上一小節(jié)說到了有了更多數(shù)據(jù),深度學(xué)習(xí)算法通常會變的更好。 導(dǎo)語我經(jīng)常被問到諸如如何從深度學(xué)習(xí)模型中得到更好的效果的問題,類似的問題還有:我如何提升準確度如果我的神經(jīng)網(wǎng)絡(luò)模型性能不佳,我能夠做什么?對于這些問題,我經(jīng)常這樣回答,我并不知道確切的答案,但是我有很多思路,接著我會列出了我所能想到的所有或許能夠給性能帶來提升的思路。為避免一次次羅列出這樣一個簡單的列表...

    JessYanCoding 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<