96SEO 2026-02-23 14:51 12
。

不得不感叹#xff0c;深度学习是真的火啊。
纯小白#xff0c;有错的欢迎指正~
参考视频#xff1a;PyTorch深度学习快速入门教程#xff08;绝对通俗易懂#xff01;#xff09;【小土堆…之前完全没有了解过深度学习和pytorch但现在因为某些原因不得不学了。
不得不感叹深度学习是真的火啊。
纯小白有错的欢迎指正~
参考视频PyTorch深度学习快速入门教程绝对通俗易懂【小土堆】_哔哩哔哩_bilibili
不得不夸一句这个老师讲的很仔细了并且他排查错误和查找函数使用方法的方式让我受益匪浅。
顺带提一嘴因为项目原因我没有使用老师用的pycharm用的是vscode。
下载过程我就不重复了其实我也重下了好几次一度崩溃了一不小心c盘就爆了o(╥﹏╥)o。
---------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
pytorch中带有加载处理数据的工具以下就是其中两个很常用到的工具。
作用提供一种方式获取数据及label、告诉我们总共有多少数据。
也就是说我们可以通过重写这个类来构造我们自己的数据集方便后面进行深度学习的训练操作。
#注意大小写这里导入的是Dataset类不是dataset文件
跟着up主学习了一种新的掌握新工具的方式使用python中自带的help函数可以快速查看用法。
比如这个dataset。
:class:Dataset.|以下这段提到所有继承Dataset的子类都需要重写__getitem__方法可有选择的重写__len__方法
:class:~torch.utils.data.Sampler
:class:~torch.utils.data.DataLoader.||
:class:~torch.utils.data.DataLoader
MyData(Dataset):#自定义构造方法这里我们希望获取图片路径把图片读入def
__init__(self,root_dir,label_dir):self.root_dirroot_dirself.label_dirlabel_dirself.pathos.path.join(root_dir,label_dir)self.img_pathos.listdir(self.path)#重写__getitem__方法这个方法的重写可以帮助我们调取数据集中的某一个数据def
index):img_nameself.img_path[index]img_item_pathos.path.join(self.root_dir,self.label_dir,img_name)imgimage.open(img_item_path)labelself.label_dirreturn
len(self.img_path)root_dird:\\Desktop\\hymenoptera_data\\train
#实例化对象传入构造参数后这个对象就已经导入了我们想要的数据集
ants_datasetMyData(root_dir,ants_label_dir)
#使用索引的方式这里的[index]与上面__getitem__函数中的index相对应可以单独调出其中某一张图片数据
个人理解为dataset之前有讲其实是我们自定义一个类继承它就可以实现完整的数据集的导入(它会告诉程序数据集在什么地方)而在训练模型过程中我们使用dataloader来抽取其中的某一些数据。
torch.utils.data.DataLoader(dataset,
介绍一下这个类的常用参数部分会以视频上老师说的打牌例子来介绍假如说dataset就是一摞牌那么dataloader就是我们抽到手里的牌
dataset我们的数据集batch_size:指定每一次取数据集中的多少个数据默认1一次抽取多少张牌shuffle:指定数据集在每次抽取时是否重新排列默认False每次抽牌前是否洗牌num_workers:采用单进程还是多进程默认为0drop_last:当除不尽时是否舍弃比如一共有100张牌要求每次取三张那么到最后有1张多余这个参数用于设置是否把最后一张舍弃掉
当设置batch_size为4时dataloader会从dataset中抽取四个数据出来并将他们的img打包为imgs把target打包为targets。
tensor_transtorchvision.transforms.ToTensor()
trans_composetorchvision.transforms.Compose([tensor_trans])
test_settorchvision.datasets.CIFAR10(root./dataset,trainFalse,downloadTrue,transformtrans_compose)
test_loaderDataLoader(datasettest_set,batch_size4,shuffleTrue,num_workers0,drop_lastFalse)#测试集中的第一张图片及target
test_loader:imgs,targetsdataprint(imgs.shape)print(targets)
imgs打印:torch,Size([4,3,32,32])4代表4张图片3代表3通道3232代表32*32大小的图片
tensor_transtorchvision.transforms.ToTensor()
trans_composetorchvision.transforms.Compose([tensor_trans])
test_settorchvision.datasets.CIFAR10(root./dataset,trainFalse,downloadTrue,transformtrans_compose)
test_loaderDataLoader(datasettest_set,batch_size4,shuffleTrue,num_workers0,drop_lastFalse)#测试集中的第一张图片及target
print(target)writerSummaryWriter(Logs)
print(targets)writer.add_images(test_data,imgs,step)stepstep1writer.close()
这里忘改batch_size了老师视频上把这个改成了64所以我这里仍是4张图片一组可以看到结果是这样的
训练过程中的各种数据和指标。
它提供了一个直观的界面帮助开发者更好地理解、调试和优化他们的机器学习模型。
可以实时地展示训练和验证集的损失值、准确率、学习率等指标的变化情况。
这些指标可以帮助开发者监控模型的训练进度和性能表现。
可以展示各个变量的直方图和分布图。
这些图表能够帮助你了解权重、偏置和梯度等变量的分布情况有助于调试和优化模型的训练过程。
如果你的模型包含嵌入层EmbeddingTensorBoard
可以将嵌入向量在高维空间中进行可视化帮助你理解和分析这些向量的含义和关系。
还提供了一个操作面板显示图中的操作ops和其用法。
此外时间线功能可以帮助你查看
但现在tensorboard不仅可以在tensorflow中使用也可以单独使用它将会对我们理解模型的训练过程十分有帮助因此来简单学习它的使用方法。
按住ctrl鼠标单击SummaryWriter可以查看这个类的使用方法其中提供了一个使用例子
runs/May04_22-14-54_s-MacBook-Pro.local/#
SummaryWriter(commentLR_0.1_BATCH_16)#
runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/
writerSummaryWriter(Logs)将要介绍的方法
writer.add_image()writer.close()
-----------------------------------------------------------------------------------以上这段话在介绍这个方法所包含的形参tag其实就是图表的标题global_step是横轴
-----------------------------------------------------------------------------------Examples::from
_static/img/tensorboard/add_scalar.png:scale:
库中transform转换指的是一系列的图像预处理操作用于在数据加载过程中对图像进行变换和处理。
这些变换可以应用于数据集的图像以便于在训练过程中增强数据、标准化数据或使数据更适合于模型训练。
通过transform.py文件中的ToTensor类可以实现图像转换为张量的操作方便后续数据的训练。
img_pathD:\\Desktop\\hymenoptera_data\\train\\ants\\0013035.jpg
tensor_transtransforms.ToTensor()
这里有一个小的注意事项ToTensor类接受两种类型的数据PIL的image类型和numpy的ndarray因此
img_pathD:\\Desktop\\hymenoptera_data\\train\\ants\\0013035.jpg可以使用Image读取图像
imgImage.open(img_path)也可以使用opencv读取图像这个读入的类型就是ndarray
以上的讲解把图像的输入和输出给讲解了。
总结一下输入其实就是两种方式一个是image格式一个是ndarray格式而输出则是使用Transform.py文件中的ToTendor类将上述两种格式转换成tensor张量输出方便后续的操作。
作用把tensor类型或ndarray类型转换回image类型
https://pillow.read***docs.io/en/latest/handbook/concepts.html#concept-modes
中的一个转换函数用于对张量进行标准化处理。
它的作用主要是将输入张量的每个通道进行标准化使得每个通道的均值和标准差符合指定的数值从而使数据分布更加标准化和稳定。
对每个通道进行标准化处理使得数据在经过标准化后每个通道的均值为给定的
std。
这种标准化确保了数据分布的稳定性和一致性有助于提升模型训练的效果和稳定性。
标准化后的数据分布更加接近标准正态分布或者某个预期的分布有助于优化算法如梯度下降更快地收敛到最优解。
在深度学习中如果输入数据的范围过大可能会导致激活函数输出非常大的值从而使得梯度消失或爆炸。
标准化可以帮助限制数据的范围避免这些问题的发生。
channel.inplace(bool,optional):
D:\\Desktop\\hymenoptera_data\\train\\ants\\0013035.jpg
print(img_norm[0][0][0])Resize类
img_pathD:\\Desktop\\hymenoptera_data\\train\\ants\\0013035.jpg
tensor_transtransforms.ToTensor()
tensor_imgtensor_trans(img)trans_resizetransforms.Resize((512,512))
可以注意到上述使用resize变换前后都是image类型为了方便操作transform提供了一个类专门用来自定义流水线工程。
我们可以把任意多个transform组合起来封装成一个compose对象然后就可以简化我们的步骤了。
transforms.ConvertImageDtype(torch.float),
torch.jit.script(transforms)Make
img_pathD:\\Desktop\\hymenoptera_data\\train\\ants\\0013035.jpg
imgImage.open(img_path)#将resize和totensor操作流水线化
trans_resizetransforms.Resize((512,512))
tensor_transtransforms.ToTensor()
trans_composetransforms.Compose([trans_resize,tensor_trans])
#对图像只需要调用compose对象即可进行resize和totensor操作
img_pathD:\\Desktop\\hymenoptera_data\\train\\ants\\0013035.jpg
tensor_transtransforms.ToTensor()
trans_randomtransforms.RandomCrop(512)
trans_compose_1transforms.Compose([trans_random,tensor_trans])
#对图像只需要调用compose对象即可进行resize和totensor操作
img_compose_1trans_compose_1(img)
https://pytorch.org/docs/stable/index.html
train_settorchvision.datasets.CIFAR10(root./dataset,trainTrue,downloadTrue)
test_settorchvision.datasets.CIFAR10(root./dataset,trainFalse,downloadTrue)
这里提一嘴用相对路径下载后我以为它会在当前py文件所在的文件夹的上级文件夹下新建dataset文件夹但没想到它跑到了我之前建立的那个Logs文件夹下
原因在于我的命令行仍停留在Logs文件夹里记得执行cd..命令返回
dataset_transformtorchvision.transforms.Compose([torchvision.transforms.ToTensor()
train_settorchvision.datasets.CIFAR10(root./dataset,trainTrue,downloadTrue,transformdataset_transform)
test_settorchvision.datasets.CIFAR10(root./dataset,trainFalse,downloadTrue,transformdataset_transform)writerSummaryWriter(p1)
range(10):img,tarfettest_set[i]writer.add_image(test_set,img,i)writer.close()
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback