欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Keras中的ImageDataGenerator進(jìn)行批次讀圖方式

 更新時(shí)間:2020年06月17日 11:50:08   作者:bendaxi  
這篇文章主要介紹了使用Keras中的ImageDataGenerator進(jìn)行批次讀圖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

ImageDataGenerator位于keras.preprocessing.image模塊當(dāng)中,可用于做數(shù)據(jù)增強(qiáng),或者僅僅用于一個(gè)批次一個(gè)批次的讀進(jìn)圖片數(shù)據(jù).一開始以為ImageDataGenerator是用來做數(shù)據(jù)增強(qiáng)的,但我的目的只是想一個(gè)batch一個(gè)batch的讀進(jìn)圖片而已,所以一開始沒用它,后來發(fā)現(xiàn)它是有這個(gè)功能的,而且使用起來很方便.

ImageDataGenerator類包含了如下參數(shù):(keras中文教程)

ImageDataGenerator(featurewise_center=False, #布爾值。將輸入數(shù)據(jù)的均值設(shè)置為 0,逐特征進(jìn)行
 samplewise_center=False, #布爾值。將每個(gè)樣本的均值設(shè)置為 0
 featurewise_std_normalization=False, #布爾值。將輸入除以數(shù)據(jù)標(biāo)準(zhǔn)差,逐特征進(jìn)行
 samplewise_std_normalization=False, #布爾值。將每個(gè)輸入除以其標(biāo)準(zhǔn)差
 zca_whitening=False, #是否進(jìn)行ZAC白化
 zca_epsilon=1e-06, #ZCA 白化的 epsilon 值
 rotation_range=0, #整數(shù)。隨機(jī)旋轉(zhuǎn)的度數(shù)范圍
 width_shift_range=0.0, 
 height_shift_range=0.0, 
 brightness_range=None, 
 shear_range=0.0, #浮點(diǎn)數(shù)。剪切強(qiáng)度(以弧度逆時(shí)針方向剪切角度)
 zoom_range=0.0, #浮點(diǎn)數(shù) 或 [lower, upper]。隨機(jī)縮放范圍。如果是浮點(diǎn)數(shù),[lower, upper] = [1-zoom_range, 1+zoom_range]。
 channel_shift_range=0.0, #浮點(diǎn)數(shù)。隨機(jī)通道轉(zhuǎn)換的范圍
 fill_mode='nearest', #輸入邊界以外的點(diǎn)的模式填充
 cval=0.0, #當(dāng) fill_mode = "constant",邊界點(diǎn)的填充值
 horizontal_flip=False, #隨機(jī)水平翻轉(zhuǎn)
 vertical_flip=False, #隨機(jī)垂直翻
 rescale=None, #默認(rèn)為 None。如果是 None 或 0,不進(jìn)行縮放,否則將數(shù)據(jù)乘以所提供的值(在應(yīng)用任何其他轉(zhuǎn)換之前)
 preprocessing_function=None, #應(yīng)用于每個(gè)輸入的函數(shù)。這個(gè)函數(shù)會(huì)在任何其他改變之前運(yùn)行。這個(gè)函數(shù)需要一個(gè)參數(shù):一張圖像(秩為 3 的 Numpy 張量),并且應(yīng)該輸出一個(gè)同尺寸的 Numpy 張量。
 data_format=None, #圖像數(shù)據(jù)格式,{"channels_first", "channels_last"} 之一
 validation_split=0.0, 
 dtype=None) #生成數(shù)組使用的數(shù)據(jù)類型

雖然包含了很多參數(shù),但實(shí)際應(yīng)用時(shí)用到的并不會(huì)很多,假設(shè)我的目的只是一個(gè)batch一個(gè)batch的讀進(jìn)圖片,那么,我在實(shí)例化對(duì)象的時(shí)候什么參數(shù)都不需要設(shè)置,然后再調(diào)用ImageDataGenerator類的成員函數(shù)flow_from_directory()就可以從目錄中讀圖.

我放圖片的目錄如下圖,在train文件夾中包含了兩個(gè)子文件夾,然后在兩個(gè)子文件夾里面分別包含了貓和狗的圖片.

