在主函数上我待用整体是可以跑的
主函数部分代码
#分离数据集 训练和验证 以及类名
#初始化mobilenetv2模型
def get_MOBILENT_model(IMG_SHAPE=(224, 224, 3), class_num=245):
# 微调的过程中不需要进行归一化的处理
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=False,
weights='imagenet') # 加载mobilenetv2模型
base_model.trainable = False # 将主干的特征提取网络参数进行冻结
model = tf.keras.models.Sequential([
tf.keras.layers.experimental.preprocessing.Rescaling(1. / 127.5, offset=-1, input_shape=IMG_SHAPE),
# 归一化处理,将像素值处理为-1到1之间
base_model,
tf.keras.layers.GlobalAveragePooling2D(), # 全局平均池化
tf.keras.layers.Dense(class_num, activation='softmax'), # 设置最后的全连接层,用于分类
])
model.summary() # 输出模型信息
# 模型训练
model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['accuracy']) # 用于编译模型,指定模型的优化器是adam优化器,模型的损失函数是交叉熵损失函数
return model # 返回模型
def train_test_split(date_dir,height_size,width_size, batch_size):
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
#文件目录
date_dir,
#标签将被编码为分类向量
label_mode='categorical',
# 划分比例
validation_split=0.2, # 划分比例
# 训练集
subset="training",
seed=123,
image_size=(height_size, width_size),
# 批次大小
batch_size=batch_size)
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
date_dir,
label_mode='categorical',
# 划分比例
validation_split=0.2,
# 验证集
subset="validation",
seed=123,
image_size=(height_size, width_size),
#批次大小
batch_size=batch_size)
class_names = train_ds.class_names # 获取数据集的类名
return train_ds, val_ds, class_names # 返回训练集、验证集和类名
def test(Date_dir,H5_name):
train_ds, val_ds, class_names = train_test_split(Date_dir, 224, 224, 4)
model = tf.keras.models.load_model(H5_name)
model.summary()
# loss, accuracy = model.evaluate(val_ds)
# print('test accuracy :', accuracy)
pre=model.predict(val_ds)
print(len(pre[0]))
但是测试单张图片的时候不可以
img_path=r"D:\python Rubbish\rubbish data\images\img_4.jpg"
model = load_model("D:\python Rubbish\mobilent.h5")
model.summary()
img=image.load_img(img_path,target_size=(224,224))
img_tensor = image.img_to_array(img)
img_tensor/=127.5
print('该图像的尺寸为:',img_tensor.shape)
#之前模型设立了偏移
img_tensor=img_tensor-1
print(img_tensor)
img_tensor=np.expand_dims(img_tensor,axis=0)
prediction=model.predict(img_tensor)
print(prediction)