当前位置: 首页 > article >正文

第T6周:好莱坞明星识别

本文为365天深度学习训练营中的学习记录博客原作者K同学啊一、前期工作1.设置GPUfrom tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as plt import tensorflow as tf import numpy as np gpus tf.config.list_physical_devices(GPU) if gpus: gpu0 gpus[0] #如果有多个GPU仅使用第0个GPU tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用 tf.config.set_visible_devices([gpu0],GPU) gpusCPU所以跳过这一步2.导入数据data_dir ./48-data/ data_dir pathlib.Path(data_dir)3.查看数据image_count len(list(data_dir.glob(*/*.jpg))) print(图片总数为,image_count) roses list(data_dir.glob(Jennifer Lawrence/*.jpg)) PIL.Image.open(str(roses[0]))二、数据预处理1.加载数据batch_size 32 img_height 224 img_width 224 关于image_dataset_from_directory()的详细介绍可以参考文章https://mtyjkh.blog.csdn.net/article/details/117018789 train_ds tf.keras.preprocessing.image_dataset_from_directory( data_dir, validation_split0.1, subsettraining, label_mode categorical, seed123, image_size(img_height, img_width), batch_sizebatch_size) 关于image_dataset_from_directory()的详细介绍可以参考文章https://mtyjkh.blog.csdn.net/article/details/117018789 val_ds tf.keras.preprocessing.image_dataset_from_directory( data_dir, validation_split0.1, subsetvalidation, label_mode categorical, seed123, image_size(img_height, img_width), batch_sizebatch_size)class_names train_ds.class_names print(class_names)2.可视化数据plt.figure(figsize(20, 10)) for images, labels in train_ds.take(1): for i in range(20): ax plt.subplot(5, 10, i 1) plt.imshow(images[i].numpy().astype(uint8)) plt.title(class_names[np.argmax(labels[i])]) plt.axis(off)3.再次检查数据for image_batch, labels_batch in train_ds: print(image_batch.shape) print(labels_batch.shape) break4.配置数据集AUTOTUNE tf.data.AUTOTUNE train_ds train_ds.cache().shuffle(1000).prefetch(buffer_sizeAUTOTUNE) val_ds val_ds.cache().prefetch(buffer_sizeAUTOTUNE)三、构建CNN网络 关于卷积核的计算不懂的可以参考文章https://blog.csdn.net/qq_38251616/article/details/114278995 layers.Dropout(0.4) 作用是防止过拟合提高模型的泛化能力。 关于Dropout层的更多介绍可以参考文章https://mtyjkh.blog.csdn.net/article/details/115826689 model models.Sequential([ layers.experimental.preprocessing.Rescaling(1./255, input_shape(img_height, img_width, 3)), layers.Conv2D(16, (3, 3), activationrelu, input_shape(img_height, img_width, 3)), # 卷积层1卷积核3*3 layers.AveragePooling2D((2, 2)), # 池化层12*2采样 layers.Conv2D(32, (3, 3), activationrelu), # 卷积层2卷积核3*3 layers.AveragePooling2D((2, 2)), # 池化层22*2采样 layers.Dropout(0.5), layers.Conv2D(64, (3, 3), activationrelu), # 卷积层3卷积核3*3 layers.AveragePooling2D((2, 2)), layers.Dropout(0.5), layers.Conv2D(128, (3, 3), activationrelu), # 卷积层3卷积核3*3 layers.Dropout(0.5), layers.Flatten(), # Flatten层连接卷积层与全连接层 layers.Dense(128, activationrelu), # 全连接层特征进一步提取 layers.Dense(len(class_names)) # 输出层输出预期结果 ]) model.summary() # 打印网络结构四、训练模型1.设置动态学习率# 设置初始学习率 initial_learning_rate 1e-4 lr_schedule tf.keras.optimizers.schedules.ExponentialDecay( initial_learning_rate, decay_steps60, # 敲黑板这里是指 steps不是指epochs decay_rate0.96, # lr经过一次衰减就会变成 decay_rate*lr staircaseTrue) # 将指数衰减学习率送入优化器 optimizer tf.keras.optimizers.Adam(learning_ratelr_schedule) model.compile(optimizeroptimizer, losstf.keras.losses.CategoricalCrossentropy(from_logitsTrue), metrics[accuracy])调用方法一model.compile(optimizeradam, losscategorical_crossentropy, metrics[accuracy])调用方法二model.compile(optimizeradam, losstf.keras.losses.CategoricalCrossentropy(), metrics[accuracy])sparse_categorical_crossentropy稀疏性多分类的对数损失函数与softmax相对应的损失函数如果是整数编码则使用sparse_categorical_crossentropy调用方法一model.compile(optimizeradam, losssparse_categorical_crossentropy, metrics[accuracy])调用方法二model.compile(optimizeradam, losstf.keras.losses.SparseCategoricalCrossentropy(), metrics[accuracy])函数原型tf.keras.losses.SparseCategoricalCrossentropy( from_logitsFalse, reductionlosses_utils.ReductionV2.AUTO, namesparse_categorical_crossentropy )2.早停与保存最佳模型参数from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping epochs 100 # 保存最佳模型参数 checkpointer ModelCheckpoint(best_model.h5, monitorval_accuracy, verbose1, save_best_onlyTrue, save_weights_onlyTrue) # 设置早停 earlystopper EarlyStopping(monitorval_accuracy, min_delta0.001, patience20, verbose1)3.模型训练history model.fit(train_ds, validation_dataval_ds, epochsepochs, callbacks[checkpointer, earlystopper])五、模型评估1.Loss与Accuracy图from datetime import datetime current_time datetime.now() # 获取当前时间 acc history.history[accuracy] val_acc history.history[val_accuracy] loss history.history[loss] val_loss history.history[val_loss] epochs_range range(len(loss)) plt.figure(figsize(12, 4)) plt.subplot(1, 2, 1) plt.plot(epochs_range, acc, labelTraining Accuracy) plt.plot(epochs_range, val_acc, labelValidation Accuracy) plt.legend(loclower right) plt.title(Training and Validation Accuracy) plt.xlabel(current_time) # 打卡请带上时间戳否则代码截图无效 plt.subplot(1, 2, 2) plt.plot(epochs_range, loss, labelTraining Loss) plt.plot(epochs_range, val_loss, labelValidation Loss) plt.legend(locupper right) plt.title(Training and Validation Loss) plt.show()2.指定图片进行预测from PIL import Image import numpy as np img Image.open(./48-data/Jennifer Lawrence/003_963a3627.jpg) #这里选择你需要预测的图片 image tf.image.resize(img, [img_height, img_width]) img_array tf.expand_dims(image, 0) # 加载效果最好的模型权重 model.load_weights(best_model.h5) predictions model.predict(img_array) # 这里选用你已经训练好的模型 print(预测结果为,class_names[np.argmax(predictions)])六、个人总结1.每次必备代码import os import pathlib import PIL.Image import numpy as np import matplotlib.pyplot as plt TensorFlow 及 Keras 核心组件 import tensorflow as tf from tensorflow.keras import models, layers2.理论基础测试集 VS 验证集的本质区别验证集Validation Set不直接参与梯度下降和参数更新狭义上不参与训练但用于人工调参。通过观察模型在验证集上的表现来决定是否早停Early Stopping或调整超参数如学习率、Batch Size。它防止了模型对训练集的盲目过拟合。标签编码与加载模式 (label_mode)使用 image_dataset_from_directory 加载数据时标签按文件夹名称字母顺序自动生成。int 模式标签编码为整数如 0, 1, 2...。categorical 模式标签编码为 One-hot 分类向量如 [1,0,0], [0,1,0]...。数据集性能优化shuffle()打乱数据打破数据的顺序相关性提升模型泛化能力。prefetch()预取数据让 CPU 准备数据的过程和 GPU 训练模型的过程并行大幅加速运行。3.损失函数Loss Functions的对应关系选择合适的损失函数是深度学习的核心。分类问题中损失函数必须与标签的编码方式严格对应binary_crossentropy适用场景二分类问题标签编码格式0 或 1通常网络最后一层激活函数配合 Sigmoid 使用。sparse_categorical_crossentropy适用场景多分类问题标签编码格式整数如 1, 2, 3节省内存适合类别极多的情况。categorical_crossentropy适用场景多分类问题标签编码格式One-hot 向量如 [0,1,0]本次任务好莱坞明星识别的核心要求。核心参数 from_logits设为 True 时表示模型的输出没有经过 Softmax 处理输出的是原始得分 logits函数内部会自动将其转换为概率分布再计算 Loss。官方推荐使用 from_logitsTrue因为数值计算上更稳定。4.训练控制学习率与回调函数动态学习率 (ExponentialDecay)前期使用较大学习率加速收敛后期动态减小学习率帮助模型稳定在全局最优解。核心参数initial_learning_rate初始值、decay_steps衰减周期、decay_rate衰减比例、staircaseTrue 为阶梯式骤降False 为平滑连续衰减。早停机制 (EarlyStopping)防止模型过拟合的利器。核心参数monitor监控指标通常为 val_loss 或 val_accuracy、patience容忍多少个 Epoch 指标不改善才停止、restore_best_weights设为 True 可在停止时自动恢复到历史最佳权重而不是最后一步的“烂权重”。模型保存 (ModelCheckpoint)在训练过程中实时保存表现最好的模型参数.h5 文件。5.单张图片预测标准 Pipeline在模型训练完成后对外部单张图片进行预测必须经过与训练集完全相同的预处理加载并调整尺寸使用 PIL 和 tf.image.resize 将图片调整为模型要求的输入尺寸扩展维度模型输入要求带有 Batch 维度需使用 tf.expand_dims(image, 0) 将 (224, 224, 3) 转换为 (1, 224, 224, 3)加载最佳权重model.load_weights(best_model.h5)预测与解码调用 model.predict() 得到概率数组使用 np.argmax() 提取概率最大的索引最后映射回 class_names 得到最终标签。

