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

Keras 數據增強ImageDataGenerator多輸入多輸出實例

 更新時間:2020年07月03日 14:14:04   作者:青盞  
這篇文章主要介紹了Keras 數據增強ImageDataGenerator多輸入多輸出實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧~

import os 
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" 
os.environ["CUDA_VISIBLE_DEVICES"]=""
import sys
import gc
import time
import cv2
import random
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from tqdm import tqdm

from random_eraser import get_random_eraser
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

datagen = ImageDataGenerator(
  rotation_range=20,   #旋轉
  width_shift_range=0.1,  #水平位置平移
#   height_shift_range=0.2,  #上下位置平移
  shear_range=0.5,    #錯切變換,讓所有點的x坐標(或者y坐標)保持不變,而對應的y坐標(或者x坐標)則按比例發(fā)生平移
  zoom_range=[0.9,0.9],  # 單方向縮放,當一個數值時兩個方向等比例縮放,參數為list時長寬不同程度縮放。參數大于0小于1時,執(zhí)行的是放大操作,當參數大于1時,執(zhí)行的是縮小操作。
  channel_shift_range = 40, #偏移通道數值,改變圖片顏色,越大顏色越深
  horizontal_flip=True,  #水平翻轉,垂直翻轉vertical_flip
  fill_mode='nearest',   #操作導致圖像缺失時填充方式?!癱onstant”、“nearest”(默認)、“reflect”和“wrap”
  preprocessing_function = get_random_eraser(p=0.7,v_l=0,v_h=255,s_l=0.01,s_h=0.03,r_1=1,r_2=1.5,pixel_level=True)
  )

# train_generator = datagen.flow_from_directory(
#       'base/Images/',
#       save_to_dir = 'base/fake/',
#       batch_size=1
#       )
# for i in range(5):
#  train_generator.next()

# !
# df_train = pd.read_csv('base/Annotations/label.csv', header=None)
# df_train.columns = ['image_id', 'class', 'label']
# classes = ['collar_design_labels', 'neckline_design_labels', 'skirt_length_labels', 
#   'sleeve_length_labels', 'neck_design_labels', 'coat_length_labels', 'lapel_design_labels', 
#   'pant_length_labels']
# !

# classes = ['collar_design_labels']

# !
# for i in range(len(classes)):
#  gc.enable()

# #  單個分類
#  cur_class = classes[i]
#  df_load = df_train[(df_train['class'] == cur_class)].copy()
#  df_load.reset_index(inplace=True)
#  del df_load['index']

# #  print(cur_class)

# #  加載數據和label
#  n = len(df_load)
# #  n_class = len(df_load['label'][0])
# #  width = 256

# #  X = np.zeros((n,width, width, 3), dtype=np.uint8)
# #  y = np.zeros((n, n_class), dtype=np.uint8)

#  print(f'starting load trainset {cur_class} {n}')
#  sys.stdout.flush()
#  for i in tqdm(range(n)):
# #   tmp_label = df_load['label'][i]
#   img = load_img('base/{0}'.format(df_load['image_id'][i]))
#   x = img_to_array(img)
#   x = x.reshape((1,) + x.shape)
#   m=0
#   for batch in datagen.flow(x,batch_size=1):
# #    plt.imshow(array_to_img(batch[0]))
# #    print(batch)
#    array_to_img(batch[0]).save(f'base/fake/{format(df_load["image_id"][i])}-{m}.jpg')
#    m+=1
#    if m>3:
#     break
#  gc.collect()
# !  

img = load_img('base/Images/collar_design_labels/2f639f11de22076ead5fe1258eae024d.jpg')
plt.figure()
plt.imshow(img)
x = img_to_array(img)

x = x.reshape((1,) + x.shape)

i = 0
for batch in datagen.flow(x,batch_size=5):
 plt.figure()
 plt.imshow(array_to_img(batch[0]))
#  print(len(batch))
 i += 1
 if i >0:
  break
#多輸入,設置隨機種子
# Define the image transformations here
gen = ImageDataGenerator(horizontal_flip = True,
       vertical_flip = True,
       width_shift_range = 0.1,
       height_shift_range = 0.1,
       zoom_range = 0.1,
       rotation_range = 40)

