chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)集使用的Kaggle中辨別狗狗種類的競賽

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-07-04 09:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編者按:在人工智能的各個(gè)領(lǐng)域,深度學(xué)習(xí)框架正變得越來越高效,其中圖像分類更是得益于此。在這篇文章中,作者devforfu嘗試用Keras庫將現(xiàn)成的ImageNet和預(yù)訓(xùn)練深度模型應(yīng)用到圖像分類框架上。他搭建了一款模型,可以辨別圖片中狗狗的種類。

數(shù)據(jù)集

在這個(gè)項(xiàng)目中,數(shù)據(jù)集使用的Kaggle中辨別狗狗種類的競賽,其中包含了將近10000張經(jīng)過標(biāo)記的圖像,大約涵蓋了120種狗狗,除此之外還有數(shù)量相當(dāng)?shù)臏y試數(shù)據(jù)。一般來說,這些圖像的分辨率、縮放程度都是不同的,其中也可能不止有一只狗,光線也會(huì)有差別。下面是數(shù)據(jù)集中的幾張圖像。

數(shù)據(jù)集中各種種類的狗狗數(shù)量大致相同,平均每種狗狗有59張圖像。以下是數(shù)據(jù)集中各種類狗狗的數(shù)量分布:

正如我們簡單分析過的,經(jīng)過分析的數(shù)據(jù)集對(duì)深度學(xué)習(xí)框架來說并不復(fù)雜,并且有很多簡單結(jié)構(gòu)。所以我們可以從數(shù)據(jù)集中得到各種類精確的結(jié)果。

Bottleneck特征

運(yùn)用預(yù)訓(xùn)練深度學(xué)習(xí)模型最直接的策略之一是將它們看作特征提取器。在現(xiàn)代神經(jīng)網(wǎng)絡(luò)架構(gòu)發(fā)展之前,圖像特征是手動(dòng)過濾的,例如Canny edge detectors中的Sobel operator。運(yùn)算符(operator)是一個(gè)3×3的矩陣,向其中輸入原始圖像后,它會(huì)將其轉(zhuǎn)化成一個(gè)正方形的圖塊,每個(gè)小方塊都會(huì)轉(zhuǎn)換成單一值。

Sober運(yùn)算符在單一圖像通道上的大致表示

如今的技術(shù)可以從數(shù)據(jù)中直接自動(dòng)提取特征。為此,我們用的是卷積層。每個(gè)卷積層都是具有隨機(jī)初始值的正方形矩陣堆棧。這些值在訓(xùn)練過程中被更新,最終會(huì)收斂到適合數(shù)據(jù)集的特殊過濾器上。

下圖展示了深度學(xué)習(xí)分類器作為特征模塊序列的大致表示,將圖像從原始的像素表示轉(zhuǎn)換成更加抽象的表示:

如上圖,一個(gè)沒有頂層圖層的深度學(xué)習(xí)網(wǎng)絡(luò)為每張通過網(wǎng)絡(luò)的圖像生成了一套高水平的特征。這些特征被稱為bottleneck特征。深度模型自動(dòng)推理出這些抽象的圖像特征,我們可以用它們以及任意“經(jīng)典”的機(jī)器學(xué)習(xí)算法來預(yù)測目標(biāo)。

注意:本文所提到的所有模型和特征提取器都是在單一1080Ti GPU上執(zhí)行的。如果用CPU的話,在有數(shù)千張圖片的數(shù)據(jù)集上提取特征可能要耗費(fèi)好幾個(gè)小時(shí)。

因此,想從圖片集中提取特征,研究者需要下載一個(gè)有預(yù)訓(xùn)練權(quán)重的深度網(wǎng)絡(luò),但是沒有頂層,之后為這些圖像”做預(yù)測“。示例如下:

classFeaturesExtractor:

"""Runs pretrained model without top layers on dataset and saves generated

bottleneck features onto disk.

"""

def __init__(self, build_fn, preprocess_fn, source,

target_size=(299, 299, 3), batch_size=128):

self.build_fn = build_fn

self.preprocess_fn = preprocess_fn

self.source = source

self.target_size = target_size

self.batch_size = batch_size

def __call__(self, folder, filename, pool='avg'):

model = self.build_fn(weights='imagenet', include_top=False, pooling=pool)

