深度学习(一)——使用Python读取图片

深度,学习,使用,python,读取,图片 · 浏览次数 : 252

小编点评

**1. dir()工具的作用** `dir()` 函数用于显示类或模块的属性和方法。在 Python 中,`dir()` 可以用于打开 package,显示其内所有工具函数的名称和参数。例如: ```python import torch # 输出 torch 库中包含的函数 dir(torch) print(dir(torch)) ``` **2. `help()` 工具的作用** `help()` 函数可以显示库中特定函数的用法或参数说明。例如: ```python help(torch.AVG) ``` **3. Pytorch 读取图像数据** ```python # 导入 PIL 库 import PIL # 加载图像数据 img_path = "hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg" # 打开图像 img = PIL.Image.open(img_path) # 获取图像大小 print(img.size) ``` **4. os库中的路径合并** `os.path.join()` 函数可以合并路径,并在一定程度上避免因 Python 语法问题造成的 \\t 或 \这样的错误。例如: ```python # 合并路径 path = os.path.join("/home/user/folder1", "folder2") ``` **5. Dataset的作用** Dataset 类是 Python 中用于读取和处理数据的一款工具。它提供以下方法: * `__init__` 方法用于初始化数据集,包括路径和标签。 * `__getitem__` 方法用于获取数据,并返回图像文件和标签。 * `__len__` 方法返回数据集的长度,即数据集中有多少张图片。 **6. 存储图像数据** ```python # 创建目标文件夹 root_dir = "E:\\\\Desktop\\\\hymenoptera_data\\\\hymenoptera_data\\\\train" # 创建目标文件夹下的图片路径列表 img_path = os.listdir(os.path.join(root_dir, target_dir)) # 将图片名称和标签写入 .txt 文件中 for i in img_path: file_name = i.split(".jpg")[0] with open(os.path.join(root_dir, out_dir, "{}.txt".format(file_name)), "w") as f: f.write(label) ```

正文

一、Python学习两大道具

1. dir()工具

  • 作用:支持打开package,看到里面的工具函数

  • 示例:

    (1) 输出torch库包含的函数

dir(torch)

(2) 输出torch.AVG函数中的参数

dir(torch.AVG)

2. help()工具

  • 作用:说明书,查看库中函数某个参数的说明或使用方法

  • 示例:

    (1) 输出torch库中AVG函数的AVG参数使用方法

help(torch.AVG.AVG) 

二、Pytorch读取图像数据

0. 写在前面:

(1)PIL库中Image函数的基本使用方法

  • PIL的安装:win+r → cmd → 选择环境 → pip install Pillow

  • 使用方法:

from PIL import Image
  
#选择图像路径
#注意:在复制图像路径后,在windows环境下,需要将\变为\\
img_path="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg"
  
#打开并标识给定的图像文件。
#image.open()是一个懒惰的操作;此函数可识别文件,但文件保持打开状态,直到尝试处理数据(或调用load()方法),才会从文件中读取实际图像数据。
img=image.open(img_path)
  
#输出图像大小
print(img.size)
  
#打开图像(指的是直接根据该地址打开一个窗口显示这个图像)
img.show()

(2)os库中函数的基本使用方法

  • os.path.join(path1, path2, ... ,pathn):合并路径,在一定程度上可以避免因python语法问题,造成的\t或\n之类的错误。

    比如说,图片路径为:”hymenoptera_data\hymenoptera_data\train“,如果直接输入路径,那么会出现以下结果:

path="hymenoptera_data\hymenoptera_data\train"
print(path)
  
'''
[Run]
hymenoptera_data\hymenoptera_data    rain
'''

此时的处理方法有两种:

方法一:在\后面加个\

path="hymenoptera_data\\hymenoptera_data\\train"
print(path)

'''
[Run]
hymenoptera_data\hymenoptera_data\train
'''

方法二:os.path.join

import os
path1="hymenoptera_data\hymenoptera_data"
path2="train"
path=os.path.join(path1,path2)
print(path)
  
'''
[Run]
hymenoptera_data\hymenoptera_data\train
'''
  • os.listdir(path):将path中包含的图片名称变为一个列表。

    比如说,路径为”hymenoptera_data\hymenoptera_data\train\ants“的文件夹中有0013035.jpg、5650366_e22b7e1065.jpg、6240329_72c01e663e.jpg三张图片,那么此时有:

import os
path="hymenoptera_data\\hymenoptera_data\\train\\ants"
path_list=os.listdir(path)
print(path_list)
  
'''
[Run]
['0013035.jpg', '5650366_e22b7e1065.jpg', '6240329_72c01e663e.jpg']
'''

1. Dataset

  • 作用:提供一种方式去获取数据及其label

  • 功能:

    • 如何获取每一个数据及其label

    • 告诉我们总共有多少数据(作用:神经网络要对同一个数据迭代多次,只有当我们知道总共有多少个数据,训练的时候我们才知道要训练多少次,才能把这个数据集迭代完然后进行下一次的迭代)

  • 详解:

    • getitem:获取数据对应的label

    • len:返回数据的size

使用示例:

数据下载地址:百度网盘 请输入提取码 (baidu.com)

提取码:zsh8

(1)读取、简单处理图像数据

from torch.utils.data import Dataset
from PIL import Image
import os