# Here is the function that merges our two generators
# We use the exact same generator with the same random seed for both the y and angle arrays
def gen_flow_for_two_inputs(X1, X2, y):
 genX1 = gen.flow(X1,y, batch_size=batch_size,seed=666)
 genX2 = gen.flow(X1,X2, batch_size=batch_size,seed=666)
 while True:
   X1i = genX1.next()
   X2i = genX2.next()
   #Assert arrays are equal - this was for peace of mind, but slows down training
   #np.testing.assert_array_equal(X1i[0],X2i[0])
   yield [X1i[0], X2i[1]], X1i[1]
#手動構造,直接輸出多l(xiāng)abel
generator = ImageDataGenerator(rotation_range=5.,
        width_shift_range=0.1, 
        height_shift_range=0.1, 
        horizontal_flip=True, 
        vertical_flip=True)

def generate_data_generator(generator, X, Y1, Y2):
 genX = generator.flow(X, seed=7)
 genY1 = generator.flow(Y1, seed=7)
 while True:
   Xi = genX.next()
   Yi1 = genY1.next()
   Yi2 = function(Y2)
   yield Xi, [Yi1, Yi2]
model.fit_generator(generate_data_generator(generator, X, Y1, Y2),
    epochs=epochs)
def batch_generator(generator,X,Y):
 Xgen = generator.flow(X)
 while True:
  yield Xgen.next(),Y
h = model.fit_generator(batch_generator(datagen, X_all, y_all), 
       steps_per_epoch=len(X_all)//32+1,
       epochs=80,workers=3,
       callbacks=[EarlyStopping(patience=3), checkpointer,ReduceLROnPlateau(monitor='val_loss',factor=0.5,patience=1)], 
       validation_data=(X_val,y_val))

補充知識:讀取圖片成numpy數組,裁剪并保存 和 數據增強(ImageDataGenerator)

我就廢話不多說了,大家還是直接看代碼吧~

from PIL import Image
import numpy as np
from PIL import Image
from keras.preprocessing import image
import matplotlib.pyplot as plt
import os
import cv2
# from scipy.misc import toimage
import matplotlib
# 生成圖片地址和對應標簽
file_dir = '../train/'
image_list = []
label_list = []
cate = [file_dir + x for x in os.listdir(file_dir) if os.path.isdir(file_dir + x)]
for name in cate:
 temp = name.split('/')
 path = '../train_new/' + temp[-1]
 isExists = os.path.exists(path)
 if not isExists:
  os.makedirs(path) # 目錄不存在則創(chuàng)建
 class_path = name + "/"

 for file in os.listdir(class_path):
  print(file)
  img_obj = Image.open(class_path + file) # 讀取圖片
  img_array = np.array(img_obj)
  resized = cv2.resize(img_array, (256, 256)) # 裁剪
  resized = resized.astype('float32')
  resized /= 255.
  # plt.imshow(resized)
  # plt.show()
  save_path = path + '/' + file
  matplotlib.image.imsave(save_path, resized) # 保存

keras之數據增強

from PIL import Image
import numpy as np
from PIL import Image
from keras.preprocessing import image
import os
import cv2
# 生成圖片地址和對應標簽
file_dir = '../train/'

label_list = []
cate = [file_dir + x for x in os.listdir(file_dir) if os.path.isdir(file_dir + x)]
for name in cate:
 image_list = []
 class_path = name + "/"
 for file in os.listdir(class_path):
  image_list.append(class_path + file)
 batch_size = 64
 if len(image_list) < 10000:
  num = int(10000 / len(image_list))
 else:
  num = 0
 # 設置生成器參數
 datagen = image.ImageDataGenerator(fill_mode='wrap', # 填充模式
          rotation_range=40, # 指定旋轉角度范圍
          width_shift_range=0.2, # 水平位置平移
          height_shift_range=0.2, # 上下位置平移
          horizontal_flip=True, # 隨機對圖片執(zhí)行水平翻轉操作
          vertical_flip=True, # 對圖片執(zhí)行上下翻轉操作
          shear_range=0.2,
          rescale=1./255, # 縮放
          data_format='channels_last')
 if num > 0:
  temp = name.split('/')
  path = '../train_datage/' + temp[-1]
  isExists = os.path.exists(path)
  if not isExists:
   os.makedirs(path)

  for image_path in image_list:
   i = 1
   img_obj = Image.open(image_path) # 讀取圖片
   img_array = np.array(img_obj)
   x = img_array.reshape((1,) + img_array.shape)  #要求為4維
   name_image = image_path.split('/')
   print(name_image)
   for batch in datagen.flow(x,
        batch_size=1,
        save_to_dir=path,
        save_prefix=name_image[-1][:-4] + '_',
        save_format='jpg'):
    i += 1
    if i > num:
     break

