机器学习周报(8.19-8.25

news2024/9/23 17:24:11

文章目录

    • 摘要
    • 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_dir
        self.label_dir = label_dir
        self.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_dir
        return  img,label

    def __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 SummaryWriter

writer = SummaryWriter("logs")
# y=x

for 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 Image

img_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.coloradmin.cn/o/2074061.html

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

相关文章

【限时免费发放】2000+热门Scratch作品源码

欢迎访问小虎鲸Scratch资源站!在Scratch编程的学习过程中,优质的资源和灵感是至关重要的。因此,我们特别准备了这份【免费下载】的Scratch作品源码合集,包含超过2000个精选的Scratch项目源码,旨在为Scratch编程爱好者和…

Nginx+keepalived实现高可用

目录 一、准备工作 1、安装软件 二、配置master主服务器 1、修改nginx主配置文件 ​编辑 2、修改keepalived主配置文件 三、配置backup备服务器 四、配置节点服务器 1、配置第一个节点服务器 1.1、设置虚拟网卡 1.2、忽略ARP请求 1.3、安装并启动nginx软件 2、配置…

【STM32】SPI接口(非连续传输)

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 前言 SPI简介 IO口初始化 SPI配置 时钟使能 SPI初始化 SPI使能 数据接收与发送 硬件SPI代码 MySPI.h MySPI.c 前言 【通信协议】SPI总线-CSDN博客 本篇博客学习使用STM32的…

Expo 开发ReactNative 后切换 eas 账号

修改slug app.json中的sulg字段更新为新账号应用sulg 修改projectId app.json中的extra.eas.projectId字段更新为新账号应用projectId 退出账号: eas logout 重新登录: eas login

基于WEB的学生综合测评系统的设计与实现

第1章 绪 论 1.1 系统开发背景 随着计算机技术的不断发展,在现代化社会中,信息的处理越来越依赖计算机来完成。在没有测评系统之前,所有的信息记录都是由人工记录维护,不但不方便,还经常出错,有了测评系统就可以方便的对各种信息…

.net maui安卓开发中使用明文传输(一)

背景:最近在做一个pad上的项目,目的是执行每日点检功能(就是检查设备的各项保养指标);前期用HBuilder做了一个,但是现场的触摸屏选用的是TouchPie 安卓版本是6.0版本,上次开发的软件可以在安卓7.0上完美兼容,但由于触摸屏安卓版本太低不能兼容;询问厂商才知道这款触摸…

【Datawhale AI夏令营】从零上手CV竞赛Task1

【Datawhale AI夏令营】从零上手CV竞赛Task1 前言赛事官网学习任务TASK 1 前言 这个暑假我通过微信群关注到了【Datawhale AI夏令营】,并且记录我的代码学习以及调试的过程。 赛事官网 赛事官网:https://www.marsbigdata.com/competition/details?id…

RING总线(环形总线)Intel大小核的由来

想到Intel处理器,无一例外大家想到的就是现在的它具有大小核的结构,也就是性能核和效能核。这种结构的由来是由RING总线布局结构而诞生。ring总线(环形总线),这个名字经常出现在讨论普通消费级处理器的时候&#xff0c…

算法【Java】—— 二分查找

二分查找算法分析 二分查找算法其实也是对撞指针的另一种用法,左右两个指针分别指向数据的左右端点,然后双指针向中间移动。 朴素二分查找 上面这道题是朴素的二分查找算法,由于数据是有序的,我们可以从中间值入手 如果中间值大…

国货之光|暴雨机推出面向大模型训练的AI服务器

当前,“百模大战”带来了算力需求的爆发,尤其是以ChatGPT为代表的多模态AI大模型,‌其参数规模和训练数据量均达到了前所未有的规模。‌GPT-3.5、‌GPT-4等模型的参数规模突破了万亿级别,‌训练数据量达到了TB级别,‌这…

AI多模态模型架构之模态生成器:Modality Generator

〔探索AI的无限可能,微信关注“AIGCmagic”公众号,让AIGC科技点亮生活〕 本文作者:AIGCmagic社区 刘一手 前言 AI多模态大模型发展至今,每年都有非常优秀的工作产出,按照当前模型设计思路,多模态大模型的…

Ai+若依(定时任务):【01篇】

若依为定时任务功能提供方便友好的web界面,实现动态管理任务。 案例 每间隔5秒,控制台输出系统时间。 实现步骤: ①创建任务类 在服务 ==》ruoyi-quartz==》task==》MyTask package com.ruoyi.quartz.task;import org.springframework.stereotype.Component;@Component…

程序员修炼之道 10:并发

不记录,等于没读。 这里是我阅读《程序员修炼之道》这本书的记录和思考。 并发和并行代码曾经是很新奇的玩意,但现在已经是标配。 并发 :Concurrency,指的是两个或更多个代码段在执行过程中表现得像是在同时运行一样。 并行 &am…

AD的3D模型格式是什么

AD通常指的是Altium Designer,这是一款用于电子设计自动化的软件,主要用于电路板的设计。在Altium Designer中,3D模型主要用于PCB(印制电路板)设计中的可视化,以便设计师能够在三维空间中查看组件和板的布局…

21:【stm32】定时器二:输入捕获

输出捕获 1、输出捕获的简介2、输入捕获原理2.1、输入滤波2.2、信号选择2.3、CCx事件和CCx中断 3、标准库编程 1、输出捕获的简介 定时器通过通道捕获输入电平的变化,而通道有CH1~CH4,这4个通道。 我们设定对通道CH3的输入电平进行捕获。假如CH3突然捕获…

Java排序算法详解

在Java编程中,排序算法是数据处理和算法设计中的基础且重要的部分。它们广泛应用于各种场景,如数据库管理、数据分析、图形界面排序等。掌握几种常见的排序算法对于提升程序效率和优化性能至关重要。本文将详细解析几种经典的Java排序算法,包…

OpenGL笔记二十之深度检测概念

OpenGL笔记二十之深度检测概念 —— 2024-08-25 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记二十之深度检测概念1.课程PPT截图2.运行3.代码 1.课程PPT截图 2.运行 3.代码 关键部分 main.cpp #include <iostream>#include "glfra…

【逐行注释】三维EKF的MATLAB代码|附下载链接

文章目录 程序概况源代码与注释运行结果代码块解析 程序概况 基于MATLAB的EKF&#xff08;扩展卡尔曼滤波&#xff09;代码解析。状态转移和观测都是非线性的&#xff0c;也就是说会涉及到雅克比矩阵的求解。我尽量将模型设计复杂一点&#xff0c;便于拿到手以后改成自己想要的…

C++类和对象(2)——拷贝构造函数

拷贝构造函数的语法 拷贝构造函数是构造函数的重载&#xff0c; 用于这种情况&#xff1a;用已经构造好的对象去给另一个对象初始化。 int main() {Date d1(2024, 8, 1);Date d2(d1);//用d1初始化d2return 0; } 我们以Date类为例子讲解一下。 class Date { public://全缺省…

.NET周刊【8月第3期 2024-08-18】

国内文章 Roslyn 简单实现代码智能提示补全功能 https://www.cnblogs.com/lindexi/p/18365261 相信有很多伙伴热衷于编写 IDE 应用&#xff0c;在 dotnet 系下&#xff0c;通过 Roslyn 友好的 API 和强大的能力&#xff0c;实现一个代码智能提示是非常简单的事情。本文将和大…