stream = self.source(

folder=folder, target_size=self.target_size,

batch_size=self.batch_size, infinite=False)

batches = []

with tqdm.tqdm_notebook(total=stream.steps_per_epoch) as bar:

for x_batch, y_batch in stream:

x_preprocessed = self.preprocess_fn(x_batch)

batch = model.predict_on_batch(x_preprocessed)

batches.append(batch)

bar.update(1)

all_features = np.vstack(batches)

np.save(filename, all_features)

return filename

代碼的第15行創(chuàng)造了一個(gè)沒有頂層的Keras模型,但是具有預(yù)先安裝的ImageNet權(quán)重。之后,22—25行對(duì)所有圖片進(jìn)行了迭代,并將它們轉(zhuǎn)化成特征數(shù)組。之后在第29行,數(shù)組被永久存儲(chǔ)。注意,我們并不一次性下載所有可用圖片,而是創(chuàng)造一個(gè)生成器,替代從硬盤中讀取文檔。這樣操作可以允許在沒有足夠RAM的情況下處理大型數(shù)據(jù)集,因?yàn)閳D片從JPEG轉(zhuǎn)換成PNG格式會(huì)消耗很大內(nèi)存。

之后,我們可以用FeatureExtractor:

from keras.applications import inception_v3

extractor = FeatureExtractor(

build_fn=inception_v3.InceptionV3,

preprocess_fn=inception_v3.preprocess_fn,

source=create_files_iterator_factory())

extractor(folder_name, output_file)

Bootstrapped SGD

隨機(jī)梯度下降(SGD)是一種簡單高效的在凸形損失函數(shù)對(duì)線性分類器進(jìn)行判別學(xué)習(xí)的方法。簡單地講,將圖片特征的數(shù)組和他們的標(biāo)簽輸入算法中,訓(xùn)練一個(gè)多種類的分類器,從而判斷狗狗的種類。

雖然現(xiàn)在已有了一個(gè)特殊的SGD分類器,但是還不夠穩(wěn)定。對(duì)算法運(yùn)行多次之后可能會(huì)得到不同精度的結(jié)果,因?yàn)樗惴ㄔ趯W(xué)習(xí)開始時(shí)對(duì)參數(shù)進(jìn)行了隨機(jī)初始化。

為了讓訓(xùn)練過程更加穩(wěn)定并且可重復(fù),為了達(dá)到最佳精度,我們將用bagging擴(kuò)展SGD,這種方法可以訓(xùn)練SGD分類器的集合,并且能從多個(gè)估算器中對(duì)反饋取平均值,得出最終的預(yù)測。下圖是這一過程的展示:

在SGD分類器上應(yīng)用bagging技術(shù)

注意,我們不僅僅是將原始數(shù)據(jù)集拆分成子集,而是將不同特征的自己放入不同分類器訓(xùn)練。另外,我們還應(yīng)用了一個(gè)“變量閾值轉(zhuǎn)換器(variance threshold transformer)”,將值接近于0的bottleneck特征過濾掉,因?yàn)樯疃葘W(xué)習(xí)網(wǎng)絡(luò)提取的特征向量似乎非常稀疏。

下面的代碼展示了如何創(chuàng)建一個(gè)SGD分類器,以及如何計(jì)算能反映模型質(zhì)量的預(yù)測標(biāo)準(zhǔn):

def sgd(x_train, y_train, x_valid, y_valid, variance_threshold=0.1):

threshold = VarianceThreshold(variance_threshold)

sgd_classifier = SGDClassifier(

alpha=1./len(x_train),

class_weight='balanced',

loss='log', penalty='elasticnet',

fit_intercept=False, tol=0.001, n_jobs=-1)

bagging = BaggingClassifier(

base_estimator=sgd_classifier,

bootstrap_features=True,

n_jobs=-1, max_samples=0.5, max_features=0.5)

x_thresh = threshold.fit_transform(x_train)

bagging.fit(x_thresh, y_train)

train_metrics = build_metrics(bagging, x_thresh, y_train)

x_thresh = threshold.transform(x_valid)

valid_metrics = build_metrics(bagging, x_thresh, y_valid)

return bagging, train_metrics, valid_metrics

def build_metrics(model, X, y):

probs = model.predict_proba(X)

preds = np.argmax(probs, axis=1)