以上這篇Keras 數據增強ImageDataGenerator多輸入多輸出實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python+Delorean實現(xiàn)時間格式智能轉換

    Python+Delorean實現(xiàn)時間格式智能轉換

    DeLorean是一個Python的第三方模塊,基于?pytz?和?dateutil?開發(fā),用于處理Python中日期時間的格式轉換。本文將詳細講講DeLorean的使用,感興趣的可以了解一下
    2022-04-04
  • 利用Python破解生日悖論問題

    利用Python破解生日悖論問題

    生日悖論,就是23個人在一個房間,期間必然有兩個人生日相同的概率為50%,30個人的話概率是70%,60個人甚至上升到99%。本文就來用Python語言破解這一問題,感興趣的可以了解一下
    2022-12-12
  • 解決TensorFlow調用Keras庫函數存在的問題

    解決TensorFlow調用Keras庫函數存在的問題

    這篇文章主要介紹了解決TensorFlow調用Keras庫函數存在的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python實現(xiàn)簡繁體轉換

    Python實現(xiàn)簡繁體轉換

    很多時候簡繁體轉換,掌握了簡體與繁體的轉換,往往能夠事半功倍,本文主要介紹了Python實現(xiàn)簡繁體轉換,感興趣的可以了解一下
    2021-06-06
  • 教你用python3根據關鍵詞爬取百度百科的內容

    教你用python3根據關鍵詞爬取百度百科的內容

    這篇文章介紹的是利用python3根據關鍵詞爬取百度百科的內容,注意本文用的是python3版本以及根據關鍵詞爬取,爬取也只是單純的爬網頁信息,有需要的可以參考借鑒。
    2016-08-08
  • 解決Python字典寫入文件出行首行有空格的問題

    解決Python字典寫入文件出行首行有空格的問題

    下面小編就為大家?guī)硪黄鉀QPython字典寫入文件出行首行有空格的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • python實現(xiàn)桌面氣泡提示功能

    python實現(xiàn)桌面氣泡提示功能

    這篇文章主要為大家詳細介紹了python實現(xiàn)桌面氣泡提示功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python關于矩陣重復賦值覆蓋問題的解決方法

    python關于矩陣重復賦值覆蓋問題的解決方法

    這篇文章主要介紹了python關于矩陣重復賦值覆蓋問題的解決方法,涉及Python深拷貝與淺拷貝相關操作與使用技巧,需要的朋友可以參考下
    2019-07-07
  • 基于keras 模型、結構、權重保存的實現(xiàn)

    基于keras 模型、結構、權重保存的實現(xiàn)

    今天小編就為大家分享一篇基于keras 模型、結構、權重保存的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 讀取文本文件的行數據,文件.splitlines()的方法

    python 讀取文本文件的行數據,文件.splitlines()的方法

    今天小編就為大家分享一篇python 讀取文本文件的行數據,文件.splitlines()的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

乌兰察布市| 旬阳县| 济宁市| 祁东县| 东城区| 拉孜县| 新绛县| 盖州市| 偃师市| 江口县| 大城县| 黑河市| 岢岚县| 东城区| 喜德县| 萨嘎县| 德州市| 天台县| 新河县| 刚察县| 师宗县| 新余市| 常熟市| 康保县| 墨玉县| 清镇市| 普洱| 寿阳县| 龙州县| 策勒县| 来安县| 离岛区| 阜康市| 阳谷县| 什邡市| 福贡县| 彰化市| 元氏县| 乡城县| 微山县| 应城市|