相关文章:

第T6周:好莱坞明星识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 一、前期工作 1.设置GPU from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.py…...

保姆级教程:在GEE里用PCA给Sentinel-2影像‘瘦身’,5分钟搞定降维与特征提取

5分钟极简PCA降维:用GEE高效处理Sentinel-2多波段数据 当你的研究区域覆盖大范围植被监测或城市变化分析时,Sentinel-2的10个波段数据就像一把双刃剑——丰富的 spectral 信息背后是惊人的计算负担。我曾用传统方法处理200km的影像,光是加载数…...

2025届毕业生推荐的五大降重复率网站推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek作为当下主流的大语言模型,它在论文写作应用方面有着显著优势&#xff0…...

LightGCN论文与代码对照解读:那些公式在PyTorch里到底是怎么写的?

LightGCN论文与代码对照解读:那些公式在PyTorch里到底是怎么写的? 当你第一次翻开LightGCN论文时,那些优雅的矩阵公式可能让你眼前一亮——图卷积原来可以如此简洁!但当你兴奋地打开GitHub上的PyTorch实现代码,看到的却…...

用ESP32和DengFOC驱动板,5分钟搞定无刷电机FOC控制(附完整代码)

ESP32DengFOC驱动板:零基础实现无刷电机FOC控制的实战指南 当创客们第一次接触无刷电机控制时,往往会被复杂的FOC(磁场定向控制)理论吓退。但今天我要分享的这套组合——ESP32开发板搭配DengFOC驱动板,能让你在喝杯咖啡…...

