机器学习周报(8.19-8.25

文章目录

    • 摘要
    • Abstract
    • 1.PyTorch环境的配置及安装
      • 使用PyCharm配置环境
      • 安装配置jupyter
    • 2.两个Python常用函数
    • 3.DataSet
    • 4.TensorBoard的使用
      • 绘制一幅坐标图
      • 使用tendorboard对一幅图片进行操作
    • 5.torchvison中的transforms
    • 总结

摘要

在之前学习了一些机器学习相关理论之后,本周进行了一些简单的代码实操学习,学习了PyTorch环境的配置及安装,学习了DataSet类对图像数据的处理,简单学习了TensorBoard的安装与使用,实操了一些常见的Transforms对图像的变换操作

Abstract

After learning some theories related to machine learning, I have done some simple code operation learning this week, including the configuration and installation of PyTorch environment, the processing of image data by DataSet class, and the installation and use of TensorBoard. Some common Transforms to images are implemented

1.PyTorch环境的配置及安装

安装Anaconda,网址:https://www.anaconda.com/

安装成功之后,打开Anaconda的命令窗口,左侧有base代表安装成功

在这里插入图片描述在这里插入图片描述

在做不同的项目时,可能遇到不同版本的环境,比如这个项目用到pytorch 0.4,另一个项目用到pytorch 1.0,若你卸载了0.4,安装1.0版本,再碰到0.4版本,就要又卸载1.0版本,安装0.4版本。

Anaconda集成的conda包,创造出两个“房子”,一个是0.4版本,一个是1.0版本,需要哪个版本就使用哪个。

使用conda指令,创建一个“屋子”,-n后面是屋子的名字(可以自己起),python=3.8是python3.8版本。

conda create -n pytorch python=3.8

在这里插入图片描述

conda activate pytorch 激活这个环境
pip list 查看这个环境中的工具包

在这里插入图片描述

接下来安装pytorch,网址:https://pytorch.org/

在这里插入图片描述

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

检验安装是否成功

使用torch.cuda.is_available()来验证计算机的GPU是否可以被pytorch使用

在这里插入图片描述

使用PyCharm配置环境

  • 创建一个pytorch项目

在这里插入图片描述

在Python Console中进行一下输入

在这里插入图片描述
跟在命令行里一样,判断GPU是否可以被pytorch使用

在这里插入图片描述

安装配置jupyter

打开Anaconda命令行,执行

conda activate pytorch
conda install nb_conda (安装一个包
jupyter notebook (启动jupyter

在这里插入图片描述

2.两个Python常用函数

dir():打开,看见(让我们知道工具箱以及工具箱中的分隔区有什么东西)

help():说明书

在这里插入图片描述

例如:dir(torch)可以查看torch下面的一些工具
在这里插入图片描述

对于help()函数,可以让我们知道每个工具是如何使用的,工具的使用方法。(查看的是官方使用文档

在这里插入图片描述

3.DataSet

  • DataSet

DataSet:提供一种方式去获取数据及其label

  1. 如何获取每一个数据及其label
  2. 告诉我们总共有多少个数据

同时对于数据集的组织形式,有两种方式:

  1. 文件夹的名字,就是数据的label
  2. 文件名和label,分别处在两个文件夹中,label可以用txt的格式进行存储

在这里插入图片描述

比如:以下图片的label就是ants
在这里插入图片描述

from torch.utils.data import Dataset
from PIL import Image
import os'''
定义一个class类,继承 Dataset (from torch.utils.data import Dataset)
在类中,定义三个函数:
分别是:初始化 init、获得每一个数据 getitem、数据长度 len。
其中:
1.init:图片所在根路径,标签名,合并路径,将文件夹中的所有图片名字做成一个列表
2.getitem:从列表中逐一取出图片名字,命名为name,再次合并路径,并且把文件名连接在路径之后
用PIL中的Image.open函数,读取(加载)上述路径的文件(命名为img)(这里肯定是图像了),返回 图像img和标签 label(这是getitem的工作)
3.最后用len()返回列表的长度。
'''class MyData(Dataset):def __init__(self,root_dir,label_dir):self.root_dir = root_dirself.label_dir = label_dirself.path = os.path.join(self.root_dir,self.label_dir)self.img_path = os.listdir(self.path)def __getitem__(self, idx):img_name = self.img_path[idx] #获取每一张图片的名字img_item_path = os.path.join(self.path,img_name) #获取某一张图片的相对路径img=Image.open(img_item_path)label=self.label_dirreturn  img,labeldef __len__(self):return len(self.img_path)
'''
定义好MyData类之后,进行实例化这个类,定义参数(一个路径,加一个标签名)
引用之前定义的类,把上述参数,传递进去
'''#蚂蚁的数据集
root_dir = "dataset/train"
ants_label_dir = "ants"ants_dataset = MyData(root_dir,ants_label_dir)#蜜蜂的数据集
bees_label_dir = "bees"
bees_dataset = MyData(root_dir,bees_label_dir)#将两个数据集进行拼接
train_dataset = ants_dataset + bees_dataset

4.TensorBoard的使用

绘制一幅坐标图

安装TensorBoard的package

pip install tensorboard

from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")
# y=xfor i in range(100):writer.add_scalar("y=x" ,i, i)writer.close()

执行完上述代码会在项目中生成一个logs为名字的事件文件。
接下来执行该事件文件在终端中执行:

tensorboard --logdir=logs --port-6007
注意:logdir=事件文件所在的文件夹名(注意路径问题),可通过port来进行设置端口号

在这里插入图片描述

使用tendorboard对一幅图片进行操作

注意SummaryWriter的函数add_image 传入参数及其格式问题
在这里插入图片描述
在这里插入图片描述

使用numpy.array(),对PIL图片进行转换

在这里插入图片描述

from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np'''
定义一个变量=一张图片的相对路径
用PIL中的Image.open函数,读取(加载)上述路径的文件(命名为img_PIL,格式为PIL.JpegImagePlugin.JpegImageFile)
使用numpy.array()将PIL格式转换为array格式
查看writer.add_image()官方文档 查看例子使用
注意:从PIL到numpy,需要在add_image()中指定shape中每一个数字/维表示的含义(dataformats='HWC',图片的高度,宽度,维度)
'''writer = SummaryWriter("log_1")img_path = "data/train/ants_image/0013035.jpg"
img_PIL = Image.open(img_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)writer.add_image("test", img_array, 1, dataformats='HWC')
writer.close()

在这里插入图片描述

改变title,step,这样可以在训练的时,很方便的看到给modle哪些数据,可以看到每个阶段的输出结果,还可以观察不同step的显示结果

在这里插入图片描述

5.torchvison中的transforms

transforms是一个transforms.py文件,里面有很多类和函数,可以查看官方文档查看使用

在这里插入图片描述

对于tensor数据类型,是我们在训练model时,使用十分方便的类型,里面包含了许多训练model要用的变量
在这里插入图片描述

  • ToTensor的使用

以transforms.ToTensor为例,以为为python中transforms使用,transforms.ToTensor()是一个类,返回一个对象,通过类中的函数实现具体功能

在这里插入图片描述

from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
from PIL import Imageimg_path = "data/train/bees_image/90179376_abc234e5f4.jpg"
img_PIL = Image.open(img_path)#transforms该如何使用(python)
img_tentor = transforms.ToTensor()
img = img_tentor(img_PIL)writer = SummaryWriter("log_2")
writer.add_image("tentor_demo",img)
writer.close()

在这里插入图片描述

  • Normalize的使用

Normalize a tensor image with mean and standard deviation.

# Normalize
trans_norm = transforms.Normalize([1, 0.5, 2], [2, 0.1, 0.2])
img_norm = trans_norm(img)
# print(img_norm)writer.add_image("norm_demo", img_norm, 2)

在这里插入图片描述

  • Resize的使用
# Resize
print(img_PIL.size)
trans_resize = transforms.Resize((256, 256))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img_PIL)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("resize", img_resize, 0)
print(img_resize)

在这里插入图片描述

  • Compose使用,对图片组合几种转换一起操作
# Compose-resize
trans_resize2 = transforms.Resize(512)
# PIL -> PIL resize -> tensor resize 其实是一个两步变换,要主要输入的图片的格式
trans_compose=transforms.Compose([trans_resize2,trans_totensor])
img_compose = trans_compose(img_PIL)
writer.add_image("resize", img_compose, 1)

在这里插入图片描述
在这里插入图片描述

  • RandomCrop使用,随机裁剪图片
# RandomCrop
trans_RandomCrop = transforms.RandomCrop(256)
trans_compose_2 = transforms.Compose([trans_RandomCrop, trans_totensor])
for i in range(10):img_crop = trans_compose_2(img_PIL)writer.add_image("RandomCrop", img_crop, i)

总结

本周进行了PyTorch的相关学习,但是对于TensorBoard部分的实际应用,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法进阶2-动态规划】最长公共子序列、欧几里得算法-分数、RSA算法-密码于加密

1 最长公共子序列 2 欧几里得算法 2.1 欧几里得算法-分数 3 RSA算法-密码于加密 1 最长公共子序列 -个序列的子序列是在该序列中删去若干元素后得 到的序列。 例:“ABCD”和“BDF”都是“ABCDEFG”的子序列最长公共子序列(LCS)问题:给定两个序列X和Y,求X和Y长度最大…

Hadoop的概念

目录 1.什么是大数据 2.Hadoop体系结构 1:HDFS(Hadoop Distributed File System) 2 :MapReduce 3:YARN(Yet Another Resource Negotiator) 3、Hadoop生态圈 4、MapReduce的原理和工作流程…

android gradle 配置国内gradle地址

1. 地址: 腾讯云镜像 Gradle下载地址:https://mirrors.cloud.tencent.com/gradle/ 阿里云镜像 Gradle下载地址:https://mirrors.aliyun.com/macports/distfiles/gradle/ 阿里云镜像 Gradle下载地址:https://mirrors.aliyun.com…

浪潮服务器主板集成RAID常见问题

★主板集成RAID出现Initialize初始化,如下图 判断及解决方案: 1.机器是否有过插拔硬盘等操作。 2.系统初始化-系统启动会非常的慢。一般为非法关机或者断电导致。 3.出现此情况耐心等待磁盘初始化完成即可。系统初始化时间以具体的数据大小来决定&#…

Linux启动流程和Systemd特性

文章目录 内核设计流派linux启动流程1.硬件加电自检2.启动加载器bootloader3.加载kernel4.init初始化5.用户终端启动 systemdsystemd特性systemd的unitunit配置文件 systemctl管理系统服务service unit服务状态 service unit文件格式Unit段Service段Install段 内核设计流派 1.…

android 实现简易音乐播放器

音乐App 源代码 : 简易音乐APP源代码 1、简介 一个简易的音乐APP,主要练习对四大组件的应用。感兴趣的可以看看。 播放界面如下: 歌曲列表界面如下: 项目结构如下: 接下来将对代码做详细介绍: 2、Musi…

【SpringCloud Alibaba】(九)学习 Gateway 服务网关

目录 1、网关概述1.1、没有网关的弊端1.2、引入 API 网关 2、主流的 API 网关2.1、NginxLua2.2、Kong 网关2.3、Zuul 网关2.4、Apache Shenyu 网关2.5、SpringCloud Gateway 网关 3、SpringCloud Gateway 网关3.1、Gateway 概述3.2、Gateway 核心架构 4、项目整合 SpringCloud …

大模型在应用开发安全左移实践

1.应用开发安全左移势在必行 近年来,应用系统被入侵或敏感信息泄漏类的安全事件时有发生,大部分安全事件的根本原因是应用软件设计或实现中存在安全漏洞。由于软件安全性问题导致各种信息泄密、信息被篡改、网络服务中断的事件频发,给企业和…

C# 泛型类型的约束详解与示例

文章目录 一、泛型约束概述二、泛型约束详解与示例1. 类约束2. 接口约束3. 引用类型约束4. 值类型约束5. 无参数构造函数约束6、多重约束7、默认构造函数约束8、基类和接口的组合约束 三、总结 在C#编程语言中,泛型是一种非常强大的特性,它允许我们编写可…

图解Redis五大数据类型

五种数据类型的不同之处&#xff0c;是value在存储时的形式不同。 hash类型 value类型是<key,value>键值对。如果发生hash冲突&#xff0c;用开放定址法解决&#xff0c;不拉链&#xff01; key值重复&#xff0c;则新值覆盖旧值 List类型 Set类型 与List的类似&…

3款一键AI智能改写软件,轻松改出高质量文章 tzq

随着科技的不断发展&#xff0c;人工智能技术正逐渐渗透到各个领域。在写作方面&#xff0c;一键AI智能改写软件的出现&#xff0c;为人们提供了更加便捷高效的写作工具。无论是写作初学者还是专业作家&#xff0c;都可以通过这些软件轻松改写出高质量的文章。本文将介绍三款优…

查找数学类文献的专业数据库有哪些 如何获取这些数据库资源

一、MathSciNet&#xff08;美国数学会《数学评论》&#xff09; MathSciNet数据库是美国数学学会出版的《数学评论》Mathematical Reviews和Current Mathematical Publications的网络版&#xff0c;包含《数学评论》自1940年出版以来的所有评论文章&#xff0c;包括期刊、图书…

【AI+编程】只需1句提示词0代码生成前端展示效果

最近被Vercel发布的V0 编程效果惊艳到了&#xff0c; 不管是前端开发 还是立志成为全栈工程师的 同学&#xff0c;不可错过。 官网地址&#xff1a;https://v0.dev/chat/ 代码生成工具很多&#xff0c;不管是github copilot、阿里的通义灵码&#xff0c; 腾讯云的AI代码助手…

PyTorch升级之旅——主要组成模块

本文仅作为个人学习记录使用 文章目录 前言 一、深度学习的简单流程 二、基本配置 三、数据读入 四、模型构建 五、模型初始化 六、损失函数 七、训练和评估 八、可视化 九、PyTorch优化器 总结 前言 学习链接&#xff1a;第三章&#xff1a;PyTorch的主要组成模块…

leetcode 80 删除有序数组中的重复项 II

正文 仍旧使用双指针&#xff0c; 思想与 leetcode 26 删除有序数组中的重复项 一致。只是此时因为要求保留重复元素两次&#xff0c;我们的左侧指针可以从第二个数据开始&#xff0c;且右侧指针需要和两个元素的值进行判断。 class Solution:def removeDuplicates(self, nums…

深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)

目录 &#x1f354; RNN 概述 1.1 循环神经网络 1.2 自然语言处理 &#x1f354; 词嵌入层 2.1 词嵌入层的使用 2.2 关于词嵌入层的思考 2.3 小节 &#x1f354; 循环网络层 3.1 RNN 网络原理 3.1.1 RNN计算过程 3.1.2 如何计算神经元内部 3.2 PyTorch RNN 层的使用…

Flask返回Json格式字符,中文导致unicode乱码问题

一.问题描述 或者直接返回json格式的字符串 从上图可以看出&#xff0c;当flask实现的接口响应中存在中文时&#xff0c;接口返回json字串的中文为unicode乱码。 二.问题解决 百度搜索了很多&#xff0c;原来在创建flask app时使用json格式的字符串&#xff0c;默认是ascii编…

字节微前端框架Garfish

Garfish 是字节跳动开源的微前端框架&#xff0c;旨在应对现代 Web 应用在前端生态繁荣与应用日益复杂化背景下的挑战。本文将介绍如何使用 Garfish&#xff0c;提供代码示例&#xff0c;并与另一流行的微前端框架 Qiankun 进行对比分析。 安装 Garfish 首先&#xff0c;安装…

快速排序模版

1.霍尔法 #include <iostream> using namespace std; int partition(int *arr,int left,int right){int pivotIndexleft;while(left<right){while(left<right && arr[right]>arr[pivotIndex]){right--;}while(left<right && arr[left]<a…