先看看flow_from_directory()的參數(shù).需要注意的是,第一個(gè)參數(shù)directory不是圖片的路徑,而是子文件夾的路徑,還有就是第四個(gè)參數(shù)classes,它填寫是子文件夾的名稱,比如此處的為['cat', 'dog'],然后該函數(shù)就會(huì)自動(dòng)把兩個(gè)子文件夾看成是2個(gè)類別,cat文件夾里面所有圖片的標(biāo)簽都為0,dog文件夾里面所有圖片的標(biāo)簽都為1.而且可以通過設(shè)置第5個(gè)參數(shù)class_mode把標(biāo)簽設(shè)置為ont-hot形式(默認(rèn)的categorical就是one-hot 形式).可以看出,這個(gè)函數(shù)有多方便,直接把標(biāo)簽和原圖對(duì)應(yīng)起來了.

def flow_from_directory(self,
 directory, #子文件夾所在的目錄
 target_size=(256, 256), #輸出的圖片的尺寸
 color_mode='rgb', #單通道還是三通道
 classes=None, #類別,有多少個(gè)子文件夾就有多少個(gè)類別,填寫的是子文件夾的名稱
 class_mode='categorical', #通常默認(rèn),表示標(biāo)簽采用one-hot形式,
 batch_size=32, 
 shuffle=True, #是否隨機(jī)打亂順序
 seed=None,
 save_to_dir=None, #把圖片保存,輸入的是路徑
 save_prefix='', #圖像前綴名,
 save_format='png', #圖像后綴名
 follow_links=False,
 subset=None,
 interpolation='nearest')

接下來看一個(gè)例子,部分代碼.

from tensorflow.keras.preprocessing.image import ImageDataGenerator #我是直接裝tensorflow,然后使用里面的keras的,
 
#實(shí)例化對(duì)象datagen
datagen=ImageDataGenerator() 
 
#讀訓(xùn)練集圖片
train_generator = datagen.flow_from_directory(
 '/home/hky/folder/kaggle/DataGenerator/train',
 classes=['cat','dog'],
 target_size=(227, 227),
 class_mode='categorical',
 batch_size=batch_size)
 
#讀驗(yàn)證集圖片
validation_generator = datagen.flow_from_directory(
 '/home/hky/folder/kaggle/DataGenerator/validation',
 classes=['cat','dog'],
 target_size=(227, 227),
 class_mode='categorical',
 batch_size=batch_size)
 
'''開始訓(xùn)練'''
#steps_per_epoch是為了判斷是否完成了一個(gè)epoch,這里我訓(xùn)練集有20000張圖片,然后batch_size=16,所以是10000/16
#同樣,validation_steps=2496/16是因?yàn)槲业尿?yàn)證集有2496張圖片
model.fit_generator(generator=train_generator,steps_per_epoch=20000/16,epochs=10,validation_data=validation_generator,validation_steps=2496/16)

下面是完整代碼,實(shí)現(xiàn)了一個(gè)AlexNet模型.

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.preprocessing import image
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras import optimizers
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import numpy as np
import cv2
import yaml
from tensorflow.keras.models import model_from_yaml
 
batch_size = 16
 
''' 搭建模型'''
l=tf.keras.layers
model=Sequential()
 
#第一層卷積和池化
model.add(l.Conv2D(filters=96,kernel_size=(11,11),strides=(4,4),padding='valid',input_shape=(227,227,3),activation='relu'))
model.add(l.BatchNormalization())
model.add(l.MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='valid'))
 
#第二層卷積和池化
model.add(l.Conv2D(256,(5,5),(1,1),padding='same',activation='relu'))
model.add(l.BatchNormalization())
model.add(l.MaxPooling2D((3,3),(2,2),padding='valid'))
 
#第三層卷積
model.add(l.Conv2D(384,(3,3),(1,1),'same',activation='relu'))
 
#第四層卷積
model.add(l.Conv2D(384,(3,3),(1,1),'same',activation='relu'))
 
#第五層卷積和池化
model.add(l.Conv2D(256,(3,3),(1,1),'same',activation='relu'))
model.add(l.MaxPooling2D((3,3),(2,2),'valid'))
 
#全連接層
model.add(l.Flatten())
model.add(l.Dense(4096,activation='relu'))
model.add(l.Dropout(0.5))
 
model.add(l.Dense(4096,activation='relu'))
model.add(l.Dropout(0.5))
 
model.add(l.Dense(1000,activation='relu'))
model.add(l.Dropout(0.5))
 
#輸出層
model.add(l.Dense(2,activation='softmax'))
model.compile(optimizer='sgd',loss='categorical_crossentropy',metrics=['accuracy'])
 
'''導(dǎo)入圖片數(shù)據(jù)'''
#利用ImageDataGenerator生成一個(gè)batch一個(gè)batch的數(shù)據(jù)
 
