最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

keras實現(xiàn)圖像預(yù)處理并生成一個generator的案例

 更新時間:2020年06月17日 11:34:16   作者:月下花弄影  
這篇文章主要介紹了keras實現(xiàn)圖像預(yù)處理并生成一個generator的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

如下所示:

接下來,給出我自己目前積累的代碼,從目錄中自動讀取圖像,并產(chǎn)生generator:

第一步:建立好目錄結(jié)構(gòu)和圖像

可以看到目錄images_keras_dict下有次級目錄,次級目錄下就直接包含照片了

**第二步:寫代碼建立預(yù)處理程序

# 先進行預(yù)處理圖像
train_datagen = ImageDataGenerator(rescale=1./255, 
                  rotation_range=50,
                  height_shift_range=[-0.005, 0, 0.005],
                  width_shift_range=[-0.005, 0, 0.005],
                  horizontal_flip=True, 
                  fill_mode='reflect')
#再對預(yù)處理圖像指定從目錄中讀取數(shù)據(jù),可以看到我的目錄最核心的地方是images_keras_dict(可以對照上一張圖片)
train_generator = train_datagen.flow_from_directory('AgriculturalDisease_trainingset/images_keras_dict',
                          target_size=(height, width), batch_size=16)

val_datagen = ImageDataGenerator(rescale=1./255)
val_generator = val_datagen.flow_from_directory('AgriculturalDisease_validationset/images_keras_dict', target_size=(height, width),
                        batch_size=64)

save_weights = ModelCheckpoint(filepath='models/best_weights.hdf5',monitor='val_loss', verbose=1, save_best_only=True)

# 最后在fit_generator 中放入生成器的函數(shù)train_generator
model.fit_generator(train_generator,
          steps_per_epoch=times_train,
          verbose=1,
          epochs=300,
          initial_epoch=0,
          validation_data=val_generator,
          validation_steps=times_val,
          callbacks=[save_weights, TrainValTensorBoard(write_graph=False)])

第三步:寫入fit_generator進行訓(xùn)練

已經(jīng)寫在上一個代碼中。

第四步:寫predict_generator進行預(yù)測**

首先我們需要建立同樣的目錄結(jié)構(gòu)。把包含預(yù)測圖片的次級目錄放在一個文件夾下,這個文件夾名就是關(guān)鍵文件夾。

這里我的關(guān)鍵文件夾是test文件夾

# 建立預(yù)處理
predict_datagen = ImageDataGenerator(rescale=1./255)
predict_generator = predict_datagen.flow_from_directory('AgriculturalDisease_validationset/test',
                            target_size=(height, width), batch_size=128)
# predict_generator.reset()
# 利用predict_generator進行預(yù)測
pred = model.predict_generator(predict_generator, max_queue_size=10, workers=1, verbose=1)

# 利用幾個屬性來讀取文件夾和對應(yīng)的分類
train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=40, fill_mode='wrap')
train_generator = train_datagen.flow_from_directory('new_images', target_size=(height, width), batch_size=96)
labels = (train_generator.class_indices)
labels = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class_indices]

# 還可以知道圖片的名字
filenames = predict_generator.filenames

補充知識:[TensorFlow 2] [Keras] fit()、fit_generator() 和 train_on_batch() 分析與應(yīng)用

前言

是的,除了水報錯文,我也來寫點其他的。本文主要介紹Keras中以下三個函數(shù)的用法:

1、fit()

2、fit_generator()

3、train_on_batch()

當(dāng)然,與上述三個函數(shù)相似的evaluate、predict、test_on_batch、predict_on_batch、evaluate_generator和predict_generator等就不詳細(xì)說了,舉一反三嘛。

環(huán)境

本文的代碼是在以下環(huán)境下進行測試的:

Windows 10

Python 3.6

TensorFlow 2.0 Alpha

異同

大家用Keras也就圖個簡單快捷,但是在享受簡單快捷的時候,也常常需要些定制化需求,除了model.fit(),有時候model.fit_generator()和model.train_on_batch()也很重要。

那么,這三個函數(shù)有什么異同呢?Adrian Rosebrock [1] 有如下總結(jié):

當(dāng)你使用.fit()函數(shù)時,意味著如下兩個假設(shè):

訓(xùn)練數(shù)據(jù)可以 完整地 放入到內(nèi)存(RAM)里

數(shù)據(jù)已經(jīng)不需要再進行任何處理了

