热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python45对青春有你2进行二分类和图像预测

文章目录一、青春有你2进行二分类二、对青春有你2进行图像预测三、训练预测一、青春有你2进行二分类数据准备在进行Finetune前,我们可以设置一些运行时的配

文章目录

      • 一、青春有你2进行二分类
      • 二、对青春有你2进行图像预测
      • 三、训练预测


一、青春有你2进行二分类

"""
数据准备在进行Finetune前,我们可以设置一些运行时的配置,例如如下代码中的配置,表示:use_cuda:设置为False表示使用CPU进行训练。如果您本机支持GPU,且安装的是GPU版本的PaddlePaddle,我们建议您将这个选项设置为True;epoch:迭代轮数;batch_size:每次训练的时候,给模型输入的每批数据大小为32,模型训练时能够并行处理批数据,因此batch_size越大,训练的效率越高,但是同时带来了内存的负荷,过大的batch_size可能导致内存不足而无法训练,因此选择一个合适的batch_size是很重要的一步;log_interval:每隔10 step打印一次训练日志;eval_interval:每隔50 step在验证集上进行一次性能评估;checkpoint_dir:将训练的参数和数据保存到cv_finetune_turtorial_demo目录中;strategy:使用DefaultFinetuneStrategy策略进行finetune
"""

import paddlehub as hub
import paddle
paddle.enable_static()from paddlehub.dataset.base_cv_dataset import BaseCVDataset
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
module=hub.Module(name="resnet_v2_50_imagenet")
import matplotlib
matplotlib.use("TkAgg")class DemoDataSet(BaseCVDataset):def __init__(self):self.dataset_dir="data"super(DemoDataSet,self).__init__(base_path=self.dataset_dir,train_list_file="train_list.txt",validate_list_file="validate_list.txt",test_list_file="test_list.txt",label_list_file="label_list.txt")
dataset = DemoDataSet()
img=mpimg.imread("data/xu/1.jpg")
img1=mpimg.imread("data/yu/1.jpg")
plt.figure(figsize=(10,10))
plt.subplot(1,2,1)
plt.imshow(img)
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(img1)
plt.axis("off")
plt.show()
"""
生成数据读取器
"""