datagen=ImageDataGenerator(samplewise_center=True,rescale=1.0/255) #samplewise_center:使輸入數(shù)據(jù)的每個(gè)樣本均值為0,rescale:歸一化
train_generator = datagen.flow_from_directory(
 '/home/hky/folder/kaggle/DataGenerator/train',
 classes=['cat','dog'],
 target_size=(227, 227),
 class_mode='categorical',
 batch_size=batch_size)
 
validation_generator = datagen.flow_from_directory(
 '/home/hky/folder/kaggle/DataGenerator/validation',
 classes=['cat','dog'],
 target_size=(227, 227),
 class_mode='categorical',
 batch_size=batch_size)
 
'''開始訓(xùn)練'''
model.fit_generator(generator=train_generator,steps_per_epoch=20000/16,epochs=10,validation_data=validation_generator,validation_steps=2496/16)
 
yaml_string = model.to_yaml() # 保存模型結(jié)構(gòu)到y(tǒng)aml文件
open('./model_architecture.yaml', 'w').write(yaml_string)
model.save_weights('./AlexNet_model.h5') #保存模型參數(shù)
 
'''導(dǎo)入模型'''
#model = model_from_yaml(open('./model_architecture.yaml').read())
#model.load_weights('./AlexNet_model.h5')
 
'''隨便輸入一張圖片測(cè)試一下'''
imgs=[]
img=cv2.imread('/home/hky/folder/kaggle/test/120.jpg')
img=cv2.resize(img,(227,227))
imgs.append(img)
a=np.array(imgs)
 
result=model.predict(a)
idx=np.argmax(result)
 
if idx==0:
 print('the image is cat\n')
else:
 print('the image is dog\n')
 
cv2.imshow("image",img)
cv2.waitKey(0)

以上這篇使用Keras中的ImageDataGenerator進(jìn)行批次讀圖方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pytorch單元測(cè)試的實(shí)現(xiàn)示例

    pytorch單元測(cè)試的實(shí)現(xiàn)示例

    單元測(cè)試是一種軟件測(cè)試方法,本文主要介紹了pytorch單元測(cè)試的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • pytorch中的nn.Unfold()函數(shù)和fold()函數(shù)解讀

    pytorch中的nn.Unfold()函數(shù)和fold()函數(shù)解讀

    這篇文章主要介紹了pytorch中的nn.Unfold()函數(shù)和fold()函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python實(shí)現(xiàn)3D地圖可視化

    python實(shí)現(xiàn)3D地圖可視化

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)3D地圖可視化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Facebook開源一站式服務(wù)python時(shí)序利器Kats詳解

    Facebook開源一站式服務(wù)python時(shí)序利器Kats詳解

    這篇文章主要為答案及介紹了Facebook開源一站式服務(wù)python時(shí)序利器Kats的功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • python3中_from...import...與import?...之間的區(qū)別詳解(包/模塊)

    python3中_from...import...與import?...之間的區(qū)別詳解(包/模塊)

    Python編碼第一步是導(dǎo)入模塊,有時(shí)候用import?***有時(shí)候用from...import,下面這篇文章主要給大家介紹了關(guān)于python3中_from...import...與import?...之間區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Python基于更相減損術(shù)實(shí)現(xiàn)求解最大公約數(shù)的方法

    Python基于更相減損術(shù)實(shí)現(xiàn)求解最大公約數(shù)的方法

    這篇文章主要介紹了Python基于更相減損術(shù)實(shí)現(xiàn)求解最大公約數(shù)的方法,簡(jiǎn)單說明了更相減損術(shù)的概念、原理并結(jié)合Python實(shí)例形式分析了基于更相減損術(shù)實(shí)現(xiàn)求解最大公約數(shù)的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • Python第三方庫(kù)undetected_chromedriver的使用

    Python第三方庫(kù)undetected_chromedriver的使用

    這篇文章主要給大家介紹了關(guān)于Python第三方庫(kù)undetected_chromedriver的使用方法,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 解析Python的縮進(jìn)規(guī)則的使用

    解析Python的縮進(jìn)規(guī)則的使用

    這篇文章主要介紹了解析Python的縮進(jìn)規(guī)則的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Python缺失值處理方法

    Python缺失值處理方法

    這篇文章主要介紹了Python缺失值處理方法,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • python 運(yùn)算符 供重載參考

    python 運(yùn)算符 供重載參考

    二元運(yùn)算符及其對(duì)應(yīng)的特殊方法
    2009-06-06

最新評(píng)論