为初创公司 MVP 产品快速集成 AI 功能并控制成本

为初创公司 MVP 产品快速集成 AI 功能并控制成本 1. 初创团队面临的 AI 集成挑战 初创公司在开发 MVP 产品时,往往需要在有限预算下快速验证产品核心价值。集成 AI 功能可以显著提升产品竞争力,但同时也带来一系列技术选型与成本控制的难题。团队通常缺…...

DoL-Lyra终极整合包:5分钟打造你的专属游戏美化方案

DoL-Lyra终极整合包:5分钟打造你的专属游戏美化方案 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity游戏美化包的复杂安装而烦恼吗?想要一键获得汉化…...

如何构建高性能Markdown渲染架构:浏览器扩展的模块化设计实践

如何构建高性能Markdown渲染架构:浏览器扩展的模块化设计实践 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 在技术文档协作和知识管理领域,Markdown Vie…...

别再只测角度了!用AS5600磁编码器DIY你的桌面小玩意:转速表、舵机闭环控制与无线姿态监测

AS5600磁编码器的创意实践:从转速测量到无线姿态监测 在创客和硬件开发者的世界里,精确的角度测量一直是许多项目的基础需求。AS5600磁编码器以其高精度、非接触式测量和简单的I2C接口,成为了众多DIY爱好者的首选传感器。但大多数教程都停留在…...