metrics = dict(

probs=probs,

preds=preds,

loss=log_loss(y, probs),

accuracy=np.mean(preds == y))

return namedtuple('Predictions', metrics.keys())(**metrics)

第四行是創(chuàng)建一個(gè)SGD分類器的示例,其中有一對(duì)正則化參數(shù)和運(yùn)用CPU訓(xùn)練模型的權(quán)限。第十行創(chuàng)建了一組分類器,15—20行訓(xùn)練了分類器,并計(jì)算了幾個(gè)表現(xiàn)標(biāo)準(zhǔn)。

SGD基準(zhǔn)

現(xiàn)在有很多可用的預(yù)訓(xùn)練深度學(xué)習(xí)結(jié)構(gòu),它們在我們的數(shù)據(jù)集上用作特征提取器時(shí)是否表現(xiàn)得同樣好?下面讓我們來看看。

我們選取了以下三種結(jié)構(gòu)來訓(xùn)練SGD分類器:

InceptionV3

InceptionResNetV2

Xception

Keras中都包含這三種架構(gòu),每個(gè)分類器在9200個(gè)樣本上進(jìn)行訓(xùn)練并在1022個(gè)圖像上進(jìn)行驗(yàn)證。下表展示了訓(xùn)練和驗(yàn)證自己的預(yù)測結(jié)果。

這個(gè)分?jǐn)?shù)還不錯(cuò)!對(duì)于如此簡單的實(shí)現(xiàn)過程,這個(gè)結(jié)果已經(jīng)很令人滿意了。

對(duì)預(yù)訓(xùn)練模型進(jìn)行微調(diào)

在SGD分類器上對(duì)bottleneck特征的訓(xùn)練已經(jīng)表示,這些特征能達(dá)到良好的預(yù)測效果。然而,我們能夠通過重新訓(xùn)練頂層、對(duì)模型進(jìn)行微調(diào)來提高分類器的精度呢?同樣,我們能否通過對(duì)訓(xùn)練集的預(yù)處理,讓模型在過擬合上更穩(wěn)定,并且提高它的泛化能力?

微調(diào)的目的是讓預(yù)訓(xùn)練模型適應(yīng)數(shù)據(jù)。大多數(shù)情況下,重新使用的模型都會(huì)在含有不同種類的數(shù)據(jù)集上訓(xùn)練。所以,你需要將網(wǎng)絡(luò)頂端的分類層替換掉。如圖所示:

微調(diào)過程示意

新頂層的訓(xùn)練過程和之前的并沒什么不同,我們只用了不同的分類器。但是,我們可以用數(shù)據(jù)增強(qiáng)的方式提高網(wǎng)絡(luò)的泛化能力。每個(gè)微調(diào)過的網(wǎng)絡(luò)都用稍微改動(dòng)過的圖像訓(xùn)練(例如稍微旋轉(zhuǎn)、縮放等)。

微調(diào)基準(zhǔn)

為了測試微調(diào)后的精確度,我們將添加一個(gè)結(jié)構(gòu):

ResNet50

InceptionV3

Xception

InceptionResNetV2

每個(gè)模型進(jìn)行100次迭代測試,每次有128個(gè)樣本:

from keras.optimizers import SGD

sgd = SGD(lr=0.001, momentum=0.99, nesterov=True)

下面是數(shù)據(jù)增強(qiáng)中參數(shù)的選擇:

from keras.preprocessing.image importImageDataGenerator

transformer = ImageDataGenerator(

width_shift_range=0.2,

height_shift_range=0.2,

zoom_range=0.2,

rotation_range=30,

vertical_flip=False,

horizontal_flip=True)

最后,模型訓(xùn)練過程的實(shí)現(xiàn):

from keras.models importModel

from keras.layers importDense

base = create_model(include_top=False)

x = Dense(120, activation='softmax')(x)

model = Model(inputs=base.inputs, outputs=x)

model.compile(optimizer=sgd, loss='categorical_crossentropy')

train_gen = create_training_generator()

valid_gen = create_validation_generator()

model.fit_generator(train_gen, validation_data=valid_gen)

下表是訓(xùn)練后模型的表現(xiàn):

與之前的表現(xiàn)相比并沒有很大的提升,但是數(shù)據(jù)增強(qiáng)和預(yù)訓(xùn)練InceptionResNetV2網(wǎng)絡(luò)頂部單一密集層的表現(xiàn)卻是最好的。