這兩個原因解釋的非常好,之前我運行程序的時候,由于數(shù)據(jù)集太大(實際中的數(shù)據(jù)集顯然不會都像 TensorFlow 官方教程里經(jīng)常使用的 MNIST 數(shù)據(jù)集那樣小),一次性加載訓(xùn)練數(shù)據(jù)到fit()函數(shù)里根本行不通:

history = model.fit(train_data, train_label) // Bomb!!!

于是我想,能不能先加載一個batch訓(xùn)練,然后再加載一個batch,如此往復(fù)。于是我就注意到了fit_generator()函數(shù)。什么時候該使用fit_generator函數(shù)呢?Adrian Rosebrock 的總結(jié)道:

內(nèi)存不足以一次性加載整個訓(xùn)練數(shù)據(jù)的時候

需要一些數(shù)據(jù)預(yù)處理(例如旋轉(zhuǎn)和平移圖片、增加噪音、擴大數(shù)據(jù)集等操作)

在生成batch的時候需要更多的處理

對于我自己來說,除了數(shù)據(jù)集太大的緣故之外,我需要在生成batch的時候,對輸入數(shù)據(jù)進行padding,所以fit_generator()就派上了用場。下面介紹如何使用這三種函數(shù)。

fit()函數(shù)

fit()函數(shù)其實沒什么好說的,大家在看TensorFlow教程的時候已經(jīng)見識過了。此外插一句話,tf.data.Dataset對不規(guī)則的序列數(shù)據(jù)真是不友好。

import tensorflow as tf
model = tf.keras.models.Sequential([
 ... // 你的模型
])
model.fit(train_x, // 訓(xùn)練輸入
  train_y, // 訓(xùn)練標(biāo)簽
  epochs=5 // 訓(xùn)練5輪
)

fit_generator()函數(shù)

fit_generator()函數(shù)就比較重要了,也是本文討論的重點。fit_generator()與fit()的主要區(qū)別就在一個generator上。之前,我們把整個訓(xùn)練數(shù)據(jù)都輸入到fit()里,我們也不需要考慮batch的細(xì)節(jié);現(xiàn)在,我們使用一個generator,每次生成一個batch送給fit_generator()訓(xùn)練。

def generator(x, y, b_size):
 ... // 處理函數(shù)

model.fit_generator(generator(train_x, train_y, batch_size), 
   step_per_epochs=np.ceil(len(train_x)/batch_size), 
   epochs=5
)

從上述代碼中,我們發(fā)現(xiàn)有兩處不同:

一個我們自定義的generator()函數(shù),作為fit_generator()函數(shù)的第一個參數(shù);

fit_generator()函數(shù)的step_per_epochs參數(shù)

自定義的generator()函數(shù)

該函數(shù)即是我們數(shù)據(jù)的生成器,在訓(xùn)練的時候,fit_generator()函數(shù)會不斷地執(zhí)行g(shù)enerator()函數(shù),獲取一個個的batch。

def generator(x, y, b_size):
 """Generates batch and batch and batch then feed into models.
 Args:
 x: input data;
 y: input labels;
 b_size: batch_size.
 Yield:
 (batch_x, batch_label): batched x and y.
 """
 while 1: // 死循環(huán)
 idx = ...
 batch_x = ...
 batch_y = ...
 ... // 任何你想要對這個`batch`中的數(shù)據(jù)執(zhí)行的操作
 yield (batch_x, batch_y)

需要注意的是,不要使用return或者exit。

step_per_epochs參數(shù)

由于generator()函數(shù)的循環(huán)沒有終止條件,fit_generator也不知道一個epoch什么時候結(jié)束,所以我們需要手動指定step_per_epochs參數(shù),一般的數(shù)值即為len(y)//batch_size。如果數(shù)據(jù)集大小不能整除batch_size,而且你打算使用最后一個batch的數(shù)據(jù)(該batch比batch_size要?。?,此時使用np.ceil(len(y)/batch_size)。

keras.utils.Sequence類(2019年6月10日更新)

除了寫generator()函數(shù),我們還可以利用keras.utils.Sequence類來生成batch。先扔代碼:

class Generator(keras.utils.Sequence):
 def __init__(self, x, y, b_size):
 self.x, self.y = x, y
 self.batch_size = b_size
 
 def __len__(self):
 return math.ceil(len(self.y)/self.batch_size

 def __getitem__(self, idx):
 b_x = self.x[idx*self.batch_size:(idx+1)*self.batch_size]
 b_y = self.y[idx*self.batch_size:(idx+1)*self.batch_size]
 ... // 對`batch`的其余操作
 return np.array(b_x), np.array(b_y)
 
 def on_epoch_end(self):
 """執(zhí)行完一個`epoch`之后,還可以做一些其他的事情!"""
 ...

我們首先定義__init__函數(shù),讀取訓(xùn)練集數(shù)據(jù),然后定義__len__函數(shù),返回一個epoch中需要執(zhí)行的step數(shù)(此時在fit_generator()函數(shù)中就不需要指定steps_per_epoch參數(shù)了),最后定義__getitem__函數(shù),返回一個batch的數(shù)據(jù)。代碼如下:

train_generator = Generator(train_x, train_y, batch_size)
val_generator = Generator(val_x, val_y, batch_size)

model.fit_generator(generator=train_generator, 
   epochs=3197747, 
   validation_data=val_generator
   )

根據(jù)官方 [2] 的說法,使用Sequence類可以保證在多進程的情況下,每個epoch中的樣本只會被訓(xùn)練一次??傊?,使用keras.utils.Sequence也是很方便的啦!

train_on_batch()函數(shù)

train_on_batch()函數(shù)接受一個batch的輸入和標(biāo)簽,然后開始反向傳播,更新參數(shù)等。大部分情況下你都不需要用到train_on_batch()函數(shù),除非你有著充足的理由去定制化你的模型的訓(xùn)練流程。

結(jié)語

本文到此結(jié)束啦!希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python連接達(dá)夢數(shù)據(jù)庫的實現(xiàn)示例

    Python連接達(dá)夢數(shù)據(jù)庫的實現(xiàn)示例

    本文主要介紹了Python連接達(dá)夢數(shù)據(jù)庫的實現(xiàn)示例,dmPython是DM提供的依據(jù)Python DB API version 2.0中API使用規(guī)定而開發(fā)的數(shù)據(jù)庫訪問接口,使Python應(yīng)用程序能夠?qū)M數(shù)據(jù)庫進行訪問
    2023-12-12
  • python常用運維腳本實例小結(jié)

    python常用運維腳本實例小結(jié)

    這篇文章主要介紹了python常用運維腳本實例小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 將Django項目部署到CentOs服務(wù)器中

    將Django項目部署到CentOs服務(wù)器中

    今天小編就為大家分享一篇關(guān)于將Django項目部署到CentOs服務(wù)器中的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Pytorch 使用CNN圖像分類的實現(xiàn)

    Pytorch 使用CNN圖像分類的實現(xiàn)

    這篇文章主要介紹了Pytorch 使用CNN圖像分類的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python中setuptools的作用是什么

    python中setuptools的作用是什么

    在本篇文章里小編給大家分享的是一篇關(guān)于python中setuptools的作用以及相關(guān)用法,需要的朋友們可以跟著學(xué)習(xí)下。
    2020-06-06
  • 詳解Scrapy Redis入門實戰(zhàn)

    詳解Scrapy Redis入門實戰(zhàn)

    這篇文章主要介紹了詳解Scrapy Redis入門實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python小程序爬取今日新聞拿走就能用

    Python小程序爬取今日新聞拿走就能用

    這篇文章主要教大家怎樣實現(xiàn)一個Python小程序,爬取今日新聞,文中給出了詳細(xì)的示例代碼,拿走就能用,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 使用python模塊plotdigitizer摳取論文圖片中的數(shù)據(jù)實例詳解

    使用python模塊plotdigitizer摳取論文圖片中的數(shù)據(jù)實例詳解

    這篇文章主要介紹了使用python模塊plotdigitizer摳取論文圖片中的數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Python無頭爬蟲下載文件的實現(xiàn)

    Python無頭爬蟲下載文件的實現(xiàn)

    這篇文章主要介紹了Python無頭爬蟲下載文件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python異常對象Exception基礎(chǔ)類異常捕捉

    Python異常對象Exception基礎(chǔ)類異常捕捉

    這篇文章主要為大家介紹了Python異常對象異常捕捉及Exception基礎(chǔ)類,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論

兖州市| 昭通市| 商河县| 绥化市| 聊城市| 榕江县| 民勤县| 盐山县| 长海县| 尚志市| 泸水县| 甘肃省| 疏附县| 乌兰县| 佳木斯市| 青川县| 江永县| 开封市| 会宁县| 堆龙德庆县| 信丰县| 客服| 华蓥市| 福安市| 民勤县| 米脂县| 桃源县| 扎赉特旗| 黎城县| 建瓯市| 甘泉县| 郁南县| 宜川县| 运城市| 依安县| 郸城县| 张掖市| 广西| 来凤县| 白玉县| 邢台县|