五分钟完成Nodejs环境下的Taotoken大模型api接入

五分钟完成Nodejs环境下的Taotoken大模型API接入 1. 准备工作 在开始接入Taotoken服务之前,需要确保已经完成以下准备工作。首先,注册并登录Taotoken平台,在控制台中创建API Key。这个Key将作为身份验证凭证用于后续的API调用。其次&#x…...

跨平台游戏模组获取指南:WorkshopDL如何打破Steam创意工坊壁垒

跨平台游戏模组获取指南:WorkshopDL如何打破Steam创意工坊壁垒 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG、Epic Games Store等平台购买了游戏&…...

如何快速配置Cyber Engine Tweaks:面向《赛博朋克2077》玩家的完整优化指南

如何快速配置Cyber Engine Tweaks:面向《赛博朋克2077》玩家的完整优化指南 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks Cyber Engine Tweak…...

海思Hi35xx芯片开发避坑指南:SVP、MPP、NNIE、ACL四大模块到底怎么用?

海思Hi35xx芯片开发实战:四大核心模块深度解析与应用指南 第一次拿到海思Hi35xx开发板时,面对SDK里密密麻麻的文档和一堆专业术语,我完全懵了——SVP、MPP、NNIE、ACL这些模块到底该先用哪个?它们之间又是什么关系?记得…...

LoFT框架:参数高效微调解决长尾数据学习难题

1. 项目背景与核心价值长尾分布问题在现实世界的数据集中普遍存在——少数类别拥有大量样本,而多数类别只有寥寥数个样本。这种数据不平衡性给机器学习模型带来了巨大挑战,传统监督学习方法往往在头部类别上表现优异,却难以识别尾部类别。与此…...

终极指南:5分钟快速上手ChineseSubFinder自动化中文字幕下载

终极指南:5分钟快速上手ChineseSubFinder自动化中文字幕下载 【免费下载链接】ChineseSubFinder 自动化中文字幕下载。字幕网站支持 shooter、xunlei、arrst、a4k、SubtitleBest 。支持 Emby、Jellyfin、Plex、Sonarr、Radarr、TMM 项目地址: https://gitcode.com…...

Escrcpy实战指南:高效管理Android设备的智能控制解决方案

Escrcpy实战指南:高效管理Android设备的智能控制解决方案 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 你是否曾为同时管理多台An…...

百度网盘秒传脚本:告别重复上传,实现永久文件分享的3步解决方案

百度网盘秒传脚本:告别重复上传,实现永久文件分享的3步解决方案 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否曾经因为百度…...

三步打造你的中国象棋AI智能助手:VinXiangQi完整指南

三步打造你的中国象棋AI智能助手:VinXiangQi完整指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 还在为找不到合适的象棋对手而烦恼吗&…...