實(shí)際案例

讓我們看看模型在陌生圖像上的表現(xiàn)到底如何吧,下圖是數(shù)據(jù)集之外的網(wǎng)絡(luò)圖片,模型預(yù)測了五種最可能的狗狗品種:

模型對(duì)有些貓或狗的種類并不完全肯定,也就是說我們可以用它當(dāng)做狗狗探測器。

結(jié)論

現(xiàn)成的模型在這個(gè)項(xiàng)目中的表現(xiàn)十分不錯(cuò),在狗狗分類數(shù)據(jù)集上訓(xùn)練之后就能達(dá)到精確的結(jié)果。我相信如果再增加更多的頂層、“解鎖”更多隱藏層、加入正則化技術(shù)和更多優(yōu)化,模型的表現(xiàn)會(huì)更好。

但是這一實(shí)驗(yàn)的缺點(diǎn)是選擇的數(shù)據(jù)集是從ImageNet上挑選的狗類圖片,也就是說我們的網(wǎng)絡(luò)可能之前就見過它們了。關(guān)于這一問題論智君也曾報(bào)道過數(shù)據(jù)集的重復(fù)使用所帶來的副作用,可能會(huì)引起一些偏差。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1811

    文章

    49497

    瀏覽量

    258189
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1229

    瀏覽量

    25912
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5586

    瀏覽量

    123639

