糖果网站建设策划书,米拓建站,什么网站收录排名最高,注册公司流程和费用时间模型训练 要使用自己的图片分类数据集进行训练#xff0c;这意味着数据集应该包含一个目录#xff0c;其中每个子目录代表一个类别#xff0c;子目录中包含该类别的所有图片。以下是一个使用Keras和TensorFlow加载自定义图片数据集进行分类训练的例子。 我们自己创建的数据集…模型训练 要使用自己的图片分类数据集进行训练这意味着数据集应该包含一个目录其中每个子目录代表一个类别子目录中包含该类别的所有图片。以下是一个使用Keras和TensorFlow加载自定义图片数据集进行分类训练的例子。 我们自己创建的数据集结构如下
data/train/class1/img1.jpgimg2.jpg...class2/imga.jpgimgb.jpg......validation/class1/img3.jpgimg4.jpg...class2/imgc.jpgimgd.jpg......以下是训练模型的代码
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 定义数据集的路径
train_data_path data/train
validation_data_path data/validation
# 设置图片大小
img_height 150
img_width 150
# 创建ImageDataGenerator实例
train_datagen ImageDataGenerator(rescale1./255,rotation_range40,width_shift_range0.2,height_shift_range0.2,shear_range0.2,zoom_range0.2,horizontal_flipTrue,fill_modenearest)
validation_datagen ImageDataGenerator(rescale1./255)
# 使用ImageDataGenerator读取数据
train_generator train_datagen.flow_from_directory(train_data_path,target_size(img_height, img_width),batch_size32,class_modecategorical
)
validation_generator validation_datagen.flow_from_directory(validation_data_path,target_size(img_height, img_width),batch_size32,class_modecategorical
)
# 创建CNN模型
model Sequential([Conv2D(32, (3, 3), activationrelu, input_shape(img_height, img_width, 3)),MaxPooling2D(2, 2),Conv2D(64, (3, 3), activationrelu),MaxPooling2D(2, 2),Conv2D(128, (3, 3), activationrelu),MaxPooling2D(2, 2),Flatten(),Dense(512, activationrelu),Dropout(0.5),Dense(train_generator.num_classes, activationsoftmax)
])
# 编译模型
model.compile(optimizeradam,losscategorical_crossentropy,metrics[accuracy])
# 训练模型
history model.fit(train_generator,steps_per_epochtrain_generator.samples // train_generator.batch_size,epochs50,validation_datavalidation_generator,validation_stepsvalidation_generator.samples // validation_generator.batch_size
)
# 保存模型
model.save(my_model.h5)在这个例子中我们首先定义了训练和验证数据的路径然后创建了ImageDataGenerator实例来处理图片增强和归一化。接着我们使用flow_from_directory方法从目录中读取图片数据并生成批量数据供模型训练使用。然后我们创建了一个简单的CNN模型并使用训练和验证数据进行了训练。最后我们将训练好的模型保存为my_model.h5文件。
模型使用
import tensorflow as tf
from tensorflow.keras.preprocessing import image
import numpy as np
import os
# 加载训练好的模型
model tf.keras.models.load_model(my_model.h5)
# 定义包含图片的目录
img_directory path_to_directory_with_images
# 创建ImageDataGenerator实例来获取类别的顺序
datagen ImageDataGenerator()
generator datagen.flow_from_directory(path_to_training_data_directory, # 训练数据所在的目录target_size(150, 150),batch_size32,class_modecategorical
)
# 获取类别到索引的映射
class_indices generator.class_indices
# 反转映射从索引到类别名称
inverse_map {v: k for k, v in class_indices.items()}
# 加载所有图片并进行预处理
img_paths [os.path.join(img_directory, f) for f in os.listdir(img_directory) if f.endswith((.png, .jpg, .jpeg))]
img_arrays [image.load_img(img_path, target_size(150, 150)) for img_path in img_paths] # 确保这个尺寸与训练时使用的尺寸一致
img_arrays [image.img_to_array(img) for img in img_arrays]
img_arrays [img / 255.0 for img in img_arrays] # 归一化
img_array np.array(img_arrays)
# 使用模型进行预测
predictions model.predict(img_array)
# 将预测结果转换为类别索引
predicted_classes np.argmax(predictions, axis-1)
# 打印预测结果
for i, img_path in enumerate(img_paths):class_index predicted_classes[i]class_name inverse_map[class_index]print(fImage: {img_path}, Predicted class: {class_name})我们首先创建了ImageDataGenerator实例并使用了flow_from_directory方法来获取类别到索引的映射。然后我们将这个映射反转以便可以从索引得到类别名称。在预测完成后我们使用predicted_classes中的索引通过inverse_map来获取每个图片对应的类别名称并打印出来。 请确保path_to_training_data_directory是训练数据所在的目录这样类别顺序才是正确的。如果训练数据和测试数据不在同一个目录下你需要确保测试数据的类别顺序与训练数据相同。