微信好友关系检测终极指南:3分钟找出谁偷偷删了你

微信好友关系检测终极指南:3分钟找出谁偷偷删了你 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 你…...

新手首次使用Taotoken调用Codex模型完成代码补全的全流程指南

新手首次使用Taotoken调用Codex模型完成代码补全的全流程指南 1. 注册账号与获取API Key 访问Taotoken官网完成账号注册流程。登录后进入控制台,在左侧导航栏找到「API密钥管理」页面。点击「创建新密钥」按钮,系统会生成一个以sk-开头的API Key字符串…...

解密Bebas Neue:一款开源几何字体的设计哲学与工程实践

解密Bebas Neue:一款开源几何字体的设计哲学与工程实践 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 在数字设计领域,字体选择往往决定了项目的视觉基调。当设计师寻求既具备专业质感又…...

MCP Server开发与增长实战:让AI助手主动调用你的API服务

1. 项目概述:从API到AI原生工具的桥梁 如果你手头有一个成熟的API服务,无论是数据核验、内容审核还是商品查询,你可能会发现一个尴尬的现实:你的API在开发者圈子里可能小有名气,但在AI助手(如Claude、Curso…...

从‘弹个窗’到‘拿Cookie’:用Burp插件xssValidator实战演练三种XSS漏洞的完整攻击链

从‘弹个窗’到‘拿Cookie’:Burp插件xssValidator实战三种XSS攻击链 在Web安全领域,XSS漏洞如同潜伏的幽灵,它能让看似无害的网页变成攻击者的武器。不同于纸上谈兵的理论分析,本文将带您进入攻击者的实战视角,用Burp…...

轻量级多模态学习框架LightFusion解析与应用

1. 项目概述:当多模态遇上轻量化在计算机视觉与自然语言处理的交叉领域,多模态学习正经历着从"重装坦克"到"轻型突击队"的转型。LightFusion框架的诞生,恰好解决了当前多模态模型普遍存在的三大痛点:参数膨胀…...

强化学习在复杂文档解析中的应用与优化

1. 项目背景与核心价值文档解析一直是NLP领域极具挑战性的任务。传统方法通常采用OCR识别规则模板的流水线方案,但面对复杂版式、多栏混排等场景时效果往往不尽如人意。三年前我在处理金融合同时就深有体会——表格跨页、手写批注、印章遮挡等场景让传统解析方法束手…...

5分钟告别Figma英文界面:设计师的终极汉化解决方案

5分钟告别Figma英文界面:设计师的终极汉化解决方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?菜单看不懂、属性面板一头雾水…...

LoongArch CPU设计实战:手把手教你用数据前递技术优化流水线冲突(附完整Verilog代码)

LoongArch CPU设计实战:手把手教你用数据前递技术优化流水线冲突(附完整Verilog代码) 当你第一次看到自己设计的LoongArch CPU流水线因为数据冲突频繁停顿,时钟周期像堵车一样堆积时,那种挫败感我深有体会。去年在调试…...

手把手教你复现百卓Smart S85F文件上传漏洞(CVE-2024-0939),附Yakit实战截图

实战指南:利用Yakit复现百卓Smart S85F文件上传漏洞(CVE-2024-0939) 在网络安全领域,漏洞复现是验证和深入理解漏洞的关键步骤。本文将带领读者一步步复现百卓Smart S85F设备中的文件上传漏洞(CVE-2024-0939&#xff…...

Linux桌面光标主题定制:从Circularity-Cursor安装到个性化配置全攻略

1. 从“千篇一律”到“眼前一亮”:为什么我们需要自定义光标如果你和我一样,在Linux桌面上度过了无数个日夜,那么对系统自带的那些光标主题,恐怕早已从习惯变成了“视而不见”。默认的“Adwaita”或者“DMZ-White”虽然经典&#…...

三步构建个人数字漫画库:零门槛本地化管理方案

三步构建个人数字漫画库:零门槛本地化管理方案 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mirrors…...