class MyData(Dataset):
    #参数说明:
    #root_dir:数据集的路径,如"E:\Desktop\hymenoptera_data\hymenoptera_data\train"(最好还是都加上\\,像其中的\train由于\t的存在会导致错误)
    #label_dir:数据的标签,如"ants"
    def __init__(self,root_dir,label_dir):
        self.root_dir=root_dir
        self.label_dir=label_dir

        # 使用os.path.join的方法是为了避免\和\\错误的问题
        # self.path='E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants'
        self.path=os.path.join(self.root_dir,self.label_dir)

        #将文件夹内所有图片的地址变成一个列表,并按先后顺序排列
        self.img_path=os.listdir(self.path)

    #输入:图像对应的索引
    #返回:idx索引对应的打开并标识过后的图像文件img;图像对应的标签label
    def __getitem__(self,idx):
        img_name=self.img_path[idx]    #根据索引idx,读取列表self.img_path中的图像名称
        img_item_path=os.path.join(self.root_dir,self.label_dir,img_name)   #读取该索引对应图像的存储路径
        img=Image.open(img_item_path)  #打开并标识给定的图像文件
        label=self.label_dir    #label=数据标签,在该数据集中为ant或bee
        return img,label

    #返回图像数据集的长度,也就是说所读取的数据集中有多少张图片
    def __len__(self):
        return len(self.img_path)

root_dir="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train"
ants_label_dir="ants"
bees_label_dir="bees"
ants_dataset=MyData(root_dir,ants_label_dir)
bees_dataset=MyData(root_dir,ants_label_dir)

img,label=ants_dataset[0]
print(img,label)   #根据索引,获取标识过后的图像img,以及对应的标签
img.show()         #显示对应索引的图像

train_dataset=ants_dataset+bees_dataset    #将两个数据集进行拼接
print(len(ants_dataset),len(bees_dataset),len(train_dataset))

(2)存储图像数据

首先新建一个文件夹,在该文件夹中:.txt文件名表示.jpg的图片名称,.txt文件中存储的数据为对应图像的label。用下面代码将文件名、label实现写入:

import os

root_dir="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train"
target_dir="ants"
img_path=os.listdir(os.path.join(root_dir,target_dir))  #将target_dir文件夹中的图片名称存到img_path的列表中
label=target_dir  #标签为target_dir(根据实际情况读取标签)
out_dir="ants_label"   #输出图片的地址
for i in img_path:  #遍历每一张图片的名字
    file_name=i.split(".jpg")[0]   #除去.jpg后缀,取出图片名字
    with open(os.path.join(root_dir,out_dir,"{}.txt".format(file_name)),'w') as f:   #以图片名命名.txt文件
        f.write(label)  #将相应图片的标签,写入.txt文件中

2. Dataloder

  • 作用:为后面的网络提供不同的数据形式(对其中几条数据进行打包)

与深度学习(一)——使用Python读取图片相似的内容:

深度学习(一)——使用Python读取图片

Pytorch处理图像的一些入门,内含os和PIL库相关的图像处理方法

深入Scikit-learn:掌握Python最强大的机器学习库

> 本篇博客详细介绍了Python机器学习库Scikit-learn的使用方法和主要特性。内容涵盖了如何安装和配置Scikit-learn,Scikit-learn的主要特性,如何进行数据预处理,如何使用监督学习和无监督学习算法,以及如何评估模型和进行参数调优。本文旨在帮助读者深入理解Scikit-

使用Python实现深度学习模型:序列到序列模型(Seq2Seq)

本文介绍了序列到序列(Seq2Seq)模型的基本原理,并使用 Python 和 TensorFlow/Keras 实现了一个简单的英法翻译模型。

基于Python和TensorFlow实现BERT模型应用

本文分享自华为云社区《使用Python实现深度学习模型:BERT模型教程》,作者: Echo_Wish。 BERT(Bidirectional Encoder Representations from Transformers)是Google提出的一种用于自然语言处理(NLP)的预训练模型。BERT

解读注意力机制原理,教你使用Python实现深度学习模型

本文介绍了注意力机制的基本原理,并使用 Python 和 TensorFlow/Keras 实现了一个简单的注意力机制模型应用于文本分类任务。

算法金 | 时间序列预测真的需要深度学习模型吗?是的,我需要。不,你不需要?

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 参考 论文:https://arxiv.org/abs/2101.02118 更多内容,见微*公号往期文章: 审稿人:拜托,请把模型时间序列去趋势!! 使用 Python 快速上手 LS

快速上手python的简单web框架flask

简介 python可以做很多事情,虽然它的强项在于进行向量运算和机器学习、深度学习等方面。但是在某些时候,我们仍然需要使用python对外提供web服务。 比如我们现在有一个用python写好的模型算法,这个模型算法需要接收前端的输入,然后进行模拟运算,最终得到最后的输出。这个流程是一个典型的web

Pytorch:单卡多进程并行训练

在深度学习的项目中,我们进行单机多进程编程时一般不直接使用multiprocessing模块,而是使用其替代品torch.multiprocessing模块。它支持完全相同的操作,但对其进行了扩展。Python的multiprocessing模块可使用fork、spawn、forkserver三种方法来创建进程。但有一点需要注意的是,CUDA运行时不支持使用fork,我们可以使用spawn或for

构建基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统(Python3.10/Tensorflow2.11)

毋庸讳言,和传统架构(BS开发/CS开发)相比,人工智能技术确实有一定的基础门槛,它注定不是大众化,普适化的东西。但也不能否认,人工智能技术也具备像传统架构一样“套路化”的流程,也就是说,我们大可不必自己手动构建基于神经网络的机器学习系统,直接使用深度学习框架反而更加简单,深度学习可以帮助我们自动地从原始数据中提取特征,不需要手动选择和提取特征。

Python学习之十八_django的学习(二)

# Python学习之十八_django的学习(二) ## 前言 ``` 前面学习了基本的django的使用. 这里想着稍微深入一点学习templates 以及进行级联的路由展示. ``` ## 修改配置文件 ``` 要想使用 templates下面的文件. 需要修改一下项目级别的 settings