原文標(biāo)題:拉布拉多還是巴哥?用Keras輕松識(shí)別狗子的品種

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Kaggle機(jī)器學(xué)習(xí)/數(shù)據(jù)科學(xué)現(xiàn)狀調(diào)查

    Kaggle 是互聯(lián)網(wǎng)上最著名的數(shù)據(jù)科學(xué)競賽平臺(tái)之一,今年 3 月 8 日,這家機(jī)構(gòu)被谷歌收購,6 月 6 日又宣布用戶數(shù)量超過了 100 萬人。
    的頭像 發(fā)表于 06-29 09:11 ?1w次閱讀
    <b class='flag-5'>Kaggle</b>機(jī)器學(xué)習(xí)/<b class='flag-5'>數(shù)據(jù)</b>科學(xué)現(xiàn)狀調(diào)查

    基于onepanel使用kaggle api提交結(jié)果和下載數(shù)據(jù)的步驟

    在onepanel上使用kaggle api提交結(jié)果和下載數(shù)據(jù)
    發(fā)表于 04-22 11:00

    kaggle住宅價(jià)格預(yù)測

    kaggle房價(jià)實(shí)戰(zhàn)總結(jié)
    發(fā)表于 08-13 10:08

    kaggle泰坦尼克生存預(yù)測實(shí)施步驟

    數(shù)據(jù)分析-kaggle泰坦尼克號(hào)生存率分析(入門)個(gè)人總結(jié)
    發(fā)表于 09-05 15:36

    Hfut | 競賽

    Hfut | 競賽,某電摸魚選手的競賽 劃水 經(jīng)驗(yàn)分享前言: 寒假居家時(shí)偶然刷到一篇題為《你不輸出,怎么進(jìn)步》 的文章,頗為認(rèn)同。對(duì)照自己,雖然零星寫過幾篇技術(shù)博客,但從未嘗試過
    發(fā)表于 07-16 06:49

    如何辨別種類型的接口

    【IT168 應(yīng)用】電源的功率一直是玩家們關(guān)注的焦點(diǎn),可對(duì)于剛涉足DIY領(lǐng)域的用戶來說,自己組裝DIY一臺(tái)電腦拿才是最令人興奮的事情。組裝電腦少不了要接各種各樣的線材,那么如何辨別種類型的接口
    發(fā)表于 11-11 07:46

    用這個(gè)可以知道你的狗狗每天的活動(dòng)

    的使用,Tracy Tracker系統(tǒng)能夠不斷學(xué)習(xí)狗狗的行為模式,讓預(yù)測結(jié)果越來越準(zhǔn)確。 Tracy Tracker的人工智能算法可以監(jiān)控狗狗的睡眠、吃飯、喝水習(xí)慣,隨后對(duì)這些檢測到的數(shù)據(jù)
    的頭像 發(fā)表于 03-30 17:02 ?7851次閱讀

    Kaggle沒有否認(rèn)將被谷歌收購

    科技博客TechCrunch援引消息人士報(bào)道稱,谷歌正在收購Kaggle —— 一個(gè)舉辦數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)競賽的平臺(tái)。有關(guān)此次交易的詳細(xì)信息目前還未披露,但是考慮到谷歌本周在舊金山召開Cloud Next云技術(shù)大會(huì),官方消息很可
    發(fā)表于 05-08 08:58 ?814次閱讀

    如何很容易地將數(shù)據(jù)共享為Kaggle數(shù)據(jù)

    雖然一個(gè)更大的、機(jī)構(gòu)層面的努力是理想的,但與此同時(shí),我們也可以利用開源,免費(fèi)使用Kaggle 這樣的資源。我認(rèn)為 Kaggle 有可能做 Github 在早期科學(xué)重現(xiàn)性方面所做的事情。如果共享數(shù)據(jù)
    的頭像 發(fā)表于 06-29 15:06 ?6235次閱讀
    如何很容易地將<b class='flag-5'>數(shù)據(jù)</b>共享為<b class='flag-5'>Kaggle</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>集</b>

    Kaggle創(chuàng)始人Goldbloom:我們是這樣做數(shù)據(jù)科學(xué)競賽

    所以說,在kaggle里有各種各樣的問題,包括不同的行業(yè)、不同的方面,這里面非常有意思的一點(diǎn),就是所有的問題,都可以用差不多的方法來進(jìn)行解決。當(dāng)我們有兩個(gè)數(shù)據(jù)的時(shí)候,一個(gè)是訓(xùn)練,一
    的頭像 發(fā)表于 01-23 15:16 ?2672次閱讀

    騰訊宣布其人工智能球隊(duì)獲首屆谷歌足球Kaggle競賽冠軍

    12月30日,騰訊宣布其人工智能球隊(duì)摘得了首屆谷歌足球Kaggle競賽冠軍。這是一場由Google Research與英超曼城俱樂部在Kaggle平臺(tái)上聯(lián)合舉辦的足球AI比賽,經(jīng)過多輪角逐,騰訊AI Lab研發(fā)的絕悟WeKick
    的頭像 發(fā)表于 12-30 15:58 ?2171次閱讀

    Kaggle神器LightGBM的最全解讀

    模型具有訓(xùn)練效果好、不易過擬合等優(yōu)點(diǎn)。GBDT不僅在工業(yè)界應(yīng)用廣泛,通常被用于多分類、點(diǎn)擊率預(yù)測、搜索排序等任務(wù);在各種數(shù)據(jù)挖掘競賽也是致命武器,據(jù)統(tǒng)計(jì)Kaggle上的比賽有一半以上
    的頭像 發(fā)表于 01-05 14:27 ?3380次閱讀
    <b class='flag-5'>Kaggle</b>神器LightGBM的最全解讀

    如何從13個(gè)Kaggle比賽挑選出的最好的Kaggle kernel

    。機(jī)器學(xué)習(xí)和圖像分類也不例外,工程師們可以通過參加像Kaggle這樣的競賽來展示最佳實(shí)踐。在這篇文章,我將給你很多資源來學(xué)習(xí),聚焦于從13個(gè)Kaggle比賽
    的頭像 發(fā)表于 06-27 09:26 ?2320次閱讀

    PyTorch教程-5.7. 在 Kaggle 上預(yù)測房價(jià)

    Kaggle 競賽將所有這些知識(shí)付諸實(shí)踐。房價(jià)預(yù)測競賽是一個(gè)很好的起點(diǎn)。數(shù)據(jù)相當(dāng)通用,沒有表現(xiàn)出可能需要專門模型(如音頻或視頻可能)的奇異結(jié)構(gòu)。該
    的頭像 發(fā)表于 06-05 15:43 ?1077次閱讀
    PyTorch教程-5.7. 在 <b class='flag-5'>Kaggle</b> 上預(yù)測房價(jià)

    python怎么做數(shù)據(jù)清洗?

    該指南使用的數(shù)據(jù)Kaggle 競賽 Sberbank 俄羅斯房地產(chǎn)價(jià)值預(yù)測競賽數(shù)據(jù)(該項(xiàng)目
    發(fā)表于 08-21 12:33 ?679次閱讀
    python怎么做<b class='flag-5'>數(shù)據(jù)</b>清洗?