data_reader=hub.reader.ImageClassificationReader(image_width=module.get_expected_image_width(),image_height=module.get_expected_image_height(),images_mean=module.get_pretrained_images_mean(),images_std=module.get_pretrained_images_std(),dataset=dataset
)config = hub.RunConfig(use_cuda=True, #是否使用GPU训练,默认为False;num_epoch=3, #Fine-tune的轮数;checkpoint_dir="cv_finetune_turtorial_demo",#模型checkpoint保存路径, 若用户没有指定,程序会自动生成;batch_size=3, #训练的批大小,如果使用GPU,请根据实际情况调整batch_size;eval_interval=10, #模型评估的间隔,默认每100个step评估一次验证集;strategy=hub.finetune.strategy.DefaultFinetuneStrategy())input_dict, output_dict, program = module.context(trainable=True)
img = input_dict["image"]
feature_map = output_dict["feature_map"]
feed_list = [img.name]task = hub.ImageClassifierTask(data_reader=data_reader,feed_list=feed_list,feature=feature_map,num_classes=dataset.num_labels,config=config)import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimgdata = ["data/xu/16.jpg","data/yu/16.jpg"]label_map = dataset.label_dict()
index = 0
run_states = task.predict(data=data)
results = [run_state.run_results for run_state in run_states]for batch_result in results:print(batch_result)batch_result = np.argmax(batch_result, axis=2)[0]print(batch_result)for result in batch_result:index += 1result = label_map[result]print("input %i is %s, and the predict result is %s" %(index, data[index - 1], result))img = mpimg.imread(data[0])
img1 = mpimg.imread(data[1])
plt.figure(figsize=(10,10))
plt.subplot(1,2,1)
plt.imshow(img)
plt.axis('off')
plt.subplot(1,2,2)
plt.imshow(img1)
plt.axis('off')
plt.show()

二、对青春有你2进行图像预测

# 作者:Kerwin Wan
# 开发时间:2022/9/29 15:27"""
图像预测
"""

import paddlehub as hub
import paddle
paddle.enable_static()
# 加载预训练模型
module=hub.Module(name="resnet_v2_50_imagenet")
from paddlehub.dataset.base_cv_dataset import BaseCVDataset
class DemoDataSet(BaseCVDataset):def __init__(self):self.dataset_dir="data"super(DemoDataSet, self).__init__(base_path=self.dataset_dir,train_list_file="train_list.txt",validate_list_file="validate_list.txt",label_list_file="label_list.txt")
dataset=DemoDataSet()import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img=mpimg.imread("data/xu/1.jpg")
img1=mpimg.imread("data/yu/1.jpg")
plt.figure(figsize=(10,10))
plt.subplot(1,2,1)
plt.imshow(img)
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(img1)
plt.axis("off")
plt.show()# 生成数据读取器
data_reader=hub.reader.ImageClassificationReader(image_width=module.get_expected_image_width(),image_height=module.get_expected_image_height(),images_mean=module.get_pretrained_images_mean(),images_std=module.get_pretrained_images_std(),dataset=dataset
)
# 配置策略
config=hub.RunConfig(use_cuda=True,num_epoch=3,checkpoint_dir="cv_finetune_turtorial_demo",batch_size=3,eval_interval=10,strategy=hub.finetune.strategy.DefaultFinetuneStrategy(),
)
# 组建Finetune Task
input_dict,output_dict,program=module.context(trainable=True)
img = input_dict["image"]
feature_map = output_dict["feature_map"]
feed_list = [img.name]task = hub.ImageClassifierTask(data_reader=data_reader,feed_list=feed_list,feature=feature_map,num_classes=dataset.num_labels,config=config)
run_states = task.finetune_and_eval()import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimgdata = ["data/xu/16.jpg","data/yu/16.jpg"]label_map = dataset.label_dict()
index = 0
run_states = task.predict(data=data)
results = [run_state.run_results for run_state in run_states]for batch_result in results:print(batch_result)batch_result = np.argmax(batch_result, axis=2)[0]print(batch_result)for result in batch_result:index += 1result = label_map[result]print("input %i is %s, and the predict result is %s" %(index, data[index - 1], result))img = mpimg.imread(data[0])
img1 = mpimg.imread(data[1])
plt.figure(figsize=(10,10))
plt.subplot(1,2,1)
plt.imshow(img)
plt.axis('off')
plt.subplot(1,2,2)
plt.imshow(img1)
plt.axis('off')
plt.show()
print(" input1 许佳琪 input2 虞书欣")

三、训练预测

# 作者:Kerwin Wan
# 开发时间:2022/9/29 16:43#导入需要的包
import numpy as np
import paddle as paddle
import paddle.fluid as fluid
from PIL import Image
import matplotlib.pyplot as plt
import os
import paddle
paddle.enable_static()train_reader = paddle.batch(paddle.reader.shuffle(paddle.dataset.mnist.train(),buf_size=512),batch_size=128)
test_reader = paddle.batch(paddle.dataset.mnist.test(),batch_size=128)temp_reader = paddle.batch(paddle.dataset.mnist.train(),batch_size=1)
temp_data=next(temp_reader())
print(temp_data)def multilayer_perceptron(input):# 第一个全连接层,激活函数为ReLUhidden1 = fluid.layers.fc(input=input, size=100, act='relu')# 第二个全连接层,激活函数为ReLUhidden2 = fluid.layers.fc(input=hidden1, size=100, act='relu')# 以softmax为激活函数的全连接输出层,大小为10prediction = fluid.layers.fc(input=hidden2, size=10, act='softmax')return prediction
image = fluid.layers.data(name='image', shape=[1, 28, 28], dtype='float32') #单通道,28*28像素值
label = fluid.layers.data(name='label', shape=[1], dtype='int64') #图片标签
model = multilayer_perceptron(image)
# 获取损失函数和准确率函数
cost = fluid.layers.cross_entropy(input=model, label=label) #使用交叉熵损失函数,描述真实样本标签和预测概率之间的差值
avg_cost = fluid.layers.mean(cost)
acc = fluid.layers.accuracy(input=model, label=label)# 定义优化方法
optimizer = fluid.optimizer.AdamOptimizer(learning_rate=0.001) #使用Adam算法进行优化
opts = optimizer.minimize(avg_cost)# 定义一个使用CPU的解析器
place = fluid.CPUPlace()
exe = fluid.Executor(place)
# 进行参数初始化
exe.run(fluid.default_startup_program())# 定义输入数据维度
feeder = fluid.DataFeeder(place=place, feed_list=[image, label])# 开始训练和测试
for pass_id in range(5):# 进行训练for batch_id, data in enumerate(train_reader()): # 遍历train_readertrain_cost, train_acc = exe.run(program=fluid.default_main_program(), # 运行主程序feed=feeder.feed(data), # 给模型喂入数据fetch_list=[avg_cost, acc]) # fetch 误差、准确率# 每100个batch打印一次信息 误差、准确率if batch_id % 100 == 0:print('Pass:%d, Batch:%d, Cost:%0.5f, Accuracy:%0.5f' %(pass_id, batch_id, train_cost[0], train_acc[0]))# 进行测试test_accs = []test_costs = []# 每训练一轮 进行一次测试for batch_id, data in enumerate(test_reader()): # 遍历test_readertest_cost, test_acc = exe.run(program=fluid.default_main_program(), # 执行训练程序feed=feeder.feed(data), # 喂入数据fetch_list=[avg_cost, acc]) # fetch 误差、准确率test_accs.append(test_acc[0]) # 每个batch的准确率test_costs.append(test_cost[0]) # 每个batch的误差# 求测试结果的平均值test_cost = (sum(test_costs) / len(test_costs)) # 每轮的平均误差test_acc = (sum(test_accs) / len(test_accs)) # 每轮的平均准确率print('Test:%d, Cost:%0.5f, Accuracy:%0.5f' % (pass_id, test_cost, test_acc))# 保存模型model_save_dir = "/home/aistudio/data/hand.inference.model"# 如果保存路径不存在就创建if not os.path.exists(model_save_dir):os.makedirs(model_save_dir)print('save models to %s' % (model_save_dir))fluid.io.save_inference_model(model_save_dir, # 保存推理model的路径['image'], # 推理(inference)需要 feed 的数据[model], # 保存推理(inference)结果的 Variablesexe) # executor 保存 inference model# 对图片进行预处理def load_image(file):im = Image.open(file).convert('L') # 将RGB转化为灰度图像,L代表灰度图像,灰度图像的像素值在0~255之间im = im.resize((28, 28), Image.ANTIALIAS) # resize image with high-quality 图像大小为28*28im = np.array(im).reshape(1, 1, 28, 28).astype(np.float32) # 返回新形状的数组,把它变成一个 numpy 数组以匹配数据馈送格式。# print(im)im = im / 255.0 * 2.0 - 1.0 # 归一化到【-1~1】之间print(im)return imimg = Image.open('data/xu/6.jpg')plt.imshow(img) # 根据数组绘制图像plt.show() # 显示图像infer_exe = fluid.Executor(place)inference_scope = fluid.core.Scope()# 加载数据并开始预测with fluid.scope_guard(inference_scope):# 获取训练好的模型# 从指定目录中加载 推理model(inference model)[inference_program, # 推理Programfeed_target_names, # 是一个str列表,它包含需要在推理 Program 中提供数据的变量的名称。fetch_targets] = fluid.io.load_inference_model(model_save_dir,# fetch_targets:是一个 Variable 列表,从中我们可以得到推断结果。model_save_dir:模型保存的路径infer_exe) # infer_exe: 运行 inference model的 executorimg = load_image('data/yu/6.jpg')results = exe.run(program=inference_program, # 运行推测程序feed={feed_target_names[0]: img}, # 喂入要预测的imgfetch_list=fetch_targets) # 得到推测结果,# 获取概率最大的labellab = np.argsort(results) # argsort函数返回的是result数组值从小到大的索引值# print(lab)print("该图片的预测结果的label为: %d" % lab[0][0][-1]) # -1代表读取数组中倒数第一列


推荐阅读
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
2013丶峰峰最逆天_192
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有