使用的tensorflow2.6.0版本,
#一、导入处理包
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import h5py
import tensorflow.keras
import os, random, shutil
#二、指定文件夹路径
base_dir = 'D:\CNN\chuli'
train_dir = os.path.join(base_dir, 'train/') #指定训练集路径
validation_dir = os.path.join(base_dir, 'validation/') #指定验证集路径
train_BT_dir = os.path.join(train_dir, 'BT') # directory with our training BT pictures
train_HP_dir = os.path.join(train_dir, 'HP') # directory with our training HP pictures
validation_BT_dir = os.path.join(validation_dir, 'BT') # directory with our validation BT pictures
validation_HP_dir = os.path.join(validation_dir, 'HP') # directory with our validation HP pictures
PATH1='D:\\CNN\\chuli\\train//BT'
PATH2='D:\\CNN\\chuli\\train//HP'
PATH7='D:\\CNN\\chuli\\validation//BT'
PATH8='D:\\CNN\\chuli\\validation//HP'
num_BT_train = len(os.listdir(PATH1))
num_HP_train = len(os.listdir(PATH2))
num_BT_validation = len(os.listdir(PATH7))
num_HP_validation = len(os.listdir(PATH8))
total_train = num_BT_train + num_HP_train
total_validation=num_BT_validation + num_HP_validation
print(total_train) #查看训练集数据
print(total_validation) #查看验证集数据
#三、设置预处理数据集和训练网络时要使用的变量。
batch_size =10,
epochs =10,
IMG_HEIGHT =2048,
IMG_WIDTH = 2048,
# 四、生成训练数据集和验证数据集,指定scaling范围0-1
train_image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1. / 255)
test_image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1. / 255)
validation_image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1. / 255)
# 五、在为训练和验证图像定义生成器之后,flow_from_directory方法从磁盘加载图像,应用重新缩放,并将图像调整到所需的尺寸。
train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
directory=train_dir,
shuffle=True,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='binary')
val_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size,
directory=validation_dir,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='binary')
#六、创建模型
import tensorflow as tf
IMG_HEIGHT =2048
IMG_WIDTH = 2048
model=tf.keras.Sequential([
tf.keras.layers.Conv2D(512,3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1,activation='sigmoid')
])
#七.模型编译
# 编译模型:这边选择ADAM优化器和二进制交叉熵损失函数。
#传递metrics参数查看每个训练时期的训练和验证准确性。
model.compile(optimizer= 'Adam',#指定优化器adam
loss='CategoricalCrossentropy',
metrics= 'accuracy')
model.summary()
# 八、训练模型:使用ImageDataGenerator类的fit_generator方法来训练网络。
history = model.fit_generator(
train_data_gen,
steps_per_epoch=total_train//(batch_size,
#epochs==3,
validation_data=val_data_gen,
validations_steps=total_val//batch_size
)
代码改自于csdn博主:@tensorflow2实现图像分类:以猫狗数据集为案例(上)_tensorflow2 制作图像数据集_m0_38056893的博客-CSDN博客