tensorflow keras数据集的读取 fit_generator的使用,以及模型编译保存

一、数据集的样式以及读取函数

数据集以x,y的形式分别保存检测图像和标签,其中X存放png和jpg格式的图像
读取的时候用model.fit_generator函数载入数据集,关键点则在于生成器的构造

二、步骤

1.制作一个数据生成器代码
2.使用yield返回值
3.接受值并给予model.fit_generator函数

三、代码(类)

import numpy as np
import matplotlib
from matplotlib import pyplot as plt

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers,optimizers,losses
from tensorflow.keras.callbacks import EarlyStopping

import cv2
import PIL
import json, os
import sys
from PIL import Image
import labelme
import labelme.utils as utils
import glob

以下是整个模型类的一部分 ,方便理解就基本都贴出来了

class Net(): 
	  def __init__(self):#存储列表
      self.input_width=input_width
      self.input_height=input_height
      self.num_classes=num_classes
      self.train_images=train_images
      self.train_instances=train_instances
      self.val_images=val_images
      self.epochs=epochs
      self.lr=lr
      self.lr_decay=lr_decay
      self.batch_size=batch_size
      self.save_path=save_path
    def build_model():#定义模型的生成样式
    pass
    
    def train(self):#############训练的方法
    G_train = self.dataGenerator(mode='training')
    G_eval  = self.dataGenerator(mode='validation')
    model =self.build_mode()#构建模型的方法 具体可以看keras官方文档
    model.summary()
    model.compile(#模型的编译
      optimizers=keras.optimizers.Adam(self.lr,self.lr_decay),
      loss = 'categorical_crossentropy',
      metrics=['categorical_accuracy','recall','AUC']
    )
    #使用model.fit_generator载入函数,必须有个数据生成器不断读取函数
   model.fit_generator(G_train,5,validation_data=G_eval,validation_steps=5,epochs=self.epochs)
#保存模型
    model.save(self.save_path)



    #数据生成器函数
  def dataGenerator(self,mode):
    if mode =='training':#训练集
   #读取文件
      images = glob.glob(self.train_images+'*.jpg')#读取列表
      images.sort()#排序
      instances= glob.glob(self.train_instances +'*.png')
      instances.sort()
      zipped = inertools.cycle(zip(images,instances))#用zip包装,cycle循环
      while True :
        x_train=[]#必须定义个空集,使张量量的维度增加一维
        y_train=[]
        for _ in range(self.batch_size):
          img,seg = next(zipped)
          img = cv2. resize(cv2.imread(img,1),(self.input_width,self.input_height))
          seg = keras.utils.to_categorical(cv2.imread(seg,0),num_classes=self.num_classes)
          x_train.append(img)
          y_train.append(seg)
        yield np.array(x_train),np.array(y_train)#使用yield返回值
    if mode == 'validation':#测试集同上,读取的地方不一样
      images = glob.glob(self.train_images + '*.jpg')
      images.sort()
      instances = glob.glob(self.train_instances + '*.png')
      instances.sort()
      zipped = inertools.cycle(zip(images, instances))
      while True:
        x_eval = []
        y_eval = []
        for _ in range(self.batch_size):
          img, seg = next(zipped)
          img = cv2.resize(cv2.imread(img, 1), (self.input_width, self.input_height))
          seg = keras.utils.to_categorical(cv2.imread(seg, 0), num_classes=self.num_classes)
          x_eval.append(img)
          y_eval.append(seg)
        yield np.array(x_eval), np.array(y_eval)
       
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 设置训练和验证数据集路径 train_dir = 'train/' validation_dir = 'validation/' # 设置图像的大小和通道数 img_width = 150 img_height = 150 img_channels = 3 # 设置训练和验证数据集的batch size batch_size = 32 # 使用ImageDataGenerator来进行数据增强 train_datagen = ImageDataGenerator( rescale=1./255, rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest') validation_datagen = ImageDataGenerator(rescale=1./255) #使用flow_from_directory方法来读取数据集 train_generator = train_datagen.flow_from_directory( train_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='binary') validation_generator = validation_datagen.flow_from_directory( validation_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='binary') # 使用Sequential模型来搭建神经网络 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(img_width, img_height, img_channels)), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(128, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(128, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid')]) # 编译模型 model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=1e-4), loss='binary_crossentropy', metrics=['accuracy']) # 训练模型 history = model.fit(train_generator, steps_per_epoch=100, epochs=100, validation_data=validation_generator, validation_steps=50) # 保存模型 model.save('cat_dog_classifier.h5')解释每一行代码
最新